๐Ÿค– Backend/SpringBoot

๋นŒ๋“œ ๊ด€๋ฆฌ ๋„๊ตฌ Maven๊ณผ Gradle ๋น„๊ตํ•˜๊ธฐ

sckwon770 2024. 2. 25. 20:33

์ด์ „ ๋…ธ์…˜ ๋ธ”๋กœ๊ทธ์˜ ๋นŒ๋“œ ๊ด€๋ฆฌ ๋„๊ตฌ Maven๊ณผ Gradle ๋น„๊ตํ•˜๊ธฐ (2021.01.06)๋กœ๋ถ€ํ„ฐ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜๋œ ๊ธ€์ž…๋‹ˆ๋‹ค.

 

๋นŒ๋“œ ๊ด€๋ฆฌ ๋„๊ตฌ๋ž€?

  • ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ, ํ…Œ์ŠคํŠธ ๋นŒ๋“œ, ๋ฐฐํฌ ๋“ฑ์˜ ์ž‘์—…์„ ์œ„ํ•œ ์ „์šฉ ํ”„๋กœ๊ทธ๋žจ
  • ํ”„๋กœ์ ํŠธ์—์„œ ์ž‘์„ฑํ•œ java ์ฝ”๋“œ์™€ ํ”„๋กœ์ ํŠธ ๋‚ด์— ํ•„์š”ํ•œ ๊ฐ์ข… xml, properties, jar ํŒŒ์ผ๋“ค์„ JVM์ด๋‚˜ WAS๊ฐ€ ์ธ์‹ํ•  ์ˆ˜ ์žˆ๋„๋ก ํŒจํ‚ค์ง•ํ•ด์ฃผ๋Š” ๋นŒ๋“œ ๊ณผ์ • = ๋นŒ๋“œ ์ž๋™ํ™” ๋„๊ตฌ
  • ํ”„๋กœ์ ํŠธ์— ํ•„์š”ํ•œ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์˜ ์ข…๋ฅ˜์™€ ๋ฒ„์ „๋“ค, ์ข…์†์„ฑ ์ •๋ณด๋ฅผ ๋ช…์‹œํ•˜์—ฌ ์ž๋™์œผ๋กœ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๋„๊ตฌ

Maven

Maven์€ Java์šฉ ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ๋„๊ตฌ๋กœ Apache์˜ Ant ๋Œ€์•ˆ์œผ๋กœ ๋งŒ๋“ค์–ด ์กŒ๋‹ค. ๋นŒ๋“œ ์ค‘์ธ ํ”„๋กœ์ ํŠธ, ๋นŒ๋“œ ์ˆœ์„œ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ข…์†์„ฑ ๊ด€๊ณ„๋ฅผ pom.xml ์— ๋ช…์‹œํ•œ๋‹ค. ์™ธ๋ถ€์ €์žฅ์†Œ์—์„œ ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํ”Œ๋Ÿฌ๊ทธ์ธ๋“ค์„ ๋‹ค์šด๋กœ๋“œ ํ•œ ๋‹ค์Œ, ๋กœ์ปฌ์‹œ์Šคํ…œ์˜ ์บ์‹œ์— ๋ชจ๋‘ ์ €์žฅํ•œ๋‹ค.

์˜ˆ๋ฅผ๋“ค์–ด "Spring Boot Data JPA Starter" ๋ชจ๋“ˆ์ด ํ•„์š”ํ•˜๋ฉด Maven Repository์—์„œ ํ•ด๋‹น ๋ชจ๋“ˆ์„ ๊ฒ€์ƒ‰ํ•˜์—ฌ xml ์„ค์ • ํŒŒ์ผ์— ์ถ”๊ฐ€ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. (Maven์šฉ ์ฝ”๋“œ ์ด์™ธ์—๋„ gradle ๋“ฑ ๋‹ค๋ฅธ ๋นŒ๋“œ ๊ด€๋ฆฌ์šฉ ์ฝ”๋“œ๋„ ์žˆ๋‹ค.)

[Spring] ๋นŒ๋“œ ๊ด€๋ฆฌ ๋„๊ตฌ Maven๊ณผ Gradle ๋น„๊ตํ•˜๊ธฐ.


<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
    <version>2.2.4.RELEASE</version>
</dependency>

Gradle

Apache Maven๊ณผ Apache Ant์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ฐœ๋…๋“ค์„ ๋Œ€์•ˆ์œผ๋กœ์„œ ๋‚˜์˜จ ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ ๊ด€๋ฆฌ ํˆด์ด๋‹ค. (์™„์ „ํ•œ ์˜คํ”ˆ์†Œ์Šค) Groovy ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•œ Domain-specific-langauge๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. (xml๋ณด๋‹ค ํ›จ์”ฌ ๊ฐ„๊ฒฐํ•˜๋‹ค) ๊ฝค ํฐ ๊ทœ๋ชจ๋กœ ์˜ˆ์ƒ๋˜๋Š” multi-project ๋นŒ๋“œ๋ฅผ ๋„์šธ ์ˆ˜ ์žˆ๋„๋ก ๋””์ž์ธ๋˜์—ˆ๋‹ค. ํ”„๋กœ์ ํŠธ์˜ ์–ด๋А ๋ถ€๋ถ„์ด ์—…๋ฐ์ดํŠธ๋˜์—ˆ๋Š”์ง€ ์•Œ๊ธฐ ๋•Œ๋ฌธ์—, ๋นŒ๋“œ์— ์ ์ง„์ ์œผ๋กœ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค. (์—…๋ฐ์ดํŠธ๊ฐ€ ์ด๋ฏธ ๋ฐ˜์˜๋œ ๋นŒ๋“œ์˜ ๋ถ€๋ถ„์€ ๋” ์ด์ƒ ์žฌ์‹คํ–‰๋˜์ง€ ์•Š์•„, ๋นŒ๋“œ ์‹œ๊ฐ„์ด ํ›จ์”ฌ ๋‹จ์ถ•๋  ์ˆ˜ ์žˆ๋‹ค)

