๐ก
Maven๊ณผ Gradle์ ๋ํ์ ์ธ ๋น๋ ๊ด๋ฆฌ ๋๊ตฌ์ด๋ค. ๋น๋ ๊ด๋ฆฌ ๋๊ตฌ๊ฐ ๋ฌด์์ด๋ฉฐ ์ด๋ป๊ฒ ๋ฐ์ ํด ์๋์ง ์ดํดํ๊ณ , Maven๊ณผ Gradle์ ๋ํด ์์ธํ ์์๋ณด์ :>
๋น๋(Build)
์์ค ์ฝ๋๋ฅผ ์คํ ๊ฐ๋ฅํ ํ๋ก๊ทธ๋จ์ผ๋ก ๋ณํํ๋ ๊ณผ์ ์ผ๋ก์, ์ปดํ์ผ๊ณผ ๋งํน ๋ฑ์ ๋ค์ํ ๋จ๊ณ๋ฅผ ํฌํจํ๋ค(์์ค ์ฝ๋์ ๊ตฌ์ฑ ์์๋ค์ ๋ชจ์ ์คํ ํ์ผ ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๋ง๋ค์ด๋ด๋ ๊ฒ์ด ๋ชฉ์ ์ด๋ค).
๋น๋ ๊ด๋ฆฌ ๋๊ตฌ
: ๋น๋์ ๋๋ถ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ด๋ฆฌ, ํ
์คํ
๋ฑ์ '์๋ํ'ํ์ฌ ์ํํด ์ฃผ๋ ๋๊ตฌ์ด๋ค.
: ์ ๋์ค ๊ณ์ด OS(์ด์์ฒด์ )์์ ์ฌ์ฉ๋๋ ๋น๋ ๊ด๋ฆฌ ๋๊ตฌ
: ์๋ฐ ์ธ์ด์์ ์ฌ์ฉ๋๋ ์๋ํ๋ ์ํํธ์จ์ด ๋น๋ ๊ด๋ฆฌ ๋๊ตฌ
: ์๋ฐ ์ธ์ด์์ ์ฌ์ฉ๋๋ ํ๋ก์ ํธ ๊ด๋ฆฌ ๋๊ตฌ
: ๊ทธ๋ฃจ๋น(Groovy)๋ฅผ ์ด์ฉํ ๋น๋ ์๋ํ ์์คํ
(๊ทธ๋ฃจ๋น(Groovy) - ์๋ฐ์ ํ์ด์ฌ, ๋ฃจ๋น, ์ค๋ชฐํ ํฌ ๋ฑ์ ํน์ง์ ๋ํ JVM์ ๋์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด)
Maven์ ์์ ์ดํด๋ณธ ๊ฒ์ฒ๋ผ, Ant์ ๋์์ผ๋ก ๋ฑ์ฅํ Java์ ํ๋ก์ ํธ ๊ด๋ฆฌ ๋๊ตฌ์ด๋ค. POM(Project Object Model)์ ๊ฐ๋ ์ ๋์ ํด ํ๋ก์ ํธ์ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฝ๊ฒ ์ฐธ์กฐํ ์ ์๊ฒ ํ๊ณ , Lifecycle์ ๊ฐ๋ ์ ๋์ ์ผ๋ก ์ ์ง๋ณด์์ ํธ๋ฆฌ์ฑ์ ๋์ธ ๊ฒ์ด ๊ฐ์ฅ ๋๋๋ฌ์ง๋ ํน์ง์ด๋ค. ์ด ๊ฐ๋ ๋ค์ ์๋์์ ์์ธํ ์ดํด๋ณด์.
: Project Object Model(ํ๋ก์ ํธ ๊ฐ์ฒด ๋ชจ๋ธ)๋ก, ํ๋ก์ ํธ์ ๋ค์ํ ์ ๋ณด๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํ ๊ฐ์ฒด ๋ชจ๋ธ์ด๋ฉฐ, pom.xml ํ์ผ์ ๋งํ๋ค.
(ํ๋์ ์๋ฐ ํ๋ก์ ํธ์ ๋น๋ ํด์ Maven์ผ๋ก ์ค์ ํ๋ฉด, ํ๋ก์ ํธ ์ต์์ ๋๋ ํ ๋ฆฌ(root)์ "pom.xml"์ด๋ผ๋ ํ์ผ์ด ์์ฑ๋๋ค.)
Maven์ ๊ธฐ๋ฅ์ ์ด์ฉํ๊ธฐ ์ํด์ ์ฌ์ฉ๋๋ POM์ ํ๋ก์ ํธ๋ง๋ค 1๊ฐ๋ง ์กด์ฌํ๋ฉฐ, pom.xml๋ง ๋ณด๋ฉด ํ๋ก์ ํธ์ ๋ชจ๋ ์ค์ , ์์กด์ฑ ๋ฑ์ ์ ์ ์๋ค. ๋ชจ๋ ์ ๋ณด๊ฐ pom.xml ํ์ผ์ ๋ค์ด ์๊ธฐ์ pom ํ์ผ์ด ์กด์ฌํด์ผ ๋น๋๊ฐ ๊ฐ๋ฅํ๋ค.
pom.xml์ ๋ค์ด๊ฐ๋ ๋ด์ฉ
pom.xml์[Maven์] ํ๊ทธ(tag)
<project> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>maven-pom-project</artifactId> <version>1.0-SNAPSHOT</version> </project>
pom.xml ํ์ผ์ ์์ ๊ฐ์ ํํ๋ก, ํ๊ทธ<>๋ฅผ ์ฌ์ฉํด ์ ๋ณด๋ฅผ ํ์ํ๋ค. ๋ค์์ POM์ ๋ํ์ ์ธ ํ๊ทธ๋ค์ด๋ค.
- project : ํ๋ก์ ํธ์ ์ ๋ณด๋ฅผ ๊ธฐ์ ํ๋ค.
- modelVersion : maven์ ๋ฒ์ ์ ์๋ฏธ
- groupId : ํ๋ก์ ํธ ๊ทธ๋ฃน Id๋ฅผ ๋ปํ๋ฉฐ, ์ผ๋ฐ์ ์ผ๋ก ๋ํํ๋ ์ฌ์ดํธ ๋๋ฉ์ธ์ ์ญ์ ๋ก ์ ์ด ์ฌ์ฉ(ex. tukorea.tino -> tino.tukorea)
- artifactId : groupId ์ธ์ ๋ค๋ฅธ ํ๋ก์ ํธ์๋ ๊ตฌ๋ถ๋ ์ ์๋ ํ๋ก์ ํธ์ Id๋ฅผ ์์ฑ
- version : ํ๋ก์ ํธ์ ๋ฒ์ ์ ์๋ฏธํ๋ฉฐ ๊ฐ๋ฐ ๋จ๊ณ์ ๋ฐ๋ผ ๊ตฌ๋ถํ์ฌ ์์ฑ
- name : ํ๋ก์ ํธ์ ์ด๋ฆ
- description : ํด๋น ํ๋ก์ ํธ์ ๊ฐ๋ตํ ์ค๋ช ์ ์์ฑ
- properties : pom.xml ํ์ผ ๋ด์์ ๋น๋ฒํ๊ฒ ์ฌ์ฉ๋๋ ์ค๋ณต ์์๋ฅผ ์ ์ํ๋ ์์ญ (ํด๋น ์์ญ์ ์์๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ${ํ๊ทธ๋ช }์ ํํ๋ก ์ฌ์ฉํ๋ฉด ๋๋ค.)
- dependencies : ํด๋น ํ๋ก์ ํธ์์ ์์กด์ฑ์ ๊ฐ์ง๊ณ ์ฌ์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ์ํ๋ ์์ญ (๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ง๋ค dependenncy ํ๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌ๋ถํ๋ค.)
// ์ฌ์ค์ ๊ฐ์ฅ ์ค์ํ ๋ถ๋ถ. ์ฌ์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์ด๋๋ฅผ ๊ธฐ์ ํด ์ค์ผ๋ก์จ ์์กด์ฑ์ ๋ถ์ฌํด ์ฃผ๋ ๊ฒ์ด๋ค!- build : ํ๋ก์ ํธ ๋น๋์ ๊ด๋ จ๋ ์ ๋ณด๋ฅผ ์ค์ ํ๋ ์์ญ
// ์ด๋ค ํ์ผ์ ๋ง๋ค์ด๋ผ์ง, ์ด๋ค ์์ผ๋ก ๋ฐฐํฌํ ์ง ์ ํด๋๋ ๊ฒ์ด๋ค.
๋ฉ์ด๋ธ์ ํ๋ ์์ํฌ์ด๊ธฐ ๋๋ฌธ์ ์์ ๋ฐฉ์์ด ์ ํด์ ธ์๊ณ , ๋ฏธ๋ฆฌ ์ ํด์ง ๋น๋ ์์๊ฐ ์๋๋ฐ ์ด๋ฅผ ๋ผ์ดํ์ฌ์ดํด(Lifecycle)์ด๋ผ๊ณ ํ๋ค.
๋ผ์ดํ์ฌ์ดํด์ ๋ํ ์ดํด๋ฅผ ์ํด, ๋ค์์ ์ฉ์ด๋ค์ ์ฐ์ ์ ์ผ๋ก ์ดํด๋ณด์.
๐ก ์ค๋ช ์ ๋ถ์ด์๋ฉด, ์ฌ์ฉ์๋ ํ์์ ๋ฐ๋ผ ๊ฐ ํ์ด์ฆ์ ํ๋ฌ๊ทธ์ธ์ ์ถ๊ฐํ๊ณ ์ค์ ํ ์ ์์ผ๋ฉฐ ํ๋์ ํ๋ฌ๊ทธ ์์์๋ ์ฌ๋ฌ ์์ ์ ์ํํ ์ ์๋๋ก ์ง์ํ๋ค. ๊ฐ ํ์ด์ฆ๋ ์์กด๊ด๊ณ(Dependency)๋ฅผ ๊ฐ์ง๊ณ ์์ด ์์๋๋ก ์คํ๋๋ฉฐ, ํ์ด์ฆ์ ์๋ฌด๋ฐ Goal์ด ์๋ค๋ฉด ํด๋น ํ์ด์ฆ๋ ์คํ๋์ง ์๋๋ค.
phase๋ ๋น๋ ์์์ ๋ง๊ฒ ์ง์ ์ด ๋ผ์์ผ๋ฏ๋ก ๋ฐ๊ฟ ์๋ ๋ฐ๊ฟ ํ์๋ ์๋ค. ๋์ phase๋จ๊ณ์ ์ํํ ๋ช ๋ น์ ์ถ๊ฐํ๊ฑฐ๋ ์ญ์ ํ๊ณ ์ถ์ผ๋ฉด phase์ ์ฐ๊ฒฐ๋์ด ์๋ goal์ ์์ ํจ์ผ๋ก Maven์ ์ ์ฐํ๊ฒ ํ์ฅ์ํฌ ์ ์๋ค(ํ์ด์ฆ ํ๋์ ์ฌ๋ฌ ํ๋ฌ๊ทธ์ธ์ด ์์ ์ ์๊ณ , ๊ฐ๊ฐ์๋ Goal์ด ์๋ค).
Maven์์๋ ํฌ๊ฒ 3๊ฐ์ง์ Lifecycle์ ์ ๊ณตํ๋ฉฐ, ๊ฐ๊ฐ์ Build Lifecycle์ ์ฌ์ ์ ์ ์๋ ์์ Phase๋ค์ ๊ฐ์ง๊ณ ์๋ค. ๋ค์์ 3๊ฐ์ง Lifecycle์ธ Clean, Default, Site์ ๊ฐ ๋ผ์ดํ์ฌ์ดํด์ ์ฃผ์ ๋จ๊ณ๋ฅผ ์ ๋ฆฌํ ๊ฒ์ด๋ค.
[Lifecycle - Clean]
์ญํ : Maven์ ๊ฒฐ๊ณผ๋ฌผ/์ฐ์ถ๋ฌผ ์ ๊ฑฐ
[Lifecycle - Default]
์ญํ : ์์ค์ฝ๋ ์ปดํ์ผ, ํ
์คํธ, ์์ถ(ํจํค์ง), ๋ฐฐํฌ
[Lifecycle - Site]
์ญํ : ํ๋ก์ ํธ์ ๋ํ๋จผํธ ์ฌ์ดํธ๋ฅผ ์์ฑ
Gradle์ JVM์ Groovy ์คํฌ๋ฆฝํธ๋ฅผ ํ์ฉํ ๋น๋ ๊ด๋ฆฌ ๋๊ตฌ๋ก, Ant์ Maven๋ฅผ ๋ณด์ํ ์คํ์์ค ๊ธฐ๋ฐ์ build ์๋ํ ์์คํ ์ด๋ค.
XML์ ์ฌ์ฉํ Ant, Maven๊ณผ ๋ฌ๋ฆฌ Gradle์ ๊ธฐ์กด์ (1์ธ๋) Make์ ๊ฐ์ด ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๋ค. ๋ฐ๋ผ์ ๋์ ์ผ๋ก ์คํ ๊ฐ๋ฅํ๊ณ , ์ถ๊ฐ์ ์ธ ๋ก์ง์ ์์ฑํ๊ณ ์ถ์ ๋ ์คํฌ๋ฆฝํธ ๋ก์ง์ ์ง์ ์์ฑํ ์ ์๋ค.
โ๏ธ ๊ทธ๋๋ค์ ํน์ง
๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์, XML์ ์ฌ์ฉํ์ง ์๋ Gradle์ด ํจ์ฌ ๊ฐ๊ฒฐํ๋ค๋ ๊ฒ์ด๋ค. ์ฆ, Gradle์ Groovy๋ฅผ ์ฌ์ฉํ๊ธฐ์ (XML์ด ์๋ Java๋ก ์ธ ์ ์์ด์) ํจ์ฌ ๊ฐ๊ฒฐํ๊ฒ ํํ์ด ๊ฐ๋ฅํ๋ค. ๋ค์์ ์์๋ '๊ฐ๊ฒฐํจ'์ ๋ํ ์ง๊ด์ ์ดํด๋ฅผ ๋๋๋ค.
์์กด๊ด๊ณ ํํ ์์ : Maven๊ณผ Gradle
๋ค์์ ์ฒซ ๋ฒ์งธ ์ฌ์ง์ XML๋ก ์์กด ๊ด๊ณ๋ฅผ ์ ์ํ ๊ฒ, ๋ ๋ฒ์งธ ์ฌ์ง์ Groovy๋ก ์์กด ๊ด๊ณ๋ฅผ ์ ์ํ ๊ฒ์ด๋ค. ๋์ ๋์ผํ ๋ด์ฉ์ ๋ด๊ณ ์๋ค.
์ด์ฒ๋ผ Groovy๋ฅผ ์ฌ์ฉํ Gradle(ํ์)์ ํํ ๋ฐฉ์์ด ํจ์ฌ ๊ฐ๊ฒฐํจ์ ํ๋์ ํ์ธํ ์ ์๋ค. ์ฝ๋์ ๊ธธ์ด๊ฐ ์งง๊ณ , ๊ฐ๋ ์ฑ๋ ๋๋ค. ๊ธธ์ด ์์ฒด๊ฐ ์งง์ผ๋ฏ๋ก ์ปดํจํฐ์์๋ ๋ ๋นจ๋ฆฌ ์ฝ์ด๋ผ ์ ์๋ค. ์ด๊ฒ์ด Maven๊ณผ Gradle์ ๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ด๋ค.
์์์ ์ธ๊ธํ๋ฏ์ด Gradle์ ์์ ๋น๋ ๊ด๋ฆฌ ๋๊ตฌ๋ค์ธ Make, Ant, Maven์ ์ฅ๋จ์ ์ ์ ์ถฉํด ๋ง๋ค์ด๋ธ ๊ฒฐ๊ณผ๋ฌผ์ด๋ค. ๋ฐ๋ผ์ ์์ฒ๋ผ Gradle์ Maven๋ณด๋ค๋ ๋ฐ์ด๋ ์ฑ๋ฅ๊ณผ ํ์คํ ์ฅ์ ์ ๊ฐ์ง๋ค. ๊ทธ๋ฌ๋ ์ง๊ธ๊น์ง Maven์ด ์ฃผ๋ก ์ฌ์ฉ๋์ด ์๊ธฐ์ ํ์ฌ๋ Gradle๋ณด๋ค Maven์ ์ ์ ์จ์ด ๋ ๋์ ์ํฉ์ด๋ค. ๋ฌผ๋ก Gradle์ ์ ์ ์จ๋ ์ค๋ฅด๋ ์ค์ด๊ธฐ์, Maven๊ณผ Gradle ๋ชจ๋ ์์๋ ์ด ์ข๊ฒ ๋ค.