๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
TIL/Spring

Gradle vs. Maven

by Edlin 2022. 6. 23.
  • Gradle๊ณผ Maven ๋ชจ๋‘ ๋นŒ๋“œ ์ž๋™ํ™” ๋„๊ตฌ๋‹ค.
  • Maven์€ Apache์—์„œ ๋ฐฐํฌํ•˜์˜€์œผ๋ฉฐ, ํ”„๋กœ์ ํŠธ ํ™˜๊ฒฝ ์„ค์ •์„ ์œ„ํ•ด pom.xml ์ด๋ผ๋Š” XML ํŒŒ์ผ์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • Gradle์€ Google์—์„œ ์•ˆ๋“œ๋กœ์ด๋“œ ํ”„๋กœ์ ํŠธ๋ฅผ ์œ„ํ•œ ๋นŒ๋“œ ์ž๋™ํ™” ๋„๊ตฌ๋กœ 2007๋…„ ์ฒ˜์Œ ๋ฐฐํฌํ•˜์˜€๋‹ค.
    • gradle.build๋ผ๋Š” ํŒŒ์ผ์— ํ”„๋กœ์ ํŠธ ํ™˜๊ฒฝ ์ •๋ณด๊ฐ€ ๋“ค์–ด์žˆ๋‹ค. 

 

๊ฒฐ๋ก 

Gradle Maven
๋„๋ฉ”์ธ ํŠนํ™” ์–ธ์–ด ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š”๋ฐ ๊ธฐ๋ฐ˜ ์ž๋ฐ”๋กœ ๋งŒ๋“ค์–ด์ง€๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์— ๊ธฐ๋ฐ˜
Groovy ๊ธฐ๋ฐ˜์˜ ๋„๋ฉ”์ธ ํŠนํ™” ์–ธ์–ด ์‚ฌ์šฉ
(๋นŒ๋“œ๋ฅผ ์ž๋™ํ™”ํ•˜๊ธฐ ์œ„ํ•œ ๋ชฉ์ ์œผ๋กœ ์ž‘์„ฑ)

* Groovy: Java ๊ฐ€์ƒ๋จธ์‹ ์—์„œ ์‹คํ–‰๋˜๋Š” ๋™์  ํƒ€์ž… ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด
ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๋ฅผ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด XML ์‚ฌ์šฉ
ํ”„๋กœ์ ํŠธ์— ์ƒˆ๋กœ์šด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ฑ์„ ์ฃผ์ž…ํ•˜๋Š” ๊ฒƒ์ด ์‰ฌ์›€ ์ƒˆ๋กœ์šด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ฃผ์ž…์„ ์œ„ํ•ด์„œ๋Š” ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๊ตฌ์„ฑ
ํ˜„์žฌ ์ง„ํ–‰์ค‘์ธ ์ž‘์—…์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์ตœ์ ํ™”๋ฅผ ์ง„ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ˆ˜ํ–‰์†๋„ ์ธก๋ฉด์—์„œ ๋น ๋ฅด๋‹ค.  ๋ถ€๋ถ„์ ์œผ๋กœ ๋นŒ๋“œ๋ฅผ ์ง„ํ–‰ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋А๋ฆฌ๋‹ค.
์ปดํŒŒ์ผ์„ ํ”ผํ•œ๋‹ค. (Groovy ๊ธฐ๋ฐ˜์˜ ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด) XML ํŒŒ์ผ์ด๊ธฐ ๋–„๋ฌธ์— ์ปดํŒŒ์ผ์ด ํ•„์š”ํ•˜๋‹ค. 
(= ํŒŒ์ผ ํ•ด์„์ด ํ•„์š”ํ•˜๋‹ค)
์‚ฌ์šฉ์ž๊ฐ€ ์ต์ˆ™ํ•ด์ง€๋Š”๋ฐ ์‹œ๊ฐ„์ด ํ•„์š”ํ•˜๋‹ค. ์˜ค๋žœ ๊ธฐ๊ฐ„ ์‚ฌ์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์‰ฝ๊ฒŒ ์ตํžŒ๋‹ค.
Java, C, C++, Groovy ์—์„œ์˜ ๊ฐœ๋ฐœ์„ ์ง€์›
์ง€์›ํ•˜๋Š” IDE์˜ ์ข…๋ฅ˜๊ฐ€ ๋‹ค์–‘ํ•˜๋‹ค. 
Java, Scala, C#, Ruby ์—์„œ์˜ ๊ฐœ๋ฐœ ์ง€์›
* ๋„๋ฉ”์ธ ํŠนํ™” ์–ธ์–ด (Domain Specific Language, DSL):
- ํŠน์ • ๋ถ„์•ผ์— ์ตœ์ ํ™”๋œ ์ปดํ“จํ„ฐ ์–ธ์–ด, ๋ฒ”์šฉ ์–ธ์–ด์™€ ๋‹ฌ๋ฆฌ ํŠน์ • ๋ชฉ์  ๋ฐ ๋ถ„์•ผ์— ๊ตญํ•œ๋˜์–ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 
- Java - Ant, Maven ๋“ฑ
- Ruby - Rails Validations, Rails ActiveRecord ๋“ฑ
- SQL, CSS, Regular Expression ๋“ฑ