Maven VS Gradle

๋‘ ์‹œ์Šคํ…œ์ด ๋นŒ๋“œ์— ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ์‹์—๋Š” ๋ช‡ ๊ฐ€์ง€ ๊ทผ๋ณธ์ ์ธ ์ฐจ์ด์ ์ด ์žˆ๋‹ค.

  • Gradle์€ ์ž‘์—… ์˜์กด์„ฑ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ๋ฐ˜๋ฉด Maven์€ ๊ณ ์ •์ ์ด๊ณ  ์„ ํ˜•์ ์ธ ๋‹จ๊ณ„์˜ ๋ชจ๋ธ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค. ์„ฑ๋Šฅ ์ธก๋ฉด์—์„œ๋Š” ๋‘˜ ๋‹ค ๋‹ค์ค‘ ๋ชจ๋“ˆ ๋นŒ๋“œ๋ฅผ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, Gradle์€ ์–ด๋–ค task๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜์—ˆ๊ณ  ์•ˆ๋˜์—ˆ๋Š”์ง€ ์ฒดํฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— Incremental build๋ฅผ ํ—ˆ์šฉํ•œ๋‹ค. ์ด๋ฏธ ์—…๋ฐ์ดํŠธ๋œ task์— ๋Œ€ํ•ด์„œ๋Š” ์ž‘์—…์ด ์‹คํ–‰๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋นŒ๋“œ ์‹œ๊ฐ„์ด ํ›จ์”ฌ ๋‹จ์ถ•๋œ๋‹ค.

→ ๋นŒ๋“œ ์„ค์ • ๊ทœ๋ชจ๊ฐ€ ์ ์  ํ‚ค์ง€๋ฉด ์ปค์งˆ์ˆ˜๋ก, ๋นŒ๋“œ ์‹œ๊ฐ„์˜ ์ฐจ์ด๋„ Maven๊ณผ ๋น„๊ตํ•˜์—ฌ ๊ฝค ๊ฒฉ์ฐจ๊ฐ€ ๋ฒŒ์–ด์งˆ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค.

  • Maven์˜ ๊ฒฝ์šฐ ๋ฉ€ํ‹ฐ ํ”„๋กœ์ ํŠธ์—์„œ ํŠน์ • ์„ค์ •์„ ๋‹ค๋ฅธ ๋ชจ๋“ˆ์—์„œ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์ƒ์†์„ ๋ฐ›์•„์•ผํ•˜์ง€๋งŒ, Gradle์€ ์„ค์ • ์ฃผ์ž… ๋ฐฉ์‹์„ ์ œ๊ณตํ•œ๋‹ค.
  • Gradle์€ concurent์— ์•ˆ์ „ํ•œ ์บ์‹œ๋ฅผ ํ—ˆ์šฉํ•œ๋‹ค.

→ 2๊ฐœ ์ด์ƒ์˜ ํ”„๋กœ์ ํŠธ์—์„œ ๋™์ผํ•œ ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, ์„œ๋กœ overwrite๋˜์ง€ ์•Š๋„๋ก checksum ๊ธฐ๋ฐ˜์˜ ์บ์‹œ๋ฅผ ํ—ˆ์šฉํ•˜๊ณ , ์บ์‹œ๋ฅผ repository์™€ ๋™๊ธฐํ™”์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

  • ๊ณ ๋„๋กœ ์‚ฌ์šฉ์ž ์ •์˜๋œ ๋นŒ๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์ด ๊ฐ„ํŽธํ•œ Gradle์„ ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ํ›จ์”ฌ ๋‚ซ๋‹ค.

์†๋„๋‚˜ ์บ์‹œ ์‚ฌ์šฉ ์•ˆ์ •์„ฑ์— ๋Œ€ํ•˜์—ฌ ๋‹น์—ฐํžˆ Gradle๋กœ ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ์ด๋“์ด๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ ๋‹ค. ๊ทธ๋Ÿผ์—๋„ Gradle์„ ์ƒ์šฉํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ์ดˆ๋ฐ˜์— Maven์˜ Scope๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์•˜๊ณ  ์„ฑ๋Šฅ๋ฉด์—์„œ๋„ ์•ž์„ค ๊ฒƒ์ด ์—†์—ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ ์€ ํ˜„์žฌ์— ํ•ด๊ฒฐ๋˜์—ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ์ต์ˆ™ํ•จ์˜ ๋ฌธ์ œ์™€ ์ƒˆ๋กœ์šด ๊ฒƒ์„ ๋ฐฐ์šฐ๋Š” ๋น„์šฉ์˜ ๋ฌธ์ œ, ์ด๋กœ ์ธํ•ด ํŒ€ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹ค๋ฅธ ํŒ€์›๋„ ๋ฐฐ์›Œ์•ผํ•œ ๋‹ค๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ๊ตฌ๊ธ€ ํŠธ๋ Œ๋“œ๊ฐ€ ๊ทธ ์ฐจ์ด๋ฅผ ์—ฌ์‹คํžˆ ๋ณด์—ฌ์ฃผ๊ณ  ์žˆ๋Š” ๋“ฏ ํ•˜๋‹ค.