build tool - Maven vs Gradle
๋น๋๋ ์์ค์ฝ๋ ํ์ผ์ ์ปดํจํฐ์์ ์คํํ ์ ์๋ ๋
๋ฆฝ์ ์ธ ํํ๋ก ๋ณํํ๋ ๊ณผ์ ๊ณผ ๊ฒฐ๊ณผ๋ฅผ ์๋ฏธํฉ๋๋ค.
์ฆ ์์ฑํ ์์ค์ฝ๋์ ํ์ผ ๋ฐ ์์์ JVM์ด๋ Tomcat๊ณผ ๊ฐ์ WAS๊ฐ ์ธ์ํ ์ ์๋๋ก ํจํค์งํ๋ ๊ณผ์ ๋ฐ ๊ฒฐ๊ณผ๋ฌผ์ ๋ํ๋
๋๋ค.
๋น๋ ๊ด๋ฆฌ ๋๊ตฌ๋ ์ด๋ฐ ๋น๋ ๊ณผ์ ์์ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ์๋์ผ๋ก ๊ด๋ฆฌํด์ฃผ๋ ๋๊ตฌ๋ก, ๋ค์๊ณผ ๊ฐ์ ์์
์ ์ํํฉ๋๋ค.
- ์ข ์์ฑ ๋ค์ด๋ก๋ - ์ ์ฒ๋ฆฌ(Preprocessing)
- ์์ค์ฝ๋๋ฅผ ๋ฐ์ด๋๋ฆฌ ์ฝ๋๋ก ์ปดํ์ผ(Compile)
- ๋ฐ์ด๋๋ฆฌ ์ฝ๋๋ฅผ ํจํค์ง(Packaging)
- ํ ์คํธ ์คํ(Testing)
- ํ๋ก๋์ ์์คํ ์ ๋ฐฐํฌ(distribution)
Maven์ Java ์ ์ฉ ํ๋ก์ ํธ ๊ด๋ฆฌ ๋๊ตฌ๋ก, Lifecycle ๊ด๋ฆฌ ๋ชฉ์ ๋น๋ ๋๊ตฌ์ด๋ฉฐ, Apache Ant์ ๋์์ผ๋ก ๋ง๋ค์ด์ก์ต๋๋ค.
์ํ์น ๋ผ์ด์ผ์ค๋ก ๋ฐฐํฌ๋๋ ์คํ ์์ค ์ํํธ์จ์ด์ด๊ณ , pom.xml์ ์ข
์ ๊ด๊ณ๋ฅผ ๋ช
์ํฉ๋๋ค.
clean - validate - compile - test - package - verify - install - site - deploy์ ๋ผ์ดํ ์ฌ์ดํด์ ๊ฐ์ง๋๋ค.
๐ก Maven Lifecycle
(1) clean : ๋น๋ ์ ์์ฑ๋์ด์์๋ ํ์ผ๋ค์ ์ญ์ ํ๋ค.
(2) validate : ํ๋ก์ ํธ๊ฐ ์ฌ๋ฐ๋ฅธ์ง ํ์ธํ๊ณ ํ์ํ ๋ชจ๋ ์ ๋ณด๋ฅผ ์ฌ์ฉํ ์ ์๋์ง ํ์ธํ๋ ๋จ๊ณ
(3) compile : ํ๋ก์ ํธ ์์ค์ฝ๋๋ฅผ ์ปดํ์ผ ํ๋ ๋จ๊ณ
(4) test : ๋จ์ ํ
์คํธ๋ฅผ ์ํํ๋ ๋จ๊ณ. ํ
์คํธ ์คํจ ์ ๋น๋ ์คํจ๋ก ์ฒ๋ฆฌํ๋ฉฐ, ์คํต์ด ๊ฐ๋ฅํ๋ค.
(5) package : ์ค์ ์ปดํ์ผ๋ ์์ค ์ฝ๋์ ๋ฆฌ์์ค๋ค์ jar, war ๋ฑ์ ํ์ผ์ ๋ฐฐํฌ๋ฅผ ์ํ ํจํค์ง๋ก ๋ง๋ ๋ค.
(6) verify : ํตํฉ ํ
์คํธ ๊ฒฐ๊ณผ์ ๋ํ ๊ฒ์ฌ๋ฅผ ์คํํ์ฌ ํ์ง ๊ธฐ์ค์ ์ถฉ์กฑํ๋์ง ํ์ธํ๋ค.
(7) site : ํ๋ก์ ํธ ๋ฌธ์์ ์ฌ์ดํธ ์์ฑ, ์์ฑํ๋ ๋จ๊ณ
(8) deploy : ๋ง๋ค์ด์ง package๋ฅผ ์๊ฒฉ ์ ์ฅ์์ releaseํ๋ ๋จ๊ณ
Gradle์ Maven์ ๋์ฒดํ ์ ์๋ ํ๋ก์ ํธ ๊ตฌ์ฑ ๊ด๋ฆฌ ๋ฐ ๋ฒ์ฉ ๋น๋ ํด์
๋๋ค.
Ant Builder์ Groovy script๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ถ๋์ด ๊ธฐ์กด Ant์ ์ญํ ๊ณผ ๋ฐฐํฌ ์คํฌ๋ฆฝํธ์ ๊ธฐ๋ฅ ๋ชจ๋ ์ฌ์ฉ ๊ฐ๋ฅํ๋ฉฐ, SpringBoot์ Android์์ ์ฃผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
Maven์ ๋นํด ๋น๋ ์๋๊ฐ 10~100๋ฐฐ ๊ฐ๋ ๋น ๋ฅด๋ฉฐ, Java, C/C++, Python ๋ฑ์ ์ง์ํฉ๋๋ค.
โ
Groovy
Groovy๋ JVM์์ ์คํ๋๋ ์คํฌ๋ฆฝํธ ์ธ์ด๋ก, JVM์์ ๋์ํ์ง๋ง ์์ค์ฝ๋๋ฅผ ์ปดํ์ผํ ํ์ ์๋ค๋ ํน์ง์ ๊ฐ์ง๋๋ค.
Java์ ํธํ๋๋ฉฐ, Java class file๋ค์ Groovy class๋ก ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค.
Java ๋ฌธ๋ฒ๊ณผ ์ ์ฌํ์ฌ ๋น๋ ์ฒ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
Gradle์ ์ฌ์ฉํ ๊ฒฝ์ฐ ๊ฐ๊ฒฐํ ์ ์๊ฐ ๊ฐ๋ฅํ์ฌ ๊ฐ๋
์ฑ์ด ์ข์ต๋๋ค.
์ค์ ์ฃผ์
๋ฐฉ์(Configuration Injection)์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ฌ์ฌ์ฉ์ ์ฉ์ดํ๊ณ ๋ฉํฐ ํ๋ก์ ํธ์ ์ ๋ฆฌํฉ๋๋ค.
๐ก Maven vs Gradle
Gradle์ ์์
์์กด์ฑ ๊ทธ๋ํ์ ๊ธฐ๋ฐ, Maven์ ๊ณ ์ ์ ์ด๊ณ ์ ํ์ ์ธ ๋จ๊ณ์ ๋ชจ๋ธ์ ๊ธฐ๋ฐํ๋ค๋ ๋น๋ ์ ๊ทผ ๋ฐฉ์์ ์ฐจ์ด์ ์ด ์์ต๋๋ค.
Gradle์ ์บ์๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ Maven๋ณด๋ค ์๋๊ฐ ํจ์ฌ ๋น ๋ฆ
๋๋ค.
Maven์ ๋ฉํฐ ํ๋ก์ ํธ์์ ํน์ ์ค์ ์ ๋ค๋ฅธ ๋ชจ๋์์ ์ฌ์ฉํ๋ ค๋ฉด ์์ ๋ฐ์์ผํ์ง๋ง, Gradle์ ์ค์ ์ฃผ์
๋ฐฉ์์ ์ฌ์ฉํ๋ฏ๋ก ๋ฉํฐ ํ๋ก์ ํธ์ ์ ํฉํฉ๋๋ค.