- 두 빌드 툴의 사용법은 인터넷에 잘 정리된 글이 많으니 차이점에 대해서 설명해보고자 한다.
Maven
- Apache에서 만든 소프트웨어 프로젝트 관리 및 comprehension 툴이다.
- POM 개념을 기반으로 프로젝트의 빌드, 보고 및 문서를 중앙 관리할 수 있다. → 프로젝트의 빌드 Lifecycle 기반 프레임워크.
mvn
명령어로 관리한다.- XML기반의
pom.xml
파일로 설정한다.
Gradle
- Maven을 대체할 수 있는 프로젝트 구성 관리 및 범용 빌드 툴이다.
gradle
명령어로 관리한다.- 스크립트 기반의
build.gradle
파일로 관리한다. - JVM의 스크립트 언어인 groovy로 만들었다.
- 두 빌드 툴 모두 라이브러리 의존성을 해결하고 프로젝트를 관리한다는 점에서 동일하다. 그렇다면 왜 gradle이 등장했는가?
Maven 대신 gradle을 사용하는 이유
XML
- Maven은 XML을 기반으로 의존성 (dependency) 및 디렉토리 구조 관리 등의 기능을 제공하며 한동안 많이 사용 됐다.
- 그러나 라이브러리가 추가되거나 각각의 라이브러리가 서로 다른 버전의 라이브러리를 참조하는 종속성을 가지고 있을 경우 관리가 어려워지는 문제가 있다. XML의 특징인 구조화는 장점이지만 문서의 양 자체가 비대해지는 단점이 있다.
- 이에 대한 대안으로 Gradle이 각광받고 있다. Gradle은 JVM 기반의 빌드 도구다. Maven과 호환된다. 그 외에도 설정이 간편하고 프로젝트별로 유연하게 설정할 수 있는 장점이 있다. (스프링 부트 시작하기, 인사이트)
성능
- ⭐️ Incrementality 증분성 : Gradle은 가능한 경우 변경된 파일만 작업해 중복 작업을 피한다. → 증분 빌드
- Build cache : 동일한 입력에 대해서 gradle 빌드를 재사용 한다.
- Gradle 데몬 : 빌드 정보를 메모리에 유지하는 프로세스를 구동한다.
Gradle의 증분 컴파일
- Maven과 가장 큰 차이점으로 빌드시 중복으로 컴파일하지 않는다.
- 변경된 파일만 작업한다는 gradle의 증분 컴파일에 대한 볼만한 글.
- 동일한 코드에 대해 재컴파일을 방지하는 방법과 변경된 부분만 컴파일하는 증분 컴파일에 대한 이야기가 흥미롭다. 어노테이션에 대한 컴파일 이야기도 있다.
의존성 관리
- Maven은 버전별로만 종속성을 재정의 할 수 있다. 반면 gradle은 한번 선언하면 프로젝트 전체에서 원치않는 종속성을 처리할 수 있는 종속성 선택을 할 수 있다.
- 성능, 의존성 관리 출처