DEV ๐Ÿ’™/JAVA Spring

[Spring] Maven & Gradle

DONI. 2019. 2. 4. 21:39
๋ฐ˜์‘ํ˜•

 



์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ(Spring Framework)์— ๋Œ€ํ•ด ๊ณต๋ถ€๋ฅผ ์‹œ์ž‘ํ•˜๋ฉด์„œ ์ฒซ ์žฅ๋ถ€ํ„ฐ ๋‚œ๊ด€์— ๋ถ€๋”›ํ˜”๋‹ค


Maven...? Gradle...? ๋ฌด์—‡...?


gradle์€ ์•ˆ๋“œ๋กœ์ด๋“œํ•˜๋ฉด์„œ ์–ธ๋œป์–ธ๋œป ๋ณด๊ธดํ–ˆ์ง€๋งŒ ์ •์˜๋ฅผ ์•Œ๋ ค๊ณ ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋ ‡๊ตฌ๋‚˜ ํ•˜๊ณ  ๋„˜์–ด๊ฐ”๋‹ค ํ—คํ—ท^^


์—ฌ๊ธฐ์„œ ๋ฉ”์ด๋ธ๊ณผ ๊ทธ๋ ˆ์ด๋“ค์€ '๋นŒ๋“œ ํˆด' ์ธ๋“ฏํ•˜๋‚˜ ์ •๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค...!


* ๋นŒ๋“œ(build)๋ž€?
์ž๋ฐ”๋กœ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•œ๋‹ค๊ณ  ํ•˜๋ฉด ์ž๋ฐ”์ฝ”๋“œ๊ฐ€ ์žˆ์„ ๊ฒƒ์ด๊ณ  ๊ทธ์•ˆ์—์„œ ์‚ฌ์šฉ๋˜๊ณ  ์˜์กดํ•˜๋Š” ๋‹ค๋ฅธ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ์„ ๊ฒƒ์ด๋‹ค.
์ด๋ฅผ ์ปดํŒŒ์ผํ•˜๊ณ  ํŒจํ‚ค์ง• ํ•˜๋Š” ๊ณผ์ •์„ ๋นŒ๋“œ๋ผ๊ณ  ํ•œ๋‹ค. ๋Œ€ํ‘œ์ ์ธ ๋นŒ๋“œ ํˆด์—๋Š” Ant, Apache Ivy, Maven๋“ฑ์ด ์žˆ๋‹ค.




1 ์•„ํŒŒ์น˜ ๋ฉ”์ด๋ธ (Apache Maven)

ํ”„๋กœ์ ํŠธ์˜ ์ „์ฒด์ ์ธ ๋ผ์ดํ”„ ์‚ฌ์ดํด์„ ๊ด€๋ฆฌํ•˜๋Š” ๋„๊ตฌ


ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•  ๋•Œ ์ž์‹ ์ด ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฟ ์•„๋‹ˆ๋ผ ๋งŽ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœํ•˜๊ฒŒ ๋œ๋‹ค
Maven์€ ์ด ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ์ˆ˜๋งŽ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ๋•๋Š” ๋„๊ตฌ์ด๋‹ค


๋‚ด๊ฐ€ ์‚ฌ์šฉํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ•ด๋‹น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ž‘๋™ํ•˜๋Š”๋ฐ์— ํ•„์š”ํ•œ ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊นŒ์ง€ ๊ด€๋ฆฌํ•˜์—ฌ
๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ์ž๋™์œผ๋กœ ๋‹ค์šด๋ฐ›์•„ ์ค€๋‹ค


๊ธฐ์กด์—๋Š” Ant๊ฐ€ ์ฃผ๋กœ ์‚ฌ์šฉ๋˜์—ˆ์ง€๋งŒ Maven์ด Ant๋ฅผ ๋„˜์–ด์„œ ๋” ๋งŽ์€ ๊ฐœ๋ฐœ์ž๋“ค์ด ์ด์šฉํ•˜๊ฒŒ ๋˜์—ˆ๊ณ ,
์ตœ๊ทผ์—๋Š” Gradle์ด ์ฃผ๋กœ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋‹ค(ex Android Studio)


