Alert

์ด ๊ธ€์€ Claude Code์˜ ๋„์›€์„ ๋ฐ›์•„ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค

TL;DR

  • Maven์€ XML ๊ธฐ๋ฐ˜์˜ ์„ ์–ธ์  ๋นŒ๋“œ ๋„๊ตฌ๋กœ ์ปจ๋ฒค์…˜ ์ค‘์‹ฌ, Gradle์€ Kotlin/Groovy DSL ๊ธฐ๋ฐ˜์œผ๋กœ ์œ ์—ฐ์„ฑ ์ค‘์‹ฌ
  • Gradle์ด ์ฆ๋ถ„ ๋นŒ๋“œ, ๋นŒ๋“œ ์บ์‹œ, ๋ฐ๋ชฌ ๋•๋ถ„์— ๋Œ€๋ถ€๋ถ„์˜ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ 2๋ฐฐ ์ด์ƒ ๋น ๋ฆ„
  • ์†Œ๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ๋Š” Maven์˜ ๋‹จ์ˆœํ•จ์ด ์žฅ์ , ๋Œ€๊ทœ๋ชจ/๋ฉ€ํ‹ฐ๋ชจ๋“ˆ ํ”„๋กœ์ ํŠธ๋Š” Gradle์ด ์œ ๋ฆฌ

Source


1. ๋นŒ๋“œ ๋„๊ตฌ๊ฐ€ ๋ญ”๊ฐ€

Java(๋˜๋Š” JVM ์–ธ์–ด) ํ”„๋กœ์ ํŠธ๋Š” ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผํ•˜๊ณ , ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ , ํ…Œ์ŠคํŠธ๋ฅผ ๋Œ๋ฆฌ๊ณ , ์ตœ์ข… ํŒจํ‚ค์ง€(JAR, WAR ๋“ฑ)๋ฅผ ๋งŒ๋“œ๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•˜๋‹ค. ์ด ์ „์ฒด ๊ณผ์ •์„ ์ž๋™ํ™”ํ•ด ์ฃผ๋Š” ๊ฒƒ์ด ๋นŒ๋“œ ๋„๊ตฌ๋‹ค.

Python์—์„œ pip install + pytest + ํŒจํ‚ค์ง•์„ ํ•˜๋‚˜์˜ ๋„๊ตฌ๊ฐ€ ํ•ด์ค€๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.


2. Maven

Apache Maven์€ 2004๋…„์— ๋“ฑ์žฅํ•œ ๋นŒ๋“œ ๋„๊ตฌ๋‹ค. โ€œConvention over Configurationโ€ ์ฒ ํ•™์„ ๋”ฐ๋ฅธ๋‹ค.

ํ•ต์‹ฌ ํŠน์ง•
  • XML ์„ค์ • (pom.xml): ํ”„๋กœ์ ํŠธ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์„ ์–ธํ•˜๋ฉด Maven์ด ์•Œ์•„์„œ ๋นŒ๋“œํ•œ๋‹ค
  • ๊ณ ์ •๋œ ๋ผ์ดํ”„์‚ฌ์ดํด: clean โ†’ validate โ†’ compile โ†’ test โ†’ package โ†’ install โ†’ deploy
  • ์ค‘์•™ ์ €์žฅ์†Œ: Maven Central์—์„œ ์˜์กด์„ฑ์„ ์ž๋™ ๋‹ค์šด๋กœ๋“œ
<project>
  <groupId>com.example</groupId>
  <artifactId>my-app</artifactId>
  <version>1.0</version>
  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
      <version>3.2.0</version>
    </dependency>
  </dependencies>
</project>
mvn clean package    # ๋นŒ๋“œ
mvn test             # ํ…Œ์ŠคํŠธ
mvn dependency:tree  # ์˜์กด์„ฑ ํŠธ๋ฆฌ ํ™•์ธ

3. Gradle

Gradle์€ 2012๋…„์— ๋“ฑ์žฅํ–ˆ๋‹ค. Maven์˜ ์ปจ๋ฒค์…˜์€ ๊ฐ€์ ธ๊ฐ€๋˜ ์œ ์—ฐ์„ฑ์„ ๋Œ€ํญ ๊ฐ•ํ™”ํ•œ ๋„๊ตฌ๋‹ค. Android ๊ณต์‹ ๋นŒ๋“œ ๋„๊ตฌ์ด๊ธฐ๋„ ํ•˜๋‹ค.

ํ•ต์‹ฌ ํŠน์ง•
  • Kotlin DSL ๋˜๋Š” Groovy DSL: XML ๋Œ€์‹  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ๋นŒ๋“œ ๋กœ์ง ์ž‘์„ฑ
  • ์ฆ๋ถ„ ๋นŒ๋“œ: ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„๋งŒ ๋‹ค์‹œ ๋นŒ๋“œ
  • ๋นŒ๋“œ ์บ์‹œ + ๋ฐ๋ชฌ: ์ด์ „ ๋นŒ๋“œ ๊ฒฐ๊ณผ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๊ณ , ๋ฐฑ๊ทธ๋ผ์šด๋“œ ํ”„๋กœ์„ธ์Šค๋กœ JVM ์›Œ๋ฐ์—… ์œ ์ง€
// build.gradle.kts (Kotlin DSL)
plugins {
    java
    id("org.springframework.boot") version "3.2.0"
}
 
dependencies {
    implementation("org.springframework.boot:spring-boot-starter-web")
}
gradle build         # ๋นŒ๋“œ
gradle test          # ํ…Œ์ŠคํŠธ
gradle dependencies  # ์˜์กด์„ฑ ํŠธ๋ฆฌ ํ™•์ธ

4. ํ•ต์‹ฌ ๋น„๊ต

