개요
- 모두 자바 기반 프로젝트의 의존성 관리, 빌드 자동화, 프로젝트 라이프사이클 관리 등을 위한 도구
Maven
- XML 기반 설정 : XML을 기반으로 한 설정 파일인 pom.xml을 사용
프로젝트 구성, 의존성, 빌드 설정 등을 정의하는 데 사용
- 컨벤션 중심 구성 : 프로젝트 구조와 빌드 프로세스에 대한 규칙과 규약을 가지고 있음
일관된 프로젝트 구조와 작업 방식을 제공하여 프로젝트 간의 일관성을 높임
- 플러그인 기반 확장 : 다양한 플러그인을 사용하여 기능을 확장 가능
미리 정의된 플러그인을 활용하여 빌드를 구성하고 실행할 수 있음
- 새로운 기능을 쉽게 설치할 수 있고 업데이트할 수 있음
Gradle
- Groovy 기반 DSL : Gradle은 Groovy 언어 기반의 DSL(Domain Specific Language)을
사용하여 빌드 스크립트를 작성
Maven의 XML보다 더 간결하고 가독성이 높은 스크립트를 작성 가능
- 선언적 의존성 관리 : Gradle은 Maven과 마찬가지로 의존성 관리를 지원하지만,
그루비 기반의 DSL을 사용하여 선언적으로 의존성을 관리 가능
- 유연성과 확장성 : Gradle은 매우 유연하며, 더 복잡한 빌드 시나리오나 특정한 요구 사항을 처리하기 위해 쉽게 확장 가능
사용자 정의 태스크 및 플러그인을 작성하여 빌드 프로세스를 확장 가능
- Ant와 Maven의 장점을 모은 도구
- 멀티 프로젝트에 사용하기 좋음
- 빌드를 설명하는 풍부한 도메인 모델
차이점
- 구성 언어 : Maven은 XML을 사용, Gradle은 Groovy 기반 DSL을 사용
- 유연성 : Gradle이 Maven보다 더 유연하며 확장성이 뛰어남
- 프로젝트 구조 : Maven은 고정된 구조를 강제하며, Gradle은 더 유연하여 프로젝트 구조를
더 많이 커스터마이징 가능
Gradle이 Maven보다 좋은점
Build라는 동적인 요소를 XML로 정의하기에는 어려운 부분이 많음
- 설정 내용이 길어지고 가독성 떨어짐
- 의존관계가 복잡한 프로젝트 설정하기에 부적절
- 상속구조를 이용한 멀티 모듈 구현
- 특정 설정을 소수의 모듈에서 공유하기 위해서는 부모 프로젝트를 생성하여 상속하게 해야 함
- Gradle은 메이븐 보다 최대 100배 빠름




예제
스프링부트를 이용하여 같은 기능과 라이브러리 의존성을 가지는 Maven, Gradle 프로젝트를 생성


- 스크립트 길이와 가독성 면에서 Gradle이 더 좋음
- 빌드와 테스트 실행 결과 Gradle이 더 빠름
- 의존성이 늘어날 수록 성능과 스크립트 품질의 차이가 심해질 것
결론
- 프로젝트의 필요에 따라 달라질 수 있음
- Maven은 컨벤션을 중시하고 간단한 프로젝트에 적합
- Gradle은 유연성과 확장성이 필요한 복잡한 빌드 시나리오에 적합
- Gradle은 Maven의 단점을 보완해줌