Gradle

  • JCenter๋ผ๋Š” ์˜์กด์„ฑ์„ ๊ฐ€์ง€๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์„ ๋‹ค์šด๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ์ €์žฅ์†Œ๊ฐ€ ์žˆ๋‹ค. 
  • Maven Central์ด๋ผ๋Š” ์ €์žฅ์†Œ ์‚ฌ์šฉ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค. 
  • ์—…๋ฌด์˜ ์˜์กด์„ฑ์„ ๊ทธ๋ž˜ํ”„์— ๊ธฐ๋ฐ˜ํ•˜์—ฌ ๊ด€๋ฆฌํ•œ๋‹ค.
  • ๋ชจ๋“  ํ”„๋กœ์ ํŠธ๊ฐ€ ์ผ๊ด€๋œ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. 
  • ์—…๋ฌด๋ฅผ ์‹คํ–‰ํ•˜๋Š”๋ฐ ์žˆ์–ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์—…๋ฐ์ดํŠธ๊ฐ€ ํ•„์š”ํ•œ์ง€ ์ฒดํฌํ•˜์—ฌ ์ ์ง„์  ๋นŒ๋“œ๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค.
  • gradle.build ํŒŒ์ผ์—์„œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— if, else, for ๋“ฑ์˜ ๋กœ์ง ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๋™์ ์œผ๋กœ ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋‹ค์šด๋ฐ›๋Š”๋‹ค.
  • ๋‹จ์œ„ํ…Œ์ŠคํŠธ ์‹œ ์˜์กด์„ฑ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. 

Maven

  • Maven Centeral์ด๋ผ๋Š” ์˜์กด์„ฑ์„ ๊ฐ€์ง€๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์„ ๋‹ค์šด๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ์ €์žฅ์†Œ๊ฐ€ ์žˆ๋‹ค.
  • ๊ณ ์ •๋œ ์„ ํ˜• ๋ชจ๋ธ์— ๊ธฐ๋ฐ˜ํ•˜์—ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค. 
  • ๋ฏธ๋ฆฌ ์ •์˜ํ•˜๊ณ  ์žˆ๋Š” ๋นŒ๋“œ ์ˆœ์„œ๊ฐ€ ์žˆ๊ณ , ๋ผ์ดํ”„์‚ฌ์ดํด์˜ ๊ฐ๊ฐ์˜ ๋‹จ๊ณ„๋ฅผ Phase๋ผ๊ณ  ํ•œ๋‹ค.
  • (= ๊ฐ Phase๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ด์ „ ๋‹จ๊ณ„์˜ Phase๊ฐ€ ๋ชจ๋‘ ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•œ๋‹ค.)
  • ํ•˜๋‚˜์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์—์„œ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์› - ๊ฐ๊ฐ์˜ ๊ธฐ๋Šฅ์„ goal์ด๋ผ๊ณ  ํ•œ๋‹ค. (= ํ”Œ๋Ÿฌ๊ทธ์ธ์„ goal์ด๋ผ๊ณ  ํ•œ๋‹ค.)
  • ๋ฏธ๋ฆฌ ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์€ ๋‹ค์šด๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— ์‰ฝ๊ฒŒ ์•ก์„ธ์Šคํ•˜์—ฌ ์—ฐ๊ฒฐ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค. 

 

  • Pom.xml (=Project Object Model)
    • ํ”„๋กœ์ ํŠธ ์ •๋ณด: ์ด๋ฆ„, ๊ฐœ๋ฐœ์ž ๋ชฉ๋ก, ๋ผ์ด์„ผ์Šค
    • ๋นŒ๋“œ ์„ค์ •: ์†Œ์Šค, ๋ฆฌ์†Œ์Šค, ๋ผ์ดํ”„ ์‚ฌ์ดํด๋ณ„ ์‹คํ–‰ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ(goal) ๋“ฑ ๋นŒ๋“œ ๊ด€๋ จ๋œ ์„ค์ •
    • ๋นŒ๋“œ ํ™˜๊ฒฝ: ์‚ฌ์šฉ์ž ํ™˜๊ฒฝ ์ •๋ณด 
    • POM๊ณผ ์—ฐ๊ด€๋œ ์ •๋ณด: ์˜์กด ๋ชจ๋“ˆ, ํฌํ•จํ•˜๋Š” ํ•˜์œ„ ๋ชจ๋“ˆ, ์ƒ์œ„ ํ”„๋กœ์ ํŠธ ๋“ฑ