ํ•ญ๋ชฉMavenGradle
์„ค์ • ์–ธ์–ดXML (pom.xml)Kotlin/Groovy DSL (build.gradle.kts)
์ฒ ํ•™์ปจ๋ฒค์…˜ ์ค‘์‹ฌ, ์—„๊ฒฉํ•œ ๊ตฌ์กฐ์œ ์—ฐ์„ฑ ์ค‘์‹ฌ, ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ์ž์œ 
๋นŒ๋“œ ์†๋„๋งค๋ฒˆ ์ „์ฒด ๋นŒ๋“œ์ฆ๋ถ„ ๋นŒ๋“œ + ์บ์‹œ๋กœ 2~100๋ฐฐ ๋น ๋ฆ„
์˜์กด์„ฑ ์ถฉ๋Œ ํ•ด๊ฒฐ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ •์˜ ์šฐ์„  (ํŠธ๋ฆฌ ๊นŠ์ด ๊ธฐ๋ฐ˜)๊ฐ€์žฅ ๋†’์€ ๋ฒ„์ „ ์šฐ์„  (์ „์ฒด ๊ทธ๋ž˜ํ”„ ๊ธฐ๋ฐ˜)
ํ•™์Šต ๊ณก์„ ๋‚ฎ์Œ (์ •ํ•ด์ง„ ํ‹€์„ ๋”ฐ๋ฅด๋ฉด ๋จ)๋†’์Œ (์ž์œ ๋„๊ฐ€ ํฐ ๋งŒํผ ์•Œ์•„์•ผ ํ•  ๊ฒƒ์ด ๋งŽ์Œ)
๋ฉ€ํ‹ฐ๋ชจ๋“ˆ์ง€์›ํ•˜์ง€๋งŒ ์„ค์ •์ด ๋ฐ˜๋ณต์ ๊น”๋”ํ•œ ๋ฉ€ํ‹ฐ๋ชจ๋“ˆ ์ง€์›
์ƒํƒœ๊ณ„Spring, ์ „ํ†ต Java ์—”ํ„ฐํ”„๋ผ์ด์ฆˆAndroid, ๋Œ€๊ทœ๋ชจ ๋ฉ€ํ‹ฐ๋ชจ๋“ˆ ํ”„๋กœ์ ํŠธ
๋ฒค์น˜๋งˆํฌ (Apache Commons Lang 3 ๊ธฐ์ค€)
์‹œ๋‚˜๋ฆฌ์˜คGradleMaven
Clean ๋นŒ๋“œ + ํ…Œ์ŠคํŠธ14.79s26.19s
์บ์‹œ ํ™œ์„ฑํ™” Clean ๋นŒ๋“œ0.69s25.85s
๋‹จ์ผ ํŒŒ์ผ ๋ณ€๊ฒฝ ์ปดํŒŒ์ผ0.55s4.08s

5. ์˜์กด์„ฑ ํ•ด๊ฒฐ ๋ฐฉ์‹์˜ ์ฐจ์ด

๋นŒ๋“œ ๋„๊ตฌ ์„ ํƒ์—์„œ ์˜์กด์„ฑ ์ถฉ๋Œ ํ•ด๊ฒฐ ์ „๋žต์ด ์‹ค๋ฌด์—์„œ ๊ฝค ์ค‘์š”ํ•˜๋‹ค.

Maven โ€” โ€œnearest definition winsโ€. ์˜์กด์„ฑ ํŠธ๋ฆฌ์—์„œ ๋ฃจํŠธ์— ๊ฐ€๊นŒ์šด ์ชฝ์ด ์ด๊ธด๋‹ค. ํŠธ๋ฆฌ ๊ตฌ์กฐ์— ๋”ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์–ด์„œ ์˜ˆ์ธกํ•˜๊ธฐ ์–ด๋ ต๋‹ค.

Gradle โ€” ์ „์ฒด ์˜์กด์„ฑ ๊ทธ๋ž˜ํ”„๋ฅผ ๋ถ„์„ํ•œ ๋’ค ๊ฐ€์žฅ ๋†’์€ ๋ฒ„์ „์„ ์„ ํƒํ•œ๋‹ค. ์ปค์Šคํ…€ ํ•ด๊ฒฐ ๊ทœ์น™๋„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. implementation๊ณผ api ์Šค์ฝ”ํ”„๋ฅผ ๋ถ„๋ฆฌํ•ด์„œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์˜์กด์„ฑ์ด ์†Œ๋น„์ž์—๊ฒŒ ๋ˆ„์ถœ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•œ๋‹ค.

์‹ค๋ฌด ์„ ํƒ ๊ธฐ์ค€

  • ์†Œ๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ, Spring ๊ธฐ๋ฐ˜ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ โ†’ Maven์œผ๋กœ ์ถฉ๋ถ„
  • Android, ๋Œ€๊ทœ๋ชจ ๋ฉ€ํ‹ฐ๋ชจ๋“ˆ, ๋นŒ๋“œ ์†๋„๊ฐ€ ์ค‘์š”ํ•œ ํ™˜๊ฒฝ โ†’ Gradle ๊ถŒ์žฅ
  • ์ด๋ฏธ ํŒ€์—์„œ ์“ฐ๊ณ  ์žˆ๋Š” ๋„๊ตฌ๊ฐ€ ์žˆ๋‹ค๋ฉด ๊ทธ๊ฑธ ๋”ฐ๋ฅด๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ํ˜„์‹ค์ 

๊ด€๋ จ ๋…ธํŠธ

  • Fat JAR vs Thin JAR & Shading โ€” Maven shade/Gradle shadow ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ Fat JAR์„ ๋งŒ๋“œ๋Š” ์‹ค๋ฌด ์˜ˆ์‹œ