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. ํต์ฌ ๋น๊ต
| ํญ๋ชฉ | Maven | Gradle |
|---|---|---|
| ์ค์ ์ธ์ด | XML (pom.xml) | Kotlin/Groovy DSL (build.gradle.kts) |
| ์ฒ ํ | ์ปจ๋ฒค์ ์ค์ฌ, ์๊ฒฉํ ๊ตฌ์กฐ | ์ ์ฐ์ฑ ์ค์ฌ, ์ปค์คํฐ๋ง์ด์ง ์์ |
| ๋น๋ ์๋ | ๋งค๋ฒ ์ ์ฒด ๋น๋ | ์ฆ๋ถ ๋น๋ + ์บ์๋ก 2~100๋ฐฐ ๋น ๋ฆ |
| ์์กด์ฑ ์ถฉ๋ ํด๊ฒฐ | ๊ฐ์ฅ ๊ฐ๊น์ด ์ ์ ์ฐ์ (ํธ๋ฆฌ ๊น์ด ๊ธฐ๋ฐ) | ๊ฐ์ฅ ๋์ ๋ฒ์ ์ฐ์ (์ ์ฒด ๊ทธ๋ํ ๊ธฐ๋ฐ) |
| ํ์ต ๊ณก์ | ๋ฎ์ (์ ํด์ง ํ์ ๋ฐ๋ฅด๋ฉด ๋จ) | ๋์ (์์ ๋๊ฐ ํฐ ๋งํผ ์์์ผ ํ ๊ฒ์ด ๋ง์) |
| ๋ฉํฐ๋ชจ๋ | ์ง์ํ์ง๋ง ์ค์ ์ด ๋ฐ๋ณต์ | ๊น๋ํ ๋ฉํฐ๋ชจ๋ ์ง์ |
| ์ํ๊ณ | Spring, ์ ํต Java ์ํฐํ๋ผ์ด์ฆ | Android, ๋๊ท๋ชจ ๋ฉํฐ๋ชจ๋ ํ๋ก์ ํธ |
๋ฒค์น๋งํฌ (Apache Commons Lang 3 ๊ธฐ์ค)
| ์๋๋ฆฌ์ค | Gradle | Maven |
|---|---|---|
| Clean ๋น๋ + ํ ์คํธ | 14.79s | 26.19s |
| ์บ์ ํ์ฑํ Clean ๋น๋ | 0.69s | 25.85s |
| ๋จ์ผ ํ์ผ ๋ณ๊ฒฝ ์ปดํ์ผ | 0.55s | 4.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์ ๋ง๋๋ ์ค๋ฌด ์์