Maven vs Gradle - 빌드 도구 비교


Maven과 Gradle은 Java 프로젝트의 빌드, 의존성 관리를 담당하는 도구입니다. 각각의 특징과 장단점을 비교하여 프로젝트에 맞는 도구를 선택하세요.



비교 요약









항목MavenGradle
설정 파일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.5


Maven 장점


<!-- 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 개발