Contents
see List작성일 2025. 11. 30.
Maven vs Gradle - 빌드 도구 비교
Maven과 Gradle은 Java 프로젝트의 빌드, 의존성 관리를 담당하는 도구입니다. 각각의 특징과 장단점을 비교하여 프로젝트에 맞는 도구를 선택하세요.
비교 요약
| 항목 | Maven | Gradle |
|---|---|---|
| 설정 파일 | pom.xml (XML) | build.gradle (Groovy/Kotlin) |
| 성능 | 보통 | 빠름 (캐싱, 증분 빌드) |
| 유연성 | 규약 기반 | 스크립트로 커스터마이징 |
| 학습곡선 | 낮음 | 중간 |
| IDE 지원 | 매우 좋음 | 좋음 |
Maven 기본 구조
<!-- pom.xml -->
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>myapp</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>3.2.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>Gradle 기본 구조
// build.gradle (Groovy DSL)
plugins {
id "java"
id "org.springframework.boot" version "3.2.0"
id "io.spring.dependency-management" version "1.1.4"
}
group = "com.example"
version = "1.0.0"
java {
sourceCompatibility = JavaVersion.VERSION_17
}
repositories {
mavenCentral()
}
dependencies {
implementation "org.springframework.boot:spring-boot-starter-web"
testImplementation "org.springframework.boot:spring-boot-starter-test"
}
tasks.named("test") {
useJUnitPlatform()
}Gradle Kotlin DSL
// build.gradle.kts (Kotlin DSL)
plugins {
java
id("org.springframework.boot") version "3.2.0"
id("io.spring.dependency-management") version "1.1.4"
}
group = "com.example"
version = "1.0.0"
java {
sourceCompatibility = JavaVersion.VERSION_17
}
dependencies {
implementation("org.springframework.boot:spring-boot-starter-web")
testImplementation("org.springframework.boot:spring-boot-starter-test")
}주요 명령어 비교
# 빌드
mvn clean install
./gradlew clean build
# 테스트
mvn test
./gradlew test
# 패키징
mvn package
./gradlew jar # 또는 ./gradlew bootJar
# 실행
mvn spring-boot:run
./gradlew bootRun
# 의존성 확인
mvn dependency:tree
./gradlew dependencies의존성 범위 비교
<!-- Maven -->
<dependency>
<scope>compile</scope> <!-- 기본 -->
<scope>provided</scope> <!-- 컴파일만 -->
<scope>runtime</scope> <!-- 런타임만 -->
<scope>test</scope> <!-- 테스트만 -->
</dependency>
// Gradle
dependencies {
implementation "..." // compile (기본)
compileOnly "..." // provided
runtimeOnly "..." // runtime
testImplementation "..." // test
}Gradle 장점
// 1. 증분 빌드 - 변경된 부분만 빌드
./gradlew build // 두 번째 실행이 훨씬 빠름
// 2. 빌드 캐시
./gradlew build --build-cache
// 3. 병렬 실행
./gradlew build --parallel
// 4. 커스텀 태스크 쉽게 작성
tasks.register("hello") {
doLast {
println("Hello, Gradle!")
}
}
// 5. Wrapper로 버전 통일
./gradlew wrapper --gradle-version 8.5Maven 장점
<!-- 1. 명확한 규약 (Convention over Configuration) -->
<!-- 2. 풍부한 문서와 레퍼런스 -->
<!-- 3. 안정적인 플러그인 생태계 -->
<!-- 4. 대부분의 IDE에서 완벽 지원 -->
<!-- 5. CI/CD 도구 통합 용이 -->멀티 모듈 프로젝트
<!-- Maven (부모 pom.xml) -->
<modules>
<module>core</module>
<module>web</module>
<module>api</module>
</modules>
// Gradle (settings.gradle)
rootProject.name = "myapp"
include "core", "web", "api"선택 기준
- Maven 선택: 안정성 중시, 팀 표준, 간단한 빌드
- Gradle 선택: 빌드 성능 중요, 복잡한 빌드 로직, Android 개발
tool
| No | 작성일 | Title |
|---|---|---|
| 3006 | 2026. 06. 12. | Playwright 트레이스로 CI 테스트 실패를 빠르게 재현하는 운영 가이드 |
| 2950 | 2026. 06. 04. | GitHub Actions 배포 중복과 장기 토큰을 줄이는 OIDC 워크플로 설계 |
| 2894 | 2026. 05. 27. | Docker BuildKit 캐시 마운트와 원격 캐시로 CI 빌드 시간 줄이기 |
| 2835 | 2026. 05. 19. | Playwright Trace Viewer로 CI 실패 증거 남기기: 재현 안 되는 E2E 장애 추적 가이드 |
| 2635 | 2026. 04. 28. | Biome v2 완전 가이드: ESLint + Prettier를 대체하는 Rust 기반 통합 툴체인 — 56배 빠른 린트, 타입 인식 검사, 단일 설정 파일 |
| 2557 | 2026. 04. 20. | uv로 Python 개발 환경 100배 빠르게: pip 완전 대체 실전 가이드 |
| 2495 | 2026. 04. 14. | 2026 개발자 필수 AI 코딩 도구 완벽 비교: Claude Code vs Cursor vs GitHub Copilot |
| 2474 | 2026. 04. 13. | 2026 개발자 필수 도구 완벽 가이드: Claude Code, Cursor, Zed, AI DevOps 툴 |
| 2454 | 2026. 04. 12. | 2026 AI 개발 도구 완전 비교: GitHub Copilot vs Cursor vs Claude Code |
| 2430 | 2026. 04. 11. | Claude Code Agent SDK로 커스텀 AI 에이전트 만들기 |