Maven and Gradle
๐ Maven and Gradle
Maven ์๊ฐ
- ํ๋ก์ ํธ๋ฅผ ๊ด๋ฆฌํ๋ ๋๊ตฌ
- ๋น๋ ์๋ํ ๊ธฐ๋ฅ๊ณผ ํ๋ก์ ํธ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ์ ๊ณต
- ํ๋ก์ ํธ(๋ผ์ด๋ธ๋ฌ๋ฆฌ) ๊ด๋ฆฌ : porm.xmlํ์ผ์ ์ด์ฉํ์ฌ ํ๋ก์ ํธ ๊ด๋ จ๋ jarํ์ผ์ ๋ค์ด๋ก๋ ํ๊ณ ๊ด๋ฆฌ, ํ๋ก์ ํธ ์ฐ์ถ๋ฌผ์ ์ผ๊ด๋๋ ๊ตฌ์กฐ๋ก ๊ด๋ฆฌ
- ๋น๋ ์๋ํ : ๋น๋ ์์ ๋ค์ ๊ด๋ฆฌํ๊ณ ์ฝ๊ฒ ๊ทธ๋ฆฌ๊ณ ์ผ๊ด์ฑ ์๊ฒ ์ํํ ์ ์๋ ํตํฉ ํ๊ฒฝ์ ์ ๊ณต, ๋น๋๋ ์์ค ์ฝ๋ ํ์ผ์ ์คํ ์ฝ๋๋ก ๋ณํํ์ฌ ๋ฐฐํฌํ๋ ๊ณผ์
ํ๋ก์ ํธ ๊ด๋ฆฌ ๊ธฐ๋ฅ
- ์ผ๋ฐ ๊ฐ๋ฐ์ ํ๋ก์ ํธ ๊ด๋ฆฌ ์ค์ ๋ค์ ๋ฉ์ด๋ธ์ด ๋ฏธ๋ฆฌ ์ ์ํ ์ค์ ๋ค๋ก ๋์ฒดํ๋ค.
- ์ ํํ๋ ํ๋ก์ ํธ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ ๊ด๋ฆฌ(porm.xml)
- ์์กด์ฑ ๊ด๋ฆฌ ๊ธฐ๋ฅ : ํธ๋ฆฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ด๋ฆฌ ๊ธฐ๋ฅ
- ๋น๋ ํ๋ก์ ์ค๋ฅผ ๊ด๋ฆฌ : ํ๋ฌ๊ทธ์ธ ์ค์ ์ ํตํ ๋น๋ ์๋ํ
์์กด ๊ด๊ณ(๋ผ์ด๋ธ๋ฌ๋ฆฌ)์ค์ (porm.xml)
- ํ๋ก์ ํธ ๋น ํ ๊ฐ์ porm.xmlํ์ผ ๊ด๋ฆฌ
- ๋ชจ๋ POM์ Super Pom(๊ธฐ๋ณธ POM)์ผ๋ก๋ถํฐ ์์๋ฐ๋๋ค
- Super POM์ ๊ธฐ๋ณธ ์ค์ ์ ๋ณด๋ฅผ ํฌํจํ๋ค
- Super POM์ ์์ ํ๋ ค๋ฉด POM์์ ์ค๋ฐ๋ผ์ด๋ ํ๋ค.
- ๋ชจ๋ POM์ Super Pom(๊ธฐ๋ณธ POM)์ผ๋ก๋ถํฐ ์์๋ฐ๋๋ค
- ์ต์์ ์๋ฆฌ๋จผํธ : project
- 3๊ฐ์ ํ์ ํ๋๋ฅผ ๊ฐ์ง
- groupid : ํ๋ก์ ํธ ์กฐ์ง ๊ณ ์ ๋๋ฉ์ธ
- artifactid : ํ๋ก์ ํธ ๋ช
- version : ํ๋ก์ ํธ ๋ฒ์
- ํ๋ก์ ํธ ์์กด๊ด๊ณ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ด๋ฆฌ : dependecy
๋น๋ ์ค์
- ํ๋ก์ ํธ ๊ธฐ๋ณธ ์ ๋ณด, ์ ์ฅ์,ํ๋กํผํฐ,๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ
- ํ๋ฌ๊ทธ์ธ
- ๊ณจ
Maven Repositroy
- ๋ฉ์ด๋ธ ์ ์ฅ์๋ ํ๋ก์ ํธ์ ์ฌ์ฉ๋๋ ํ๋ก์ ํธ jar ํ์ผ, ๋ผ์ด๋ธ๋ฌ๋ฆฌ jarํ์ผ๋ค์ด ์์นํ๋ฉฐ 3๊ฐ์ง ํ์
์ด ์๋ค.
- ์ง์ญ(local)์ ์ฅ์ : ๋ก์ปฌ ์ ์ฅ์๋ ๋ฉ์ด๋ธ์ ๋น๋ํ ๋ ๋ค์ด๋ก๋ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ํ๋ฌ๊ทธ์ธ์ ๊ด๋ฆฌํ๋ ์ ์ฅ์ ์ด๋ค.
- ์ค์ ์ ์ฅ์ : ์คํ ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ๋ฉ์ด๋ธ ํ๋ฌ๊ทธ์ธ , ๋ฉ์ด๋ธ ์ํคํ์ ์ ๊ด๋ฆฌํ๋ ์ ์ฅ์์ด๋ค.
- ์๊ฒฉ ์ ์ฅ์ : ๋ฉ์ด๋ธ ๊ธฐ๋ฐ์ผ๋ก ํ๋ก์ ํธ๋ฅผ ์งํํ๋ ๊ฒฝ์ฐ ํ๋ก์ ํธ์ ํ์ํ ๋ชจ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ฉ์ด๋ธ ์ค์ ์ ์ฅ์์ ์กด์ฌํ๋๊ฒ์ด ์๋๋ค. ์ด์ฒ๋ผ ์ค์ ์ ์ฅ์์ ์กด์ฌํ์ง ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ์ฌ ๋ณ๋์ ๋ฉ์ด๋ธ ์ ์ฅ์๋ฅผ ์ค์นํด ๊ด๋ฆฌํ๋๊ฒ์ด ๊ฐ๋ฅํ๋ค.
๋ฉ์ด๋ธ ์์กด์ฑ ๊ฒ์ ์ ์ฐจ
1๋จ๊ณ : ์ง์ญ ์ ์ฅ์๋ฅผ ๊ฒ์ํ๋ค. ์ฐพ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์ ๊ฒฝ์ฐ 2๋จ๊ณ๋ก ๋์ด๊ฐ๋ค 2๋จ๊ณ : ์ค์ ์ ์ฅ์๋ฅผ ๊ฒ์ํ๋ค. ์ฐพ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ง์ญ ์ ์ฅ์์ ์ ์ฅํ๋ค. ๋ง์ฝ ์ฐพ๋๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์๊ฒฝ์ฐ 3๋จ๊ณ๋ก ๋์ด๊ฐ๋ค. ๋ง์ฝ ์๊ฒฉ ์ ์ฅ์๊ฐ ์กด์ฌํ์ง ์์ ๊ฒฝ์ฐ ์๋ฌ๋ฅผ ๋ฐ์์ํค๊ณ ์ข ๋ฃํ๋ค 3๋จ๊ณ : ์๊ฒฉ์ ์ฅ์๋ฅผ ๊ฒ์ํ๋ค. ์ฐพ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ง์ญ ์ ์ฅ์์ ์ ์ฅํ๋ค. ๋ง์ฝ ์ฐพ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์ ๊ฒฝ์ฐ ์๋ฌ๋ฅผ ๋ฐ์์ํค๊ณ ์ข ๋ฃํ๋ค.
๋น๋ ์๋ํ ๊ธฐ๋ฅ
- ๋ฉ์ด๋ธ์ ์ํํธ์จ์ด ๋น๋๋ฅผ ์ํ ๊ณตํต ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ ํ๋ ์ ์ํฌ
- ํ๋ฌ๊ทธ์ธ ์ค์ ์ ํตํด ๊ธฐ๋ฅ์ ์์
- ๋น๋ ๋จ๊ณ(์ปดํ์ผ,ํ ์คํธ,ํจํค์ง,๋ฐฐํฌ)๋ค์ ๋น๋ ๋ผ์ดํ ์ฌ์ดํด์ด๋ผ๊ณ ํ๋ค.
- ๊ฐ ๋น๋ ๋จ๊ณ์์ ์ํ๋๋ ์์ ์ ๊ณจ ์ด๋ผ๊ณ ํ๋ค
- ์ค์ ๊ณจ์ ๊ทธ ๋จ๊ณ์ ์ฐ๊ฒฐ๋ ํ๋ฌ๊ทธ์ธ์ ์ํด ์คํ๋๋ค.
Maven ๋น๋ ๋ผ์ดํ ์ฌ์ดํด
- ๋ผ์ดํ ์ฌ์ดํด์ ๋ฏธ๋ฆฌ ์ ํด์ง ๋น๋ ์์๋ฅผ ์๋ฏธํ๋ค.
- Maven์ build,clean,site3๊ฐ์ ๋ผ์ดํ์ฌ์ดํด์ด ์๋ค.
- build ๋ผ์ดํ ์ฌ์ดํด์ ์ฌ๋ฌ ๋จ๊ณ์ ํ์ด์ฆ๋ก ๋๋์ด์ ธ ์์ผ๋ฉฐ, ๊ฐ ํ์ด์ฆ๋ ์์กด๊ด๊ณ๋ฅผ ๊ฐ์ง๋ค, compile,test,package,deploy์์๋ก ์งํ๋๋ค
- clean๋ผ์ดํ์ฌ์ดํด์ cleanํ์ด์ฆ๋ฅผ ์ด์ฉํ์ฌ ์ด์ ๋น๋์์ ์์ฑ๋ ๋ชจ๋ ํ์ผ๋ค์ ์ญ์ ํ๋ค
- site๋ผ์ดํ ์ฌ์ดํด์ site,site-deployํ์ด์ฆ๋ฅผ ์ด์ฉํ์ฌ ์์ฑ๋ ๋ฌธ์๋ค์ ๋์ ์ฌ์ดํธ์ ๋ฐฐํฌํ๋ค.
์ผ๋ถ ๋จ๊ณ
๋ฆฌ์์ค ์ค๋น : ๋ฆฌ์์ค๊ฐ ์ค๋น๋์ด ๋ณต์ฌ๋๋ค. ์ปดํ์ผ : ์์ค์ฝ๋๋ฅผ ์ปดํ์ผํ๋ค. ํ ์คํธ : junit๊ณผ ๊ฐ์ ํ ์คํธ ํ๋ ์์ํฌ๋ก ๋จ์ ํ ์คํธํ๋ค ํจํค์ง : porm.xml์ ์๋ฆฌ๋จผํธ๊ฐ(jar,war,ear)๋ฑ์ ๋ฐ๋ผ ์์ถํ๋ค ์ธ์คํจ : ํจํค์ง๋ฅผ ๋ก์ปฌ ์ ์ฅ์์ ๋ฐฐํฌํ๋ค ๋ฐฐํฌ : ์๊ฒฉ ๋ฉ์ด๋ธ ์ ์ฅ์์ ์์ถํ ํ์ผ์ ๋ฐฐํฌํ๋ค.
Maven Phase & Goal
- ๋น๋ ๋ผ์ดํ์ฌ์ดํด์ ํ๋ ์ด์์ ๊ณจ์์ํํ๋ ํ์ด์ง๋ค๋ก ๊ตฌ์ฑ
- ๊ฐ ํ์ด์ฆ ๋ณ๋ก ํ๋ฌ๊ทธ์ธ์ด ์์ ์ ์ํํ๋ค. ์ด ์์ ์ Goal์ด๋ผ๊ณ ํ๋ค.
Maven Plugin
- ๋๋ถ๋ถ์ ๊ธฐ๋ฅ๋ค์ ํ๋ก๊ทธ์ธ์ ํตํด์ ์ ๊ณต๋๋ค
- clean : ๋น๋ ์ดํ์ target๋๋ ํ ๋ฆฌ๋ฅผ ์ญ์ ํ๋ค
- compiler : ์๋ฐ ์์ค ํ์ผ์ ์ปดํ์ผํ๋ค.
- surefile : junit ๋จ์ ํ ์คํธ๋ฅผ ์คํํ๋ค. ๋ฆฌํฌํธ๋ฅผ ์์ฑํ๋ค
- jar : ํ์ฌ ํ๋ก์ ํธ๋ก๋ถํฐ jar file๋ฅผ ์์ฑํ๋ค
- war : ํ์ฌ ํ๋ก์ ํธ๋ก๋ถํฐ warfile๋ฅผ ์์ฑํ๋ค
- javadoc : ํ๋ก์ ํธ์ javadoc๋ฌธ์๋ฅผ ์์ฑํ๋ค
- antrun : ๋น๋ ํ์ด์ง ๋จ๊ณ์์ ํน์ ant ์์ ์ ์คํํ๋ค.
Gradle๊ฐ์
- JVM์์ ์คํ
- Maven์ฒ๋ผ Convention(๊ท๋ฒ)์ ํตํด ํ๋ก์ ํธ ์์ฑ๊ณผ ๋น๋ ์ํ
- Maven์ฒ๋ผ ์ ์ฅ์ ๊ด๋ฆฌ ๊ธฐ๋ฅ ์ ๊ณต
- ๋ค์ํ ํ๋ฌ๊ทธ ์ธ ์ ๊ณต
- ๋น๋ ์ค์ ์คํฌ๋ฆฝํธ๋ฅผ Grovy๊ธฐ๋ฐ์ DSL์ฌ์ฉ
- Gradle ์ค์น ์์ด Gradle Wrapper๋ฅผ ์ด์ฉํ์ฌ ๋น๋ ์ง์
- ๋ฉํฐ ํ๋ก์ ํธ ๊ตฌ์ฑ ๊ฐ๋ฅ : ํ๋์ repository๋ด์ ์ฌ๋ฌ ๊ฐ์ ํ์ ํ๋ก์ ํธ๋ฅผ ๊ตฌ์ฑ
๊ตฌ์กฐ
gradle-wrapper.jar : gradel task๋ฅผ ์คํํ๊ธฐ ์ํ Wrapperํ์ผ . Wrapper๋ ์ ์ธ๋ ๋ฒ์ ์ gradle์ ํธ์ถํ์ฌ ํ์ํ ๊ฒฝ์ฐ ๋ฏธ๋ฆฌ ๋ค์ด๋ก๋ . ํ๋ก์ ํธ๋ฅผ ์๋ก์ด ํ๊ฒฝ์ ์ข ์๋์ง ์๊ณ ๋น๋ ๊ฐ๋ฅ gradle-wrapper.properties : gradle wrapper ์ค์ ์ ๋ณด ํ์ผ build.gradle : ํ๋ก์ ํธ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์กด์ฑ, ํ๋ฌ๊ทธ์ธ, ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ์ฅ์ ๋ฑ์ ์ค์ ํ ์ ์๋ ๋น๋ ์คํฌ๋ฆฝํธ ํ์ผ Gradlew : ๋ฆฌ๋ ์ค ๋๋ ๋งฅOS์ฉ ์คํ ์คํฌ๋ฆฝํธ ํ์ผ gradlew.bat : ์๋์ฐ์ฉ ์คํ ์คํฌ๋ฆฝํธ ํ์ผ setting.gradle : ํ๋ก์ ํธ์ ์ค์ ์ ๋ณด ํ์ผ
build.gradle ์ค์
- plugin : ์์ ์ํ ํ๊ฒฝ์ ๋ช ์
- Version ๋ฐ Group : ํจํค์ง ์์ ์ ์ฉ ๋ฒ์์ ์ดํ๋ฆฌ์ผ์ด์ ๋ฒ์ , java๋ฒ์ ์ ๋ช ์
- profile : ๊ฐ๋ฐ ํ๊ฒฝ์ ๋ฐ๋ฅธ profileํ๊ฒฝ ํ์ผ
- buildscript : ์์ ์ ์ธํ ํ๋ฌ๊ทธ์ธ์ ์์กด์ฑ์ ๊ด๋ฆฌ
- dependencies(library) : ๊ธฐ๋ณธ์ ์ธ ํ๋ฌ๊ทธ์ธ ์ด์ธ ๊ฐ๋ฐ์ ํ์ํ ์ถ๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์กด์ฑ ๊ด๋ฆฌ