Maven 과 Gradle 이란?
빌드 관리 도구
빌드 :
소스코드 파일을 컴퓨터에서 실행할 수 있는 독립적인 형태로 변환하는 과정·결과
소스코드, 프로젝트에 쓰인 각각의 파일·자원을 JVM이나 톰캣 같은 WAS가 인식할 수 있도록 패키징하는 과정 & 결과물
소스코드 컴파일하여 .clss로 변환, resource를 .class가 참조할 수 있는 적절한 위치로 이동, META-INF와 MANIFEST.MF들을 하나로 압축하는 과정.
소스코드에서 애플리케이션 생성하면서 여러 외부 라이브러리 사용하는데,
빌드관리도구는 사용자가 라이브러리를 관리할 필요없게 필요한 라이브러리들을 자동으로 관리함.
작업
1. 전처리 - 종속성 다운로드.
2. 컴파일 - 소스코드를 바이너리 코드로 컴파일.
3. 패키징 - 바이너리코드를 패키징함.
4. 테스트
5. 배포 - 프로덕션 시스템에 배포.
도구
Maven, Gradle, Ant ···
Maven
Java 전용 프로젝트 관리 도구.
Lifecycle 관리 목적 빌드 도구.
Apache Ant의 대안으로 만들어짐.
아파치 라이센스로 배포되는 오픈소스 소프트웨어.
+) Apache Ant : 비교적 자유도가 높다. ( 사용자가 정해야될 것이 많다. )
Maven은 라이프사이클이 정해졌고, 전반적 프로젝트 관리 기능이 있다. ( Build Tool + Project Management )
특징
1. Lifecyle 관리 도구 → 정해진 Lifecycle에 의해 작업을 수행. ( 전반적인 프로젝트 관리 기능을 포함함. )
clean - validate - compile - test - package - verify - install - site -deploy
clean : 빌드 시 생성됐었던 파일들을 삭제.
validate : 프로젝트가 올바른지 확인, 필요한 모든 정보가 사용 가능한지 확인.
compile : 프로젝트 소스코드 컴파일.
test : 단위 테스트를 수행함. 실패 시 '빌드 실패' 처리. 스킵 가능.
package : 실제 컴파일된 소스 코드와 리소스들을 jar, war등 파일의 배포를 위한 패키지로 만듦.
verify : 통합 테스트 결과에 대해 검사하여 품질 기준 충족 여부를 확인함.
site : 프로젝트 문서와 사이트를 작성, 생성.
deploy : 만들어진 패키지를 원격 저장소에 release.
2. 필요한 라이브러리를 pom.xml에 정의함. → "프로젝트 모델링"
pom : Project Object Model
▶프로젝트 정보 ( 이름, 라이센스 )
▶빌드 설정 ( 소스, 리소스, 라이프사이클 별 실행한 plugin 등 빌드 관련 설정 )
▶빌드 환경 ( 사용자 환경 별로 달라질 수 있는 프로필 정보 )
▶pom 연관 정보 ( 의존 프로젝트, 모듈, 상위 프로젝트 ··· )
Gradle
Maven을 대체할 수 있는 프로젝트 구성 관리 · 범용 빌드 툴
Ant Builder와 Groovy Script 기반으로 구축되어 기존 Ant 역할과 배포스크립 기능 모두 사용 가능.
스프링부트와 안드로이드에서 사용됨.
빌드 속도가 Maven보다 10~100배 가량 빠름.
Java, C, C++, Python 등 지원함.
Groovy
JVM에서 실행되는 스크립트 언어.
소스코드 컴파일 필요 없음.
Java와 호환됨. Java class file들을 Groovy class로 사용 가능함.
Java 문법과 유사하여 빌드 처리를 관리할 수 있음.
특징
1. 가독성이 좋다 : 코딩에 의한 '간결한 정의' 가능.
2. 재사용 용이 : 설정 주입 방식을 사용해서.
3. 구조적 장점 : Build Script를 Grooby 기반 DSL을 사용해서 코드로써 설정정보를 구성함.
4. 편리함 : Gradle 설치 없이 Gradle wrapper이용해서 빌드를 지원함.
5. 멀티 프로젝트 : 멀티프로젝트를 지원하기 위해 설계된 빌드 관리 도구임.
6. 지원 : Maven을 완전 지원함.
Maven 과 Gradle 비교
스크립트 길이와 가독성 면에서 Gradle이 우세함.
빌드, 테스트 실행 결과 Gradle이 더 빠름 ( 캐시를 사용하므로 테스트를 반복할 경우 속도 차이가 더 커짐 )
의존성이 늘어날수록 스크립트 품질 차이가 커진다.
- Maven : 멀티 프로젝트에서 특정 설정을 다른 모듈에서 사용하려면 상속받아야 함.
- Gradle : 설정 주입 방식을 사용하므로, 멀티 프로젝트에 적합함.