โ–ถ ๋ฉ”์ด๋ธ์˜ ์žฅ์  โ—€
1 ํŽธ๋ฆฌํ•œ Dependency Library ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค
ํŠน์ • ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ๋•Œ .jarํŒŒ์ผ ๋“ฑ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค
์ด ๊ฒฝ์šฐ ๋ฉ”์ด๋ธ pom.xml์— dependency๋งŒ ์ถ”๊ฐ€์‹œํ‚จ๋‹ค๋ฉด ์•Œ์•„์„œ ํ•ด๋‹น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅด ๋‹ค์šด๋ฐ›์•„ ์ค€๋‹ค
์ด๋Ÿฌํ•œ ํŠน์ง•์œผ๋กœ ์ธํ•ด ์—ฌ๋Ÿฌ๋ช…์ด์„œ ํ”„๋กœ์ ํŠธ ์ž‘์—…์„ ์ง„ํ–‰ํ•  ๊ฒฝ์šฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํŒŒ์ผ์„ git๋“ฑ๊ณผ ๊ฐ™์€ ๋„๊ตฌ๋กœ ์ฃผ๊ณ ๋ฐ›์ง€ ์•Š์•„๋„
ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์„ ์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค!


2 ๋ชจ๋“  ํ”„๋กœ์ ํŠธ๊ฐ€ ์ผ๊ด€๋œ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ์™€ ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค
๋ฉ”์ด๋ธ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ฒŒ ๋˜๋ฉด
src/main/java src/main/resources src/test/java src/test/resources
์™€ ๊ฐ™์€ ๊ตฌ์กฐ๋ฅผ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ๋‹ค
์ด๋ ‡๊ฒŒ ๋ฉ”์ด๋ธ ํ”„๋กœ์ ํŠธ๋Š” ๊ณตํ†ต ๊ตฌ์„ฑ์„ ๊ฐ€์ง€๊ฒŒ ๋˜๊ณ 
ํ”„๋กœ์ ํŠธ์˜ ์ „๋ฐ˜์ ์ธ ๋‚ด์šฉ์— ๋Œ€ํ•ด ์–ด๋Š์ •๋„ ์œ ์ถ”ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค


๋ฉ”์ด๋ธ ํ…œํ”Œ๋ฆฟ ํ”„๋กœ์ ํŠธ๋กœ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ์‹œ ํ”„๋กœ์ ํŠธ์˜ ๋ผˆ๋Œ€๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š”๋ฐ,
์ด๊ฐ™์€ ๊ธฐ๋Šฅ์„ ArcheType์ด๋ผ๊ณ  ํ•œ๋‹ค


3 ๋ฉ”์ด๋ธ์ด ์ œ๊ณตํ•˜๋Š” ๋‹ค์–‘ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค
4 ArcheType ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์‹ ๊ทœ ํ”„๋กœ์ ํŠธ ์…‹ํŒ…์„ ์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค




2 Gradle

Gradle์€ Groovy๋ฅผ ์ด์šฉํ•œ ๋นŒ๋“œ ์ž๋™ํ™” ์‹œ์Šคํ…œ์ด๋‹ค


Groovy์™€ ์œ ์‚ฌํ•œ ๋„๋ฉ”์ธ ์–ธ์–ด๋ฅผ ์ฑ„์šฉํ•˜์˜€์œผ๋ฉฐ, ํ˜„์žฌ ์•ˆ๋“œ๋กœ์ด๋“œ ์•ฑ์„ ๋งŒ๋“œ๋Š”๋ฐ ํ•„์š”ํ•œ
์•ˆ๋“œ๋กœ์ด๋“œ ์ŠคํŠœ๋””์˜ค์˜ ๊ณต์‹ ๋นŒ๋“œ ์‹œ์Šคํ…œ์ด๊ธฐ๋„ ํ•˜๋‹ค. Java, C/C++, Python ๋“ฑ๊ณผ ๊ฐ™์€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์–ธ์–ด๋ฅผ ์ง€์›ํ•œ๋‹ค


