Maven과 Gradle 비교
안녕하세요. yeTi입니다.
오늘은 Maven과 Gradle을 비교해보려고 합니다.
Gradle vs Maven Comparison - Gradle을 기반으로 이해해보고자 합니다.
유연성
구글은 안드로이드의 공식 빌드툴로 Gradle을 선택했습니다. 왜 구글은 Gradle을 선택했을까요? 빌드 스크립트가 코드라서? 아닙니다. Gradle이 쉽게 확장할 수 있도록 설계됐기 때문입니다.
Gradle과 Maven 모두 configuration을 할 수 있도록 제공합니다. Maven은 커스터마이징하기 좀더 까다롭고 불가능한것도 있습니다. 반면에 Gradle은 어떤 요구사항이든 받아들일 수 있을만큼 유연하게 구성할 수 있습니다.
Performance
큰 프로젝트나 많은 디펜던시를 가지고 있는 프로젝트에 대한 빌드시 Gradle이 Maven보다 빠릅니다. 최소 두배에서 많게는 100배 이상 나은 성능을 제공합니다.
그 이유에 대해 3개의 특성을 보면 다음과 같습니다.
Incrementality
Gradle은 작업의 입력 및 출력을 추적하여 필요한것만 실행하고, 가능한 경우에는 변경된 파일망 처리하도록 합니다.
Build Cache
동일한 입력에 대해 다른 Gradle 빌드의 출력물이라도 재사용합니다.
Gradle Daemon
빌드 정보를 메모리에 유지하여 프로세스를 장기간 유지합니다.
User Experience
사용자 경험측면에서는 이미 오랜 기간 IDE를 통해 지원해온 Maven쪽이 우세합니다. 하지만 Gradle도 지속적으로 IDE를 통해 개선해 나가고 있습니다. 그래서 보다 나은 IDE 환경을 위해 코틀린기반 DSL을 제공하기 시작했습니다.
또한 IDE보다 CLI에 익숙한 사용자를 위해 logging 기능을 개선하고 web-based UI를 제공하여 보다 편리하게 Gradle을 사용할 수 있도록 제공합니다.
의존성 관리
라이브러리를 관리할 때 메이븐은 버전별로 하나의 의존성만 가질 수 있지만 Gradle은 커스터마이즈한 의존성을 선택할 수 있고 버전뿐만아니라 대체 룰을 정의할 수 있습니다. 이 대체 메커니즘으로 Gradle은 여러 프로젝트를 함께 빌드하여 composite 빌드를 작성할 수 있습니다.
또한 Maven은 의존성 스코프를 몇가지만 제공하지만 Gradle은 의존성의 스코프를 커스터마이즈하여 사용할 수 있습니다.
마지막으로 Gradle은 의존성에 대한 버전을 다양하게 관리할 수 있도록 지원합니다.