본문 바로가기

Spring/Springboot

빌드 관리 도구 Maven과 Gradle 비교

1. 빌드 관리 도구

1) 빌드(build)

 

- 소스코드 파일(.java) 작성하고 컴파일(.class)한 후 실행할 수 있는 어플리케이션으로 변환하는 과정 또는 결과물

- 프로젝트에서 쓰인 파일, 자원, 라이브러리 등을 jvm이나 톰캣같은 WAS가 인식할 수 있도록 패키징하는 것

 

2) 빌드 관리 도구

- 프로젝트 생성, 테스트 빌드, 배포 등의 작업을 사용자가 직접 관리할 필요 없이 필요한 라이브러리들을 자동으로 관리해주는 도구

- 빌드도구 설정파일에 필요한 라이브러리 종류와 버전, 종속성 정보를 명시하여 필요한 라이브러리들을 설정파일을 통해 자동으로 다운로드 해주고 이를 간편히 관리해줌

소스코드를 바이너리코드로 컴파일

바이너리 코드를 패키징

테스트 실행프로덕션 시스템에 배포

 

2. Maven

- 자바 전용 프로젝트 Lifecycle 관리 목적 빌드 도구이며 Apache Ant 불편함을 해결하기 위해 만들어짐

- 빌드 중인 프로젝트, 빌드 순서, 다양한 외부 라이브러리 종속성 관계를 pom.xml파일에 명시하여 사용

- 외부저장소에서 필요한 라이브러리와 플러그인들을 다운로드 한다음, 로컬시스템의 캐시에 모두 저장함

 

 

3. Gradle

- Apacahe Maven과 Apache Ant에서 볼수 있는 개념들을 사용하는 대안으로써 나온 프로젝트 빌드 관리 툴

- Groovy 언어를 사용한 Domain-specific-language를 사용(설정파일을 xml파일을 사용하는 Maven보다 코드가 훨씬 간결)

- 2007년에 처음 개발되었고, 2013년에 구글에 의해 안드로이드 프로젝트의 빌드 시스템으로 채택됨

- multi-project 빌드를 도울 수 있도록 디자인됨

 

 

4. Maven VS Gradle

 

1) 빌드 접근 방식 차이

Gradle은 작업 의존성 그래프 기반 / Maven은 고정적이고 선형적인 단계의 모델 기반

 

2) 성능 측면

Gradle은 어떤 task가 업데이트되었고 안되었는지를 체크하기 때문에 incremental build 허용(👉🏻 빌드 시간 단축)

 

3) 프로젝트 설정

Gradle 은 설정 주입 방식 제공 / maven 의 경우 멀티 프로젝트에서 특정 설정을 다른 모듈에서 사용하려면 상속 필요

4) Gradle은 concurrent에 안전한 캐시 허용

 2개 이상의 프로젝트에서 동일한 캐시를 사용할 경우 서로 overwrite되지 않도록 checksum 기반의 캐시를 사용하고, 캐시를 repository와 동기화시킬 수 있음

5)  Gradle은 커스터마이징이 간편하기 때문에 고도화된 사용자 정의된 빌드 작성에 유리함

 

 

 

cf. Maven으로 설정된 프로젝트는 Gradle로 마이그레이션 가능