설계 철학
-
Gradle:
- Configuration as Code 철학을 따릅니다.
- 선언형 및 프로그래밍 방식의 구성을 모두 지원하며, 더 유연하고 확장 가능합니다.
- Groovy 또는 Kotlin DSL(도메인 전용 언어)을 사용합니다.
- 유연성과 고급 기능 제공에 초점.
-
Maven:
- Convention over Configuration 철학을 따릅니다.
- 정해진 규칙과 표준(예: 디렉터리 구조, 플러그인 설정)을 기반으로 프로젝트를 빌드합니다.
- XML 기반의
pom.xml 파일로 구성됩니다.
- 단순함과 일관성 제공에 초점.
구성 파일
- Gradle:
build.gradle(Groovy) 또는 build.gradle.kts(Kotlin) 파일 사용.
- 코드 스타일이기 때문에 더 간결하고 유연하게 설정 가능.
- 조건문과 함수 등을 사용하여 동적으로 빌드 스크립트를 작성할 수 있음.
- Maven:
pom.xml이라는 고정된 XML 파일 사용.
- XML은 정형화되어 있지만, 복잡한 설정에서는 가독성이 떨어질 수 있음.
- 의존성과 플러그인 설정이 직관적이지만, 반복적인 설정이 많아질 수 있음.
빌드 속도
- Gradle:
- 빠른 빌드를 위해 설계됨.
- 증분 빌드 및 빌드 캐시 기능을 지원하여 변경된 부분만 재빌드 가능.
- 데몬 프로세스를 활용하여 실행 속도 향상.
- Maven:
- 전통적으로 빌드 속도가 느림.
- 빌드 캐시 및 증분 빌드 기능이 부족하거나 제한적.
의존성 관리
- Gradle:
- Maven 중앙 저장소 외에 다양한 저장소(JCenter, Ivy 등) 지원.
- 의존성 충돌 해결에 "latest-wins" 전략 사용(또는 커스터마이징 가능).
dependencyManagement 대신 더 유연한 버전 제어 가능.
- Maven:
- 기본적으로 중앙 저장소(Maven Central Repository) 사용.
- 의존성 충돌이 발생하면 "nearest-wins" 전략으로 해결.
- BOM(Bill of Materials)을 통해 의존성 버전 일관성 관리 가능.
플러그인과 확장성
- Gradle:
- 플러그인 시스템이 매우 유연하며, 사용자 정의 플러그인을 만들기 쉬움.
- 새로운 언어 및 플랫폼(Java 외 Kotlin, Scala 등) 지원에 유리.