Spring
[Spring] 빌드 관리 도구 Maven vs Gradle
s_ih_yun
2025. 6. 4. 00:13
728x90
재직 중에 Maven만 사용하다가 요즘은 Gradle이 더 간결하고 많이 쓰인다길래 써보면서 차이점을 기록하려고 합니다
1. 빌드 관리 도구 (Build Tool)
- Maven과 Gradle은 모두 빌드 관리 도구
- 작업
- 종속성 다운로드
- 소스코드를 바이너리 코드로 컴파일
- 바이너리 코드를 패키징
- 테스트 실행
- 프로덕션 시스템에 배포
2. Maven vs Gradle 차이
2.1. Maven vs Gradle 차이
Gradle | Maven | |
스크립트 | 적은 양의 스크립트로 짧고 간결한 작성 가능 | 프로젝트가 커질수록 길고 가독성 떨어짐 |
동적 빌드 | 동적 빌드는 Groovy 스크립트로 플러그인 호출하거나 직접 코드 작성 가능 | 정적 형태의 XML 기반이라 동적 빌드 적용 어려움 |
멀티 프로젝트 | 설정 주입 방식 사용 → 멀티 프로젝트에 적합 | 멀티 프로젝트에서 특정 설정을 다른 모듈에서 사용하려면 상속 받아야 함 |
속도 | 빌드와 테스트가 더 빠름 | 상대적으로 느림 |
- 스크립트 길이와 가독성 : Gradle 우세
- 빌드와 테스트 실행 : Gradle이 빠름
- 의존성이 늘어날 수록 성능과 스크립트 품질 차이가 심해질 것
2.2. 주요 명령어 차이
Gradle | Maven | |
빌드 | ./gradlew build | mvn package |
실행 | ./gradlew bootRun | mvn spring-boot:run |
테스트 | ./gradlew test | mvn test |
의존성 확인 | ./gradlew dependencies | mvn dependency:tree |
클린 | ./gradlew clean | mvn clean |
- ./gradlew : Gradle Wrapper 실행 파일
2.3. 프로젝트의 root / Module 정의
- Maven
- pom.xml 만 있으면 루트 프로젝트로 자동 인식
- 다중 모듈의 경우, pom.xml 안에 <modules> 태그로 하위 모듈 명시
- Gradle
- setting.gradle(.kts) 파일이 있어야 프로젝트를 루트로 인식
- 이 파일 안에 프로젝트 이름과 모듈 구조 설정 가능
- ex.
rootProject.name = "MyAwesomeApp"
nclude("core", "web", "api")
- ex.
- 이 외에 Spring 프로젝트에서 Maven → Gradle로 변경해도 디렉토리 구조는 거의 동일!
2.4. 의존성/빌드 파일 예시
- Maven : pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.5.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>Project2</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>Project2</name>
<description>Project2</description>
<url/>
<licenses>
<license/>
</licenses>
<developers>
<developer/>
</developers>
<scm>
<connection/>
<developerConnection/>
<tag/>
<url/>
</scm>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web-services</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
- Gradle : build.gradle(.kts)
plugins {
java
id("org.springframework.boot") version "3.5.0"
id("io.spring.dependency-management") version "1.1.4"
}
group = "com.example"
version = "0.0.1-SNAPSHOT"
description = "Project2"
java {
sourceCompatibility = JavaVersion.VERSION_17
}
repositories {
mavenCentral()
}
dependencies {
implementation("org.springframework.boot:spring-boot-starter-web")
implementation("org.springframework.boot:spring-boot-starter-web-services")
implementation("org.springframework.boot:spring-boot-starter-validation")
testImplementation("org.springframework.boot:spring-boot-starter-test")
}
tasks.test {
useJUnitPlatform()
}
📌 References
https://hesh1232.tistory.com/156
Maven과 Gradle 차이 및 프로젝트 설정
1. Maven과 Gradle 우리는 스프링 프로젝트를 생성할 때 Maven을 선택할 것인지 Gradle을 선택할 것인지 선택할 것입니다. 이전엔 책에서 하란대로 따라만 했지 둘이 어떤 차이가 있는지 잘 모르고 개발
hesh1232.tistory.com
https://dev-coco.tistory.com/65
메이븐(Maven)과 그래들(Gradle)의 개념 및 비교
스프링과 스프링부트를 공부 하려던 중 maven과 gradle을 알게되었습니다. maven과 gradle이 빌드관리도구인 것은 알고있지만 자세한 개념은 모르기에 maven과 gradle 각각의 개념과 정확한 차이점을 알
dev-coco.tistory.com
728x90