์๊ฐ
์ด๋ฒ ๋ฆฌ๋ทฐ์ ์ฃผ์ ๋ Gradle ์๋ ๋น๋ ์์คํ
์
๋๋ค. ์์ด๋ก ๋น๋ ์์คํ
์
Build Tools ๋ผ๊ณ ํฉ๋๋ค .
์ด๊ฒ์ด ์ ํ์ํ๊ฐ์? Java๋ก ํ๋ก์ ํธ๋ฅผ ์๋์ผ๋ก ๊ตฌ์ถํ๋ ๊ฒ์ ๋ค์ ๋
ธ๋ ์ง์ฝ์ ์ธ ํ๋ก์ธ์ค์
๋๋ค. ํ๋ก์ ํธ์ ํ์ํ๊ณ ํ๋ก์ ํธ๊ฐ ์์กดํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ๋ ์์ํฌ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ํ์ํ๋ ๊ฒ์ด ํ์ํฉ๋๋ค.
์ฌ๊ธฐ์์ Habrรฉ์ ๋ํ ํ๋ฅญํ ๊ธฐ์ฌ์ธ " ๋ช
๋ น์ค์์ Java ์์
" ์ ์ฝ์ ์ ์์ต๋๋ค . ์กฐ๋ง๊ฐ ์ด ํ๋ก์ธ์ค๋ฅผ ์๋ํํ๊ธฐ ์ํ ๋ช ๊ฐ์ง ์คํฌ๋ฆฝํธ๋ฅผ ๋ง๋ค๊ธฐ ์์ํ ๊ฒ์
๋๋ค. ์ด์ ์ ์ธ๊ณ์ ๋ชจ๋ ๊ฐ๋ฐ์๊ฐ ์ด ์์
์ ์ํํ๊ณ ๋๊ตฐ๊ฐ๊ฐ ์์ ์ ํ๋ก์ ํธ๋ฅผ ์ํด ์ด๋ฏธ ์์ฑํ ๋ด์ฉ์ ๋ชจ๋๊ฐ ๋ค์ ์์ฑํ๋ค๊ณ ์์ํด ๋ณด์ญ์์ค. ๊ทธ๋ฆฌ๊ณ ์ด ํ๋ก์ธ์ค๋ฅผ ์๋ํํ๋ ํ๋ก์ ํธ ์กฐ๋ฆฝ ์์คํ
์ด ๋ฑ์ฅํ์ต๋๋ค. ๋ํ, ์ํ๋ ๋ฐฉ์์ผ๋ก ํ๋ก์ ํธ๋ฅผ ์กฐํฉํ ์ ์๊ฒ ํด ์ฃผ๋ ๋ฐ๋ฉด, ๋ค์ ํ์คํ๋ ๋๊ตฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. Gradle์ ๋์์ Maven ์๋ํ ๋น๋ ์์คํ
์
๋๋ค. ์ด ๋ ๊ฐ์ง ์กฐ๋ฆฝ ์์คํ
์ ํํธ์ผ๋ก๋ ๋ค๋ฅด์ง๋ง ๋ค๋ฅธ ํํธ์ผ๋ก๋ ๋ง์ ์ ์ฌ์ ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
Gradle ์น์ฌ์ดํธ์๋ " Maven์์ Gradle๋ก ๋ง์ด๊ทธ๋ ์ด์
" ์ด๋ผ๋ ์ฃผ์ ์ ๋ํ ์๋ฃ๊ฐ ์์ต๋๋ค . ์ด ํํ ๋ฆฌ์ผ์์ ์ค๋ช
ํ ๊ฒ์ฒ๋ผ Gradle๊ณผ Maven์ ํ๋ก์ ํธ๋ฅผ ๋น๋ํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์๋ก ๋ค๋ฅธ ๊ด์ ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. Gradle์ ์๋ก ์์กดํ ์ ์๋ ์์
๊ทธ๋ํ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค. ์์
์ ์ผ์ข
์ ์์
์ ์ํํฉ๋๋ค. Maven์ ํน์ "๋ชฉํ"๊ฐ ์ฒจ๋ถ๋ ํน์ ๋จ๊ณ์ ๋ชจ๋ธ์ ์ฌ์ฉํฉ๋๋ค. ์ด๋ฌํ ๋ชฉํ๋ ์ผ๋ถ ์์
์ด ์ํ๋๋ ๊ณณ์
๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ฌํ ์๋ก ๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ๋ ๋น๋ ์์คํ
๋ชจ๋ ๋์ผํ ๊ท์น์ ๋ฐ๋ฅด๋ฉฐ ์ข
์์ฑ ๊ด๋ฆฌ๋ ์ ์ฌํฉ๋๋ค. Gradle์ ์ฌ์ฉํ๋ ค๋ฉด Gradle์ ๋ค์ด๋ก๋ํด์ผ ํฉ๋๋ค. Google ๋๋ Yandex์์ "Gradle Build Tool"์ ์
๋ ฅํ๋ฉด ์ฒซ ๋ฒ์งธ ๊ฒฐ๊ณผ์ ๊ณต์ ์น์ฌ์ดํธ์ธ
https://gradle.org ๊ฐ ํ์๋ฉ๋๋ค . ๊ธฐ๋ณธ Gradle ํ์ด์ง์๋
Gradle ๋ฌธ์ ๋ก ์ฐ๊ฒฐ๋๋ "Docs"๋ผ๋ ํ
์คํธ๊ฐ ์๋ ๋งํฌ๊ฐ ์์ต๋๋ค . ๋จผ์ Gradle์ ์ค์น(Install)ํด์ผ ํ๋ฏ๋ก ๋ฌธ์์ "
Gradle ์ค์น " ์น์
์ ๊ด์ฌ์ด ์์ต๋๋ค. "๊ตฌ์" ๋ฐฉ๋ฒ์ ํฌํจํ์ฌ ๋ง์ ์ค์น ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ์๋์ผ๋ก(โ
์๋์ผ๋ก ์ค์น โ). ์ง์นจ์ ๋ฐ๋ผ gradle-5.1.1-bin.zip๊ณผ ๊ฐ์ ์ด๋ฆ์ ๊ฐ๋ "
๋ฐ์ด๋๋ฆฌ ์ ์ฉ " ์ ํ์ ํ์ผ์ ๋ค์ด๋ก๋ํฉ๋๋ค. ๋ค์์ผ๋ก, ์์นด์ด๋ธ์ ์์ถ์ ํ๊ณ ์ง์นจ์ ๋ฐ๋ผ PATH ํ๊ฒฝ ๋ณ์๋ฅผ ๊ตฌ์ฑํฉ๋๋ค. ๊ฐ์ฅ ์ค์ํ ์ ์ ์ง์นจ์ ์คํํ ํ ๋ช
๋ น์ด
gradle -v
์ค์น๋ Gradle์ ๋ฒ์ ์ ํ์ํ๋ค๋ ๊ฒ์
๋๋ค. ์์น๋ฅผ ๊ฒฐ์ ํ ๋ ์์คํ
์ด ์ํ๋ ์์น๊ฐ ์๋ Gradle์ ์ฐพ๋ ๋ฌธ์ ๊ฐ ์์ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ Windows์์๋ ๋ค์์ ์ํํ ์ ์์ต๋๋ค(*nix์๋ ์ ์ฌ ํญ๋ชฉ์ด ์์).
for %i in (gradle.bat) do @echo. %~$PATH:i
์ด์ ์ต์ํด์ง๊ธฐ ์์ํ ์ ์์ต๋๋ค.
Gradle ํ๋ก์ ํธ ์ด๊ธฐํ
์ ๋ Gradle์ด ์์
์ด๋ผ๋ ์์
์ ์ํํ๋ ๊ฒ์ ๊ดํ ๊ฒ์์ ์ฆ์ ์ธ๊ธํ๊ณ ์ถ์ต๋๋ค (๋๋ ์ด๋ฅผ ์์
์ด๋ผ๊ณ ๋ถ๋ฅด๊ฒ ์ต๋๋ค).
์์
์ ๋ค์ํ ํ๋ฌ๊ทธ์ธ ์ ์ํด ์ ๊ณต๋ฉ๋๋ค .
๊ณต์ ๋ฌธ์ " Gradle ํ๋ฌ๊ทธ์ธ ์ฌ์ฉ " ์์ ํ๋ฌ๊ทธ์ธ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ฝ์ด ๋ณด์๊ธฐ ๋ฐ๋๋๋ค . Gradle์ ์ค์นํ ๋ ํญ์ ์ฌ์ฉํ ์ ์๋ "ํต์ฌ ํ๋ฌ๊ทธ์ธ" ์ธํธ๊ฐ ์์ต๋๋ค. ์ด๋ฌํ ํ๋ฌ๊ทธ์ธ์๋ ๋ค์ํ ์นดํ
๊ณ ๋ฆฌ๊ฐ ์์ง๋ง ์ฐ๋ฆฌ๋ "
์ ํธ๋ฆฌํฐ " ์นดํ
๊ณ ๋ฆฌ์ ๊ด์ฌ์ด ์์ต๋๋ค. ์ด ์ธํธ์๋ Gradle ํ๋ก์ ํธ ์ด๊ธฐํ ์์
์ ์ ๊ณตํ๋ "
Build Init Plugin " ํ๋ฌ๊ทธ์ธ์ด ํฌํจ๋์ด ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ํ๋ก์ ํธ ์ ํ "
java-application "์ ์์ฑํ๋ ๋ฐ ๊ด์ฌ์ด ์์ต๋๋ค. Gradle ์์
์ ์คํํด ๋ณด๊ฒ ์ต๋๋ค.
gradle init --type java-application
์๋ฅผ ๋ค์ด Groovy DSL(Gradle์ฉ ํ์ค ์์
์ค๋ช
์ธ์ด) ๋ฐ JUnit ํ
์คํธ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๊ณ ์ถ๋ค๋ ์ง๋ฌธ์ ๋ตํด ๋ณด๊ฒ ์ต๋๋ค(์ด์ ๋ํด์๋ ๋ค๋ฅธ ๋ฆฌ๋ทฐ์์ ์ค๋ช
ํ๊ฒ ์ต๋๋ค). ์์ฑ ํ์๋ ๋ค์๊ณผ ๊ฐ์ ํ์ผ ์ธํธ๋ฅผ ๋ฐ๊ฒ ๋ฉ๋๋ค:
์ฒซ์งธ, ์ด๊ธฐํ ํ Gradle ๋ฒ์ ์ ๋ง๊ฒ ์ฌ์ ๊ตฌ์ฑ๋ ํน์ ๋ํผ๋ฅผ ๋ฐ์ต๋๋ค. ์ด๋ ํน์ ์คํฌ๋ฆฝํธ์
๋๋ค.
์ด์ ๋ํ ์์ธํ ๋ด์ฉ์ ๊ณต์ ๋ฌธ์์ธ " The Gradle Wrapper " ๋ฅผ ์ฝ์ด๋ณด์๊ธฐ ๋ฐ๋๋๋ค . ๋์งธ, Gradle ๋น๋ ์คํฌ๋ฆฝํธ์ธ build.gradle ํ์ผ์ ๋ณผ ์ ์์ต๋๋ค. ์ด๊ฒ์ ํ๋ก์ ํธ์์ ์ฌ์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ๋ ์์ํฌ, ํ๋ก์ ํธ์ ์ฐ๊ฒฐํด์ผ ํ๋ ํ๋ฌ๊ทธ์ธ, ๋ค์ํ ์์
์ ์ค๋ช
ํ๋ ๊ธฐ๋ณธ ํ์ผ์
๋๋ค.
๊ณต์ ๋ฌธ์์ธ " Build Script Basics " ์์ ์ด ํ์ผ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ฝ์ด๋ณด์๊ธฐ ๋ฐ๋๋๋ค .
ํ๋ฌ๊ทธ์ธ ๋ฐ ์์
์ด์ ๋น๋ ์คํฌ๋ฆฝํธ์ ๋ด์ฉ์ ์ดํด๋ณด๋ฉด ํ๋ฌ๊ทธ์ธ ์น์
์ด ํ์๋ฉ๋๋ค.
plugins {
id 'java'
id 'application'
}
์ด๋ ์์ ์ด์ผ๊ธฐํ ๊ฒ๊ณผ ๋์ผํ ํ๋ฌ๊ทธ์ธ์
๋๋ค. ๊ทธ๋ฆฌ๊ณ ํ๋ฌ๊ทธ์ธ์ด ์๋ค๋ฉด ์ด์ ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ ์ ์๋ ์์
์ด ์์ต๋๋ค. Gradle ์์
๋ช
๋ น์ ์คํํ๊ณ ์ด์ ํ๋ก์ ํธ์์ ๋ฌด์์ ํ ์ ์๋์ง ํ์ธํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, ์คํํ๋ฉด
gradle run
Java ์ ํ๋ฆฌ์ผ์ด์
์ ๊ธฐ๋ณธ ํด๋์ค๊ฐ ์์๋ฉ๋๋ค.
๋ณด์๋ค์ํผ ์๋์๋ ๊ฐ์ ๋ด์ฉ์ด ์ ํ ์๋๋ฐ
2 actionable tasks: 1 executed, 1 up-to-date
์ด๊ฒ ๋ฌด์จ ๋ป์ธ๊ฐ์? ์ด๋ ์ด 2๊ฐ์ ์์
์ด ์๋ฃ๋์์์ ์๋ฏธํฉ๋๋ค. ๊ฒ๋ค๊ฐ 1๊ฐ๋ ์ค์ ๋ก ์๋ฃ๋์๊ณ , 1๊ฐ๋ ์คํ๋์ง ์์์ต๋๋ค. ์๋ํ๋ฉด... ์ฆ, ์ํ๊ฐ ํ์ฌ์ด๊ณ ์๋ฌด ์์
๋ ์ํ๋์ง ์์์ต๋๋ค. ์์ "Dry Run"์ ์คํํ ์ ์์ต๋๋ค.
gradle run -m
์ด ๋ช
๋ น์ ์คํํด ๋ณด๊ฒ ์ต๋๋ค. ์คํ ์์
์ ์คํํ๊ธฐ ์ํด ์ด๋ค ์์
์ด ์คํ๋ ์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค.
๋ณด์๋ค์ํผ ์ด 4๊ฐ์ ์์
์ด ์๋ฃ๋์์ต๋๋ค. ์คํ์ด ์คํ๋๊ธฐ ์ ์ ์ข
์์ฑ ์์
ํด๋์ค๊ฐ ์คํ๋์์ต๋๋ค. ํด๋์ค ์์ฒด์๋ 2๊ฐ์ ์ข
์์ฑ์ด ์์ผ๋ฏ๋ก compileJava ๋ฐ processResources๋ ์คํํ์ต๋๋ค. ์์
์ ์ํํ ๋ ํน์ ์์ค์ ๋ก๊ทธ๋ฅผ ๋ณด๋ฉด์ ์์
์ ์ํํ ์ ์์ต๋๋ค(๋ก๊น
์์ค์ ๋ฐ๋ผ ๋ณด๊ณ ์ถ์ ๋ฉ์์ง์ ์ค์์ฑ์ด ๊ฒฐ์ ๋จ). ์๋ฅผ ๋ค์ด, ์ฐ๋ฆฌ๋ ํ ์ ์์ต๋๋ค
gradle run -i
. ๋ค์๊ณผ ๊ฐ์ ์ ๋ณด ๋ฉ์์ง๋ ํ์๋ฉ๋๋ค.
Task :classes UP-TO-DATE
Skipping task ':classes' as it has no actions.
Gradle ๋ก๊ทธ์ธ์ ๋ํ ์์ธํ ๋ด์ฉ์ ๊ณต์ ๋ฌธ์ " Gradle Logging " ์ ์ฐธ์กฐํ๋ ๊ฒ์ด ์ข์ต๋๋ค . ๋ณด์๋ค์ํผ, ํด๋์ค ์์
์
UP-TO-DATE ์ด๋ฏ๋ก ๊ฑด๋๋ฐ์์ต๋๋ค . ์ฆ, ์ํ๊ฐ ํ์ฌ์ด๊ณ ์๋ฌด๊ฒ๋ ์ํํ ํ์๊ฐ ์์ผ๋ฏ๋ก ์์
์ด ์์ต๋๋ค. ์ด๋ ๊ธฐ๋ณธ์ ์ผ๋ก Gradle์๋ "
์ต์ ํ์ธ " ๋๋ ์์ ์ฆ๋ถ ๋น๋๊ฐ ์๊ธฐ ๋๋ฌธ์
๋๋ค. Gradle ๋ฌธ์ "
์ต์ ํ์ธ(AKA ์ฆ๋ถ ๋น๋) "์์ ์ด ๋ฉ์ปค๋์ฆ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ฝ์ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ --rerun-tasks ํ๋๊ทธ๋ฅผ ์ง์ ํ๋ ์์
์ ์คํํ๋ฉด ์ด ๋ฉ์ปค๋์ฆ์ ๋นํ์ฑํํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด,
gradle run --rerun-tasks
. ์คํ
๊ฐ๋ฅํ ์์
2๊ฐ: ์คํ๋ ์์
2๊ฐ ๋ณด์๋ค์ํผ ์คํ๋ ์์
์๋ ๊ทธ๋ํ์ ์ฒซ ๋ฒ์งธ ์์ค, ์ฆ ์คํ ์์
์์ฒด์ ์ง์ ์ ์ผ๋ก ์์กดํ๋ ์์
๋ง ๊ณ ๋ คํฉ๋๋ค. , ํด๋์ค. ํด๋์ค๊ฐ ์์กดํ๋ ์์
์ ์ฌ๊ธฐ์์ ๊ณ์ฐ๋์ง ์์ต๋๋ค(ํด๋์ค ์์
์ด ์คํ๋ ๋ ์คํ๋์ง๋ง). ๋ํ ๋ค์ ์์
์ ๋ํด์๋ ์ฝ์ด์ผ ํฉ๋๋ค.
์ข
์์ฑ
๋ชจ๋ ๋น๋ ์์คํ
์ ์ฃผ์ ์์
์ค ํ๋๋ ์ข
์์ฑ, ์ฆ ํ๋ก์ ํธ์ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ/ํ๋ ์์ํฌ๋ฅผ ๊ด๋ฆฌํ๋ ๊ฒ์
๋๋ค. ๋น๋ ์์คํ
์ ์ ์์ ์ฌ์ฉํ ์ ์๋์ง ํ์ธํ๊ณ ์ ํ๋ฆฌ์ผ์ด์
์ ์ต์ข
๊ฒฐ๊ณผ๋ฌผ์ ์ฌ๋ฐ๋ฅธ ๋ฐฉ์์ผ๋ก ์ด์
๋ธํด์ผ ํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก java-application์ ๋ํ gradle init ํ์ ๋น๋ ์คํฌ๋ฆฝํธ์ ๋ค์ ๋ด์ฉ์ด ํ์๋ฉ๋๋ค.
dependencies {
implementation 'com.google.guava:guava:26.0-jre'
testImplementation 'junit:junit:4.12'
}
์ฌ๊ธฐ์ ์ฐ๋ฆฌ๊ฐ ๋ฌด์์ ์ฐ๊ฒฐํ๊ณ ์๋์ง ์ฆ์ ์ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ฝ๊ฐ์ ์ดํด ์์ด๋ ๊ตฌํ๊ณผ ํ
์คํธ ๊ตฌํ์ด ๋ฌด์์ธ์ง ๋ช
ํํ์ง ์์ต๋๊น? Gradle์ ๋ฌธ์๋ ์ ์์ฑ๋์ด ์์ผ๋ฏ๋ก ์ฌ๊ธฐ์ ๋ค์ Gradle ๋ฌธ์๋ก ๋์๊ฐ์ผ ํฉ๋๋ค. ์ด๋ฅผ "
์ข
์์ฑ ๊ตฌ์ฑ ๊ด๋ฆฌ "๋ผ๊ณ ํฉ๋๋ค. ๋ฌธ์์ ๋ช
์๋ ๋๋ก ๊ฐ ์ข
์์ฑ์ ํน์ ๋ฒ์, ์ฆ ์ด ์ข
์์ฑ์ ์ฌ์ฉํ ์ ์๋ ์์ญ์ผ๋ก ์ ์ธ๋ฉ๋๋ค. ์ด ๋ฒ์๋ ์ผ๋ถ ๊ตฌ์ฑ์ ์ํด ์ง์ ๋๋ฉฐ ๊ฐ ๊ตฌ์ฑ์๋ ๊ณ ์ ํ ์ด๋ฆ์ด ์์ต๋๋ค. ๋ง์ Gradle ํ๋ฌ๊ทธ์ธ์ด ์ฌ์ ์ ์๋ ๊ตฌ์ฑ์ ์ถ๊ฐํ๋ค๋ ์ ๋ ํฅ๋ฏธ๋กญ์ต๋๋ค. ์ด๋ค ๊ตฌ์ฑ์ด ์๋์ง ํ์ธํ๊ธฐ ์ํด ๋ค์์ ์คํํ ์ ์์ต๋๋ค.
gradle --console plain dependencies
์ด ๋ฐฉ๋ฒ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ ๊ตฌ์ฑ๊ณผ ํด๋น ์ข
์์ฑ ๋ชฉ๋ก์ด ํ์๋ฉ๋๋ค. ์ฌ์ฉ ๊ฐ๋ฅํ ๊ตฌ์ฑ๋ง ๋ณผ ์ ์๋๋ก ์ด ๋ชฉ๋ก์ ํํฐ๋งํ ์ ์์ต๋๋ค.
gradle --console plain dependencies | find " - "
๋ฌด์์ ์ฌ์ฉํด์ผ ํ ์ง ์ด๋ป๊ฒ ์ ์ ์๋์? ์ฌ๊ธฐ์๋ ์กฐ๊ธ ์ฝ์ด์ผ ํฉ๋๋ค. ์๋ํ๋ฉด
์ฐ๋ฆฌ๋ "Java" ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ๋ฏ๋ก ํด๋น ๋ฌธ์์ " ์ข
์์ฑ ๊ด๋ฆฌ " ์น์
๋ถํฐ ์์ํ๊ฒ ์ต๋๋ค . ์ฌ๊ธฐ์๋ "์ปดํ์ผ"์ด๋ผ๋ ๊ตฌ์ฑ(์ผ๋ช
๋ฒ์)์ด ์์๊ณ ์ด๋ "์ปดํ์ผ ์ค์ ํ์ํ ์ข
์์ฑ"์ ์๋ฏธํ์์ ์ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ตฌํ์ผ๋ก ๋์ฒด๋์์ต๋๋ค(์์ด๋ก ๋์ฒด๋จ).
" API ๋ฐ ๊ตฌํ ๋ถ๋ฆฌ " ์น์
์์ ๋์ฒด์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ฝ์ ์ ์์ต๋๋ค . ์ด ์ข
์์ฑ์ "์ปดํ์ผ ํด๋์ค ๊ฒฝ๋ก"์ ์๋ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค. ๊ทธ๋ฌ๋ ๋๋๋ก ์ฐ๋ฆฌ๋ ์์กด์ฑ์ด ์ต์ข
๊ฒฐ๊ณผ๋ฌผ์ ํฌํจ๋๊ธฐ๋ฅผ ์ํฉ๋๋ค. ๋ฌด์์ ์ํด? ์๋ฅผ ๋ค์ด, ํ์ํ ๋ชจ๋ ๊ฒ์ ์์ฒด์ ์ผ๋ก ํฌํจํด์ผ ํ๋ ์คํ ๊ฐ๋ฅํ jar๊ฐ ์์ ๊ฒ์
๋๋ค. ๊ทธ๋ฌ๋ฉด ์ฐ๋ฆฌ๋ ์ด๋ป๊ฒ ํด์ผ ํฉ๋๊น? ์ฒซ์งธ, "๊ธฐ๋ณธ์ ์ผ๋ก"(์ฆ, ๊ธฐ๋ณธ์ ์ผ๋ก ์ถ๊ฐ ์์
์์ด) ์ด๋ฌํ ์ง์์ด ์์ต๋๋ค. ์ด๋ ๋ชจ๋ ์ฌ๋์ด ์์ ์ ๋ฐฉ์์ผ๋ก ์์นด์ด๋ธ๋ฅผ ์์งํ๊ธฐ๋ฅผ ์ํ๊ณ Gradle์ ์ต์ํํ๋ ค๊ณ ๋
ธ๋ ฅํ๋ค๋ ์ฌ์ค๋ก ์ค๋ช
๋ฉ๋๋ค. ๋ํ (์ฝ๋์์ ์ถ๊ฐ ์กฐ์ ์์ด) ํด๋์ค ๊ฒฝ๋ก์์ jar ์์นด์ด๋ธ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ทธ๋ฐ ์์ผ๋ก ์๋ํ์ง ์์ต๋๋ค( ์์ธํ ๋ด์ฉ์ "
Oracle: JAR ํ์ผ์ ํด๋์ค ๊ฒฝ๋ก์ ํด๋์ค ์ถ๊ฐ " ์ฐธ์กฐ). ๋ฐ๋ผ์ ๊ฐ์ฅ ์๋ฆ๋ค์ด ๋ฐฉ๋ฒ์ ๋น๋ ์คํฌ๋ฆฝํธ์์ ๋ค์ ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค.
jar {
manifest {
attributes 'Main-Class': 'jrgradle.App'
}
from configurations.compileClasspath.collect { it.isDirectory() ? it : zipTree(it) }
}
jar ์์
์ค์ ์์ jar ํ์ผ ๋งค๋ํ์คํธ์ ์ถ๊ฐํ ํญ๋ชฉ์ ์ง์ ํฉ๋๋ค("
Oracle: ์ ํ๋ฆฌ์ผ์ด์
์ ์ง์
์ ์ค์ " ์ฐธ์กฐ). ๊ทธ๋ฐ ๋ค์ ์ปดํ์ผ์ ํ์ํ ๋ชจ๋ ์ข
์์ฑ์ด jar์ ํฌํจ๋ ๊ฒ์ด๋ผ๊ณ ๋งํฉ๋๋ค. ๋์์ "
Gradle Shadow Plugin "์ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค. ๋ณต์กํด ๋ณด์ผ ์๋ ์์ง๋ง ๋ค๋ฅธ ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ๋ฉด ์ถ์ด ๋ ํธํด์ง๋๋ค.
์๋ฅผ ๋ค์ด, ์น ์ ํ๋ฆฌ์ผ์ด์
์ ์์ฑํ ๋(์ผ๋ฐ์ ์ผ๋ก ์คํ๋๋ Java ์ ํ๋ฆฌ์ผ์ด์
๊ณผ ๋ฐ๋) ํน๋ณํ ํ๋ฌ๊ทธ์ธ์ธ " Gradle War Plugin " ์ ์ฌ์ฉํฉ๋๋ค. ์ด ํ๋ฌ๊ทธ์ธ ์ ๋์์ด ๋ค๋ฅด๋ฉฐ ๊ทธ๊ณณ์์ ์ฐ๋ฆฌ์ ์ถ์ด ๋ ์ฌ์์ง ๊ฒ์
๋๋ค(ํ์ํ ๋ชจ๋ ์ข
์์ฑ์ ํ๋ฌ๊ทธ์ธ ์์ฒด์ ์ํด ๋ณ๋์ ํน์ ๋๋ ํ ๋ฆฌ์ ๋ฐฐ์น๋ฉ๋๋ค. ์ด๋ฌํ ์์
์ ์น ์ ํ๋ฆฌ์ผ์ด์
์ค๊ณ ๋ฐฉ๋ฒ์ ๋ฐ๋ผ ๊ท์ ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ ์์ ํ ๋ค๋ฅธ ์ด์ผ๊ธฐ์
๋๋ค.
๊ฒฐ๊ณผ
Gradle์ ํ๋ก์ ํธ ๋น๋ ์์คํ
์ ์ํ ํ์ํ ์ ํ์
๋๋ค. ์ด๋ Spring ๋ฐ Hibernate์ ๊ฐ์ ์ ์๋ ค์ง ํ๋ก์ ํธ์ ๊ฐ๋ฐ์๊ฐ ์ฌ์ฉํ๋ค๋ ์ฌ์ค๋ก ํ์ธ๋ฉ๋๋ค. ์์์๋ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์ฌํญ๋ค๋ง ๋ค๋ฃจ์์ต๋๋ค. ๊ทธ ๋ค์๋ ๊ฐ๋ฐ์์๊ฒ ๋ํ๋๋ ๋ฐฑ๋ง ๊ฐ์ง ๊ธฐ๋ฅ๊ณผ ๊ธฐํ๊ฐ ์จ๊ฒจ์ ธ ์์ต๋๋ค. Gradle์ ๋ํ ์ด ๋ฆฌ๋ทฐ์์ ๋ค๋ฃจ์ง ์์ ๋ค์ค ๋ชจ๋ ํ๋ก์ ํธ ์์ฑ์ ์ง์ํ์ง๋ง Gradle ์์ฒด์๋ "
๋ค์ค ํ๋ก์ ํธ ๋น๋ ์์ฑ "์ด๋ผ๋ ํ๋ฅญํ ํํ ๋ฆฌ์ผ์ด ์์ต๋๋ค. ์ด ๋ฆฌ๋ทฐ๋ฅผ ํตํด Gradle์ ๋ฌธ์๊ฐ 5+์์ ์์ฑ๋์์ผ๋ฉฐ ์ด๋๋ฅผ ๋ด์ผ ํ ์ง ์ดํดํ๋ฉด ํ์ํ ๊ฒ์ ์ฝ๊ฒ ์ฐพ์ ์ ์๋ค๋ ์ ์ ๋ณด์ฌ์ฃผ๊ธธ ๋ฐ๋๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ ๊ธฐ๋ณธ์ ์ดํดํ๋ฉด ์ฌ ๊ฒ์
๋๋ค. ๋ํ Gradle์๋ ํ๋ฅญํ ํํ ๋ฆฌ์ผ์ด ์์ต๋๋ค. Gradle์ ์ฌ์ฉํ์ฌ ๋ณผ ์ ์๋ ๋ค๋ฅธ ํญ๋ชฉ์ ๋ํ ๊ฐ๋จํ ๋ชฉ๋ก์ผ๋ก ๋ง๋ฌด๋ฆฌํ๊ณ ์ถ์ต๋๋ค.
#๋น์์ฒด์ฌ๋ผํ
GO TO FULL VERSION