Develop/Spring

[Spring]빌드도구 Maven과 Gradle의 차이

롱하 2024. 10. 18. 22:59

Maven과 Gradle은 빌드 도구로, 프로젝트의 빌드, 테스트, 배포 등의 작업을 자동화하는 역할을 하지만, 두 도구는 동작 방식과 설정 방법, 성능 측면에서 차이가 있다.

Maven

 

  • 설정방식
  • XML기반 설정 파일인 pom.xml을 사용
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>2.5.0</version>
    </dependency>
</dependencies>
  • 빌드속도
  • XML 설정 파일 기반으로 빌드를 수행하며, 빌드 시 매번 모든 작업을 다시 수행하는 경향이 있다.
  • 빌드 속도 : 상대적으로 느릴 수 있다.
  • 병렬 빌드 : Maven 3.0 이후부터 병렬 빌드를 지원하지만, 성능 최적화는 Gradle에 비해 제한적이다.
  • 의존성 관리
  • 중앙 저장소(Maven Central)를 기본으로 사용하며, 각 의존성은 groupId, artifactId, version으로 관리된다.
  • 의존성 충돌 발생 시 의존성 트리 분석을 통해 해결해야 하며, 종속성 관리가 좀 더 명시적이다.

 

 

Gradle

 

  • 설정방식
  • Groovy 또는 Kotlin DSL을 사용하여 build.gradle 또는 build.gradle.kts 파일로 설정
  • 빌드속도
  • Gradle은 태스크 기반 빌드 시스템으로, 필요에 따라 작업을 건너뛰거나 다시 빌드하지 않는 증분 빌드를 지원한다.
  • 빌드 속도 : 초기 빌드는 시간이 오래 걸릴 수 있지만, 이후 캐싱, 증분 빌드, 병렬 빌드 기능을 통해 Maven보다 훨씬 빠른 빌드를 수행할 수 있다.
  • 성능 최적화 : Gradle은 작업 결과를 캐시하고 재사용함으로써 반복 빌드를 빠르게 한다.
  • 의존성 관리
  • Maven과 동일하게 의존성을 관리하지만, Transitive Dependency 관리가 더 유연하고 편리하다.
  • 의존성 충돌 해결 : Gradle은 자동으로 최신 버전을 선택하여 의존성 충돌을 완화하는 기능을 가지고 있다. 이를 최소 상위 버전 선택 전략(Conflict Resolution)을 통해 관리한다.
  • 추가적으로 의존성 구성(configurations)을 통해 더 세밀한 의존성 관리를 할 수 있다.