์—ฌ๊ธฐ๊นŒ์ง€๊ฐ€ ์œ„ํ‚ค๋ฐฑ๊ณผ์—์„œ ๋งํ•˜๋Š” Gradle์ด๋‹ค
+ ์ถ”๊ฐ€์ ์œผ๋กœGradle์€ ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๊ฒƒ๊ณผ ๊ฐ™์ด Grooby ๊ธฐ๋ฐ˜์˜ DSL(Domain Specific Language)๋ฅผ ์‚ฌ์šฉํ•˜๊ณ ,์˜์กด์„ฑ ๊ธฐ๋ฐ˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ์œ„ํ•œ ํˆด์ด๋‹ค๋นŒ๋“œ, ๋ฉ€ํ‹ฐ ๋นŒ๋“œ, ์˜์กด์„ฑ ๊ด€๋ฆฌ์˜ ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜๋ฉฐ,Gradle Wrapper๋ฅผ ์ด์šฉํ•˜์—ฌ Gradle์ด ์„ค์น˜๋˜์ง€ ์•Š์€ ๊ณณ์—์„œ๋„ ๋นŒ๋“œ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค



โ–ถ Gradle์˜ ์žฅ์  โ—€
1 ๋ฉ€ํ‹ฐ ํ”„๋กœ์ ํŠธ
ํ•˜๋‚˜์˜ Repository ๋‚ด์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ•˜์œ„ ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ์ด ๊ฐ€๋Šฅํ•˜๋‹ค (๋ฉ€ํ‹ฐ ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ์ด ๊ฐ€๋Šฅ)
ํ•˜๋‚˜์˜ ์•„ํ‹ฐํŒฉํŠธ(ex .jar)๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๋ณ„๋„์˜ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค๊ณ  Repository๋ฅผ ๊ตฌ์„ฑํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค


2 ์œ ์—ฐ์„ฑ + ํ™•์žฅ์„ฑ
Groovy ๊ธฐ๋ฐ˜ ์Šคํฌ๋ฆฝํŒ…์„ ํ†ตํ•ด ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์Šคํฌ๋ฆฝํŠธ ์•ˆ์— ์ง์ ‘ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค
์ง์ ‘ Task๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ํ”Œ๋Ÿฌ๊ทธ ์ธ์„ ๋งŒ๋“ค์–ด ๊ธฐ๋Šฅ ์ถ”๊ฐ€๋„ ๊ฐ€๋Šฅํ•˜๋‹ค


3 ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์˜์กด์„ฑ ๊ด€๋ฆฌ
Gradle์„ ํ™œ์šฉํ•˜๋ฉด ๊ฐ„ํŽธํ•˜๊ฒŒ ์›ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ํŒจํ‚ค์ง€๋ช…, ๋ฒ„์ „์„ ์ง€์ •ํ•˜๋ฉด ์ž๋™์œผ๋กœ ๋‹ค์šด๋กœ๋“œ ๋œ๋‹ค
๋˜ํ•œ ๋‹ค์ˆ˜์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ™œ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋ฒ„์ „์ถฉ๋Œ(Version Conflict)์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด๊ฒƒ ๋˜ํ•œ Gradle์ด ์ž๋™์œผ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค


4 ๋ชจ๋“ˆํ™” ๊ฐœ๋ฐœ(Modular development)
ํ•ต์‹ฌ ๋กœ์ง์„ ๋ณ„๋„์˜ ๋ชจ๋“ˆ๋กœ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ๋‹ค
ํƒ€๋ถ€์„œ์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์„ AAR๋กœ ๋ฐ›์œผ๋ฉด ํ•˜๋‚˜์˜ APK๋กœ ํ†ตํ•ฉ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค
๋ชจ๋“ˆํ™” ๊ฐœ๋ฐœ์€ ์†Œ์Šค์ฝ”๋“œ๋กœ ๋นŒ๋“œํ•˜์—ฌ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ๊ณ  AAR๋กœ ๋„ฃ์„ ์ˆ˜๋„ ์žˆ๋‹ค. ๋‹น์—ฐํžˆ ๊ธฐ์กด์˜ jar ํŒŒ์ผ๋„ ํฌํ•จ ๊ฐ€๋Šฅํ•˜๋‹ค




๋ฐ˜์‘ํ˜•