๊ทธ๋ž˜์„œ ์–ด๋–จ ๋•Œ ์‚ฌ์šฉํ•˜๋Š”๋ฐ?

  • ๋ณธ ๊ธ€์˜ ๋ชฉ์ ์€ Gradle๊ณผ Maven์˜ ์ฐจ์ด์ ์ด ๋ฌด์—‡์ธ์ง€ ์•Œ๊ณ  ์ ์žฌ์ ์†Œ์— ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค.
  • Maven์€ xmlํŒŒ์ผ์— ๋นŒ๋“œ์— ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์˜ ์ƒ์† ๊ด€๊ณ„๋‚˜ ์˜์กด ๊ด€๊ณ„์™€ ๊ฐ™์€ ์—ฐ๊ด€๊ด€๊ณ„๋ฅผ ๋ช…์‹œํ•œ๋‹ค.
  • ๋นŒ๋“œ ์ˆœ์„œ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์•ž์„œ ์ƒ์†ํ•˜๊ฑฐ๋‚˜ ์˜์กดํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋นŒ๋“œ ๋˜์ง€ ์•Š์œผ๋ฉด ๋‹ค์Œ ๋นŒ๋“œ๊ฐ€ ์ด๋ฃจ์–ด์งˆ ์ˆ˜ ์—†๋‹ค.

  • Gradle์€ gradle.build๋ผ๋Š” ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ๋กœ ์ž‘์„ฑํ•œ๋‹ค.
  • ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์— ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ์— ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์˜ ์—ฐ๊ด€๊ด€๊ณ„๋ฅผ ๋ช…์‹œํ•œ๋‹ค.
  • Maven์—์„œ ๊ฐ ํ”Œ๋Ÿฌ๊ทธ์ธ ๋‹น ์˜์กด ๊ด€๊ณ„ ์ •๋ณด๋ฅผ ํƒœ๊ทธ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ณต์žกํ•˜๊ฒŒ ํ‘œ์‹œํ•ด์ฃผ์—ˆ๋˜ ๊ฒƒ๊ณผ ๋‹ฌ๋ฆฌ, 
  • ๋กœ์ง์„ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด ์žฅ์ ์ด๋‹ค.
  • Maven๋ณด๋‹ค ์ตœ๋Œ€ 100๋ฐฐ ๊ฐ€๋Ÿ‰ ๋น ๋ฅด๋‹ค.
  • ํ”„๋กœ์ ํŠธ์˜ ๊ทœ๋ชจ๊ฐ€ ์ปค์ ธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋งŽ์•„์ง€๋ฉด Gradle๋กœ ๋ฒ„์ „์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์„ฑ๋Šฅ๋ฉด์—์„œ ์šฐ์ˆ˜ํ•˜๋‹ค. 

 

์ฐธ๊ณ ์ž๋ฃŒ

https://www.geeksforgeeks.org/introduction-to-gradle/
 

Introduction to Gradle - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

https://dev-coco.tistory.com/65
 

๋ฉ”์ด๋ธ(Maven)๊ณผ ๊ทธ๋ž˜๋“ค(Gradle)์˜ ๊ฐœ๋… ๋ฐ ๋น„๊ต

์Šคํ”„๋ง๊ณผ ์Šคํ”„๋ง๋ถ€ํŠธ๋ฅผ ๊ณต๋ถ€ ํ•˜๋ ค๋˜ ์ค‘ maven๊ณผ gradle์„ ์•Œ๊ฒŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. maven๊ณผ gradle์ด ๋นŒ๋“œ๊ด€๋ฆฌ๋„๊ตฌ์ธ ๊ฒƒ์€ ์•Œ๊ณ ์žˆ์ง€๋งŒ ์ž์„ธํ•œ ๊ฐœ๋…์€ ๋ชจ๋ฅด๊ธฐ์— maven๊ณผ gradle ๊ฐ๊ฐ์˜ ๊ฐœ๋…๊ณผ ์ •ํ™•ํ•œ ์ฐจ์ด์ ์„ ์•Œ

dev-coco.tistory.com

 

๋Œ“๊ธ€