Spring에서 Gradle과 Maven은 의존성 관리와 빌드 자동화를 위해 사용되는 도구.
빌드 도구로서 비슷한 목적을 가지고 있지만, 동작 방식과 특징에서 차이가 있음.
✒️ Build Script
Gradle
- DSL(Domain Specific Language) 기반
- Groovy 또는 Kotlin 스트립트 사용
- 문법이 간결하고 선언적이며 읽기 쉬움
dependencies {
implementation 'org.springframework.boot:spring-boot-starter:3.0.0'
}
Maven
- XML(Extensible Markup Language) 기반
- pom.xml 파일에서 프로젝트의 의존성과 빌드 설정을 정의
- 구조가 명확하고 계층적
- XML 문법이 길어지고 복잡해질 수 있음
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
</dependencies>
✒️ 성능
Gradle
- Incremental Build(증분 빌드)를 지원하여 변경된 부분만 빌드함으로써 속도 빠름
- 병렬 빌드와 캐싱을 기본족으로 지원하여 대규모 프로젝트에 유리
Maven
- 단순하지만 빌드 속도 느림
- Incremental Build 지원 X, 항상 전체 프로젝트 다시 빌드
- 병렬 지원 빌드 지원이 제한적 (특정 플러그인에서 지원)
✒️ 의존성 관리
Gradle
- Maven Central, JCenter 등 다양한 저장소를 지원 (사용자 정의 저장소 추가 가능)
- 의존성 관리 유연, 의존성 충돌 해결 자동화
Maven
- 중앙 저장소(Maven Central Repository) 기반으로 의존성 관리
- 물론 다양한 저장소를 지원하고 사용자 정의 저장소도 추가 가능
- 하지만 기본 동작이 Maven Central Repository를 기본값으로 가져옴
- 또한 maven 형식의 저장소만 지원
- 그래서 Gradle보다 덜 유연함
- 의존성 트리 확인 및 충돌 해결 기능 기본적으로 제공
- 의존성 관리는 XML에서 선언적으로 처리
✒️ 가독성과 유지보수성
Gradle
- DSL 방식으로 간결하고 가독성 좋음
- 스크립트 기반이라 조건문, 반복문 등을 활용해 설정을 동작으로 구성 가능
Maven
- XML 기반이라 구조화된 문서를 유지하기 쉬움
- 규모가 커지면 복잡성 증가 및 반복적인 태그 작성 증가