Maven과 Gradle은 모두 빌드 관리 도구이다.
빌드 관리 도구는 빌드와 관리 도구로 나누어 질 수 있어보인다.
빌드는 소스 코드 파일을 컴퓨터에서 실행할 수 있는 독립적인 형태로 변환하는 과정과 결과를 말한다. 즉, 우리가 작성한 소스 코드 (스프링부트의 경우 .java 파일), 프로젝트에서 쓰인 각각의 파일 및 자원(.xml, .jpg, properties)을 jvm이나 톰캣같은 WAS가 인식할 수 있도록 패키징하는 과정 및 결과물을 일컫는다.
예를 들면, Java 프로젝트를 진행하면 개발자가 작성한 A.java와 여러가지 정적 파일 등에 해당하는 resource가 존재한다.
빌드를 한다면 소스 코드를 컴파일해서 .class로 변환하고 resource를 .class가 참조할 수 있는 적절한 위치로 옮기고 META-INF와 MANIFEST.MF들을 하나로 압축하는 과정을 의미한다.
빌드 도구란, 소스 코드에서 애플리케이션을 생성하면서 여러가지 외부 라이브러리를 사용하는데, 빌드 관리 도구는 사용자가 관리할 필요 없이 필요한 라이브러리들을 자동으로 관리한다.
빌드 관리 도구는 다음과 같은 작업을 수행한다.
빌드 툴로는 Ant, Maven, Gradle 등이 있다.
Maven은 Java 전용 프로젝트 관리 도구로, Lifecycle 관리 목적 빌드 도구이며, Apache Ant의 대안으로 만들어졌다.
또한, Maven은 아파치 라이센스로 배포되는 오픈 소스 소프트웨어이다.
프로젝트를 진행하면서 사용하는 수많은 라이브러리들을 관리해주는 도구로, Maven의 가장 큰 특징은 그 라이브러리들과 연관된 라이브러리들까지 거미줄처럼 모두 연동이 돼서 관리가 된다는 점이다.
즉, Maven은 네트워크를 통해 연관된 라이브러리까지 같이 업데이트 해주기 때문에 사용이 편리하다.
1. Lifecycle 관리 도구로, 정해진 Lifecycle에 의하여 작업을 수행한다. 전반적인 프로젝트 관리 기능을 포함하고 있다.

2. Maven은 필요한 라이브러리를 pom.xml에 정의한다. 이를 프로젝트 모델링이라고 한다.
POM - Project Object Model
Maven의 기능을 이용하기 위해 POM이 사용된다.
POM은 약자 이름 그대로 Project Object Model의 정보를 담고 있는 파일이다. pom.xml에서 주요하게 다루는 기능들은 아래와 같다.
- 프로젝트 정보: 프로젝트 이름, 라이센스 등
- 빌드 설정: 소스, 리소스, 라이프사이클별 실행한 플러그인 등 빌드와 관련된 설정
- 빌드 환경: 사용자 환경 별로 달라질 수 있는 프로파일 정보
- pom 연관 정보: 의존 프로제트(모듈), 상위 프로젝트, 포함하고 있는 하위 모듈 등
Apache Ant는 비교적 자유도가 높은 편이고, Maven은 정해진 라이프사이클에 의하여 작업을 수행하며, 전반적인 프로젝트 관리 기능까지 포함하는 차이가 있다. (Maven은 Build Tool + Project Management)
Maven을 대체할 수 있는 프로젝트 구성 관리 및 범용 빌드 툴이며, Ant Builder와 Groovy script를 기반으로 구축되어 기존 Ant의 역할과 배포 스크립의 기능을 모두 사용 가능하며 스프링부트와 안드로이드에서 사용된다.
빌드 속도가 Maven에 비해 10~100배 가량 빠르며, Java, C/C++, Python 등을 지원한다.
Groovy?
Groovy는 Java 가상 머신에서 실행되는 스크립트 언어 이다. Java 가상 머신에서 동작하지만, Java와는 달리 소스 코드를 컴파일 할 필요는 없다.Groovy는 스크립트 언어이고, 소스 코드를 그대로 실행한다. 또한 Java와 호환되고, Java 클래스 파일을 그대로 Groovy 클래스로 사용할 수 있다.
Java 문법과 유사하여 빌드 처리를 관리할 수 있는 면에서 Gradle은 Java 개발자가 사용하기에 최고의 빌드관리도구이지 않을까 싶다.
기존 Maven의 경우 XML로 라이브러리를 정의하고 활용하도록 되어 있으나, Gradle의 경우 별도의 빌드 스크립트를 통해 사용할 애플리케이션 버전, 라이브러리 등의 항목을 설정할 수 있다.
Groovy 스크립트 언어로 구성되어 있기에 XML과 달리 변수선언, if, else, for 등의 로직이 구현 가능하며, 간결하게 구성이 가능하다.
1. 가독성이 좋다.
코딩에 의한 간결한 정의가 가능하므로 가독성이 좋다.
2. 재사용에 용이하다.
설정 주입 방식 (Configuration Injection)을 사용하므로 재사용에 용이하다.
3. 구조적인 장점
Build Script를 Groovy 기반의 DSL을 사용하여 코드로서 설정 정보를 구성하므로 구조적인 장점이 있다.
4. 편리하다.
Gradle 설치 없이 Gradle wrapper를 이용하여 빌드를 지원한다.
5. 멀티 프로젝트
Gradle은 멀티 프로제트 빌드를 지원하기 위해 설계된 빌드 관리 도구이다.
6. 지원
Maven을 완전 지원한다.
스크립트 길이와 가독성 면에서 Gradle이 우세하다.
Maven은 프로젝트가 커질수록 빌드 스크립트 내용이 길어지고 가독성이 떨어진다. 반면, Gradle은 훨씬 적은 양의 스크립트로 짧고 간결하게 작성이 가능하다.
빌드와 테스트 실행 결과가 Gradle이 더 빠르다. Gradle은 캐시를 사용하므로 테스트 반복 시 실행 결과 시간의 차이가 더 커진다.

의존성이 늘어날 수록 스크립트 품질의 차이가 커진다.
Maven이 정적인 형태의 XML 기반으로 작성되어 동적인 빌드를 적용할 경우 어려움이 많다면, Gradle은 Groovy를 사용하기 때문에 동적인 빌드는 Groovy 스크립트로 플러그인을 호출하거나 직접 코드를 짜면 된다.
Maven은 멀티 프로젝트에서 특정 설정을 다른 모듈에서 사용하려면 상속받아야하지만, Gradle은 설정 주입 방식을 사용하므로 멀티 프로젝트에 적합하다.
참고 자료
Maven과 Gradle의 개념 및 비교
메이븐(Maven)과 그래들(Gradle)의 개념 및 비교