[Spring boot] Maven VS Gradle

  • 라이브러리를 관리해주는 도구는 메이븐(Maver)과 Gradle이 있다.
  • 즉, 빌드 도구이다.

차이를 보기전 빌드 철학에 대해서 보자

→ 빌드 도구가 프로젝트를 어떻게 구성하고 어떻게 빌드해야 한다고 생각하는가에 대한 설계 사상

 

즉, 개발자에게 얼마나 자유를 줄 것인가, 규칙을 도구가 정할 것인가, 개발자가 정할 것인가, 빌드를 설정(Configuration)으로 볼지, 프로그램으로 볼지

 

이 차이가 Maven과 Gradle의 본질이다.

Maven의 철학 → Convention over Configuration (관례가 설정보다 우선)

  • 대부분의 자바 플젝은 비슷함 그러니 표준 구조 + 정해진 방식을 따르게 하자
  • Maven이 생각하는 구조는 “컴파일은 이 순서”, “테스트는 이 타이밍”, “패키징은 이 플러그인” → 개발자는 “선택”이 아니라 “준수”

장점 → 팀원이 바뀌어도 구조가 같음, 레거시/대기업 플젝 안정적, 빌드 예측 가능

단점 → 관례를 벗어나면 지옥, 조건 분기, 커스텀 빌드 거의 불가능, XML이 점점 비대해짐

 

 

Gradle의 철학 → Build as Code (빌드를 코드로 다룬다)

  • 빌드는 단순 설정이 아니라 로직이다 그러니 프로그래밍 언어로 빌드하자
if (project.hasProperty("prod")) {
    apply plugin: "war"
} else {
    apply plugin: "application"
}

→ 빌드에 로직을 쓸 수 있음

  • Gradle의 생각은 → “필요하면 네가 로직을 짜”, “성능은 내가 캐시로 책임질게”, “ 병렬, 증분 빌드 가능” → 개발자가 빌드를 설계
증분 빌드(Incremental Build) == 바뀐 것만 다시 빌드
병렬 빌드(Parallel Build) == 서로 영향 없는 작업은 동시에 빌드 

장점 → 대규모 및 멀티 모듈에 강함, 빌드 시간 다축, 커스텀 요구사항 대응 쉬움

단점 → 러닝 커브 높음, 빌드 스크립트가 복잡해질 수 있음

 

Maven

  • 정형화 및 규칙 중심의 XML 기반 빌드 도구
  • 설정 파일 - pom.xml
  • 설정 언어 - XML
  • 빌드 철학 - Convention over Configuration
  • 성능 - 느린 편
  • 확장성 - 제한적

pom.xml

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

 

Maven은 역사가 오래되어 기업 및 공공기관에서 표준, 레거시 프로젝트가 많다.

 

설정 난이도가 높으며, 공통 설정도 번거롭다. 빌드 속도는 느리다.

 

Gradle

  • 유연 및 성능 중심의 DSL 기반 빌드 도구
  • 설정 파일 - build.gradle/build.gradle.kts
  • 설정 언어 - Groovy/Kotlin DSL
  • 빌드 철학 - Configuration + Programming
  • 성능 - 빠름 (캐시, 병렬 빌드)
  • 확장성 - 매우 높음

 

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
}

Gradle은 안드로이드 공식 빌드 도구, 최신 트렌드이며 Spring boot 기본 선택

 

설정 난이도는 낮으며 공통 설정은 루트에서 한 번에 가능하며 빌드 속도는 빠르다.

 

 

성능 차이가 나는 이유

Maven → 매번 전체 빌드, 싱글 그레드 중심, 캐시 활용 제한적

 

Gradle → Build Cache, Incremetnal Build, Parallel Task Execution

 

결론

그래서 Maven은 레거시 플젝, 규칙이 명확한 게 좋을 때, 빌드 커스터마이징이 거의 없을 때

 

Gradle은 빌드 최적화, 빠르고 유연하게 하고 싶을 때 진행