Ant, Maven, Gradle
모두 빌드 자동화를 위한 도구로, 요즘은 Ant는 거의 사용하지 않고 Maven Gradle를 주로 사용한다.
그 중에서도 Gradle이 시기적으로 가장 최근에 나온만큼 비교적 가장 뛰어난 성능과 유연함을 갖고있다.
Maven
우선 Maven부터 정리를 해보자면
메이븐은 Xml 기반으로
빌드, 문서화, 리포팅, 의존관계 관리, 소스코드 관리, 배포등의 기능을 하며
3가지 라이프 사이클을 갖는다.
1. Clean : 메이븐 빌드의 모든 산출물을 삭제
2. Build : 하단에 자세히 설명
3. Site : 프로젝트에 대한 문서 사이트를 생성할 수 있게 지원
2번 빌드가 디폴트 라이프 사이클로 크게
Compile > Test > Package > Install > Deploy
단계(Phase)로 구성된다.
Phase는 논리적인 빌드단계라고 볼 수 있으며
실제 실행 될 때는 각 phase에 연결 된 플러그 인이 수행하는 명령이 실행되는 것이다.

Phase들이 연결 되어 있는 플러그 인을 수행하는 명령을 Goal 이라고 한다. (Ant의 Target과 같은 개념)
디폴트 사이클의 Phase
1. process-resource : outputDirectory에 resource directory를 생성한다.
2. compile : 소스 코드를 컴파일 하여 클래스를 ouputDirectory에 생성한다.
3. test-compile : 테스트 코드를 컴파일 한다.
4. test : 테스트 코드를 실행, 테스트가 실패하면 빌드를 멈춘다.
단위테스트가 실패해도 빌드를 성공 시키려면 maven.test.skip 속성을 true로 설정하면 된다.
5. package : 패키지 실행 시 앞 4단계 순으로 실행된 다음
pom.xml의 패키징 값에 따라 압축한다. jar나 war 파일이 타겟 디렉토리 안에 생성된다.
6. install : 로컬 저장소에 패키지를 배포한다.
7. deploy : 원격 저장소가 등록되어 있다면 패키지를 배포한다.
메이븐의 단점?
1. 프로젝트가 커질 수록 pom.xml이 복잡해진다.
2, 라이브러리가 서로 의존하는 경우 복잡해진다.
Gradle
Maven과 Ant의 장점을 합쳐서 만든게 Gradle로
Gradle은 구글에서 공식 안드로이드 빌드 툴로 선택하기도 했다.
Gradle은 xml이 아닌 스크립트 언어인 그루비를 사용한다.

퍼포먼스적인 측면에서 확실히 큰 차이를 느낄 수 있는데
이 차이를 만들어내는 요소는
1. Incrementality : 작업 입출력을 추적해서 필요한 것들만 실행함으로써 작업을 최소화한다.
2. Build Cache : 같은 작업 입력에 대해서는 다른 빌드의 아웃풋을 재활용 한다.
3. Gradle Daemon : Gradle이 일어나는 인스턴스를 유지하고, 빌드가 끝난 뒤에도 백그라운드에서 대기하여
그래들 빌드 때마다 시간을 단축 할 수 있다.
Gradle의 장점
1. 그루비는 자바와 문법이 유사하여 자바 개발자가 접근하기 수월하다.
2. Gradle Wrapper를 사용하면 Gradle이 설치 되지 않은 시스템에서도 프로젝트를 빌드할 수 있다.
3. 의존성 관리가 메이븐보다 수월하다.
예를 들어
A를 사용하는데 B라이브러리가 필요하고, B가 사용하는데 C라이브러리가 필요할 때
Dependency에 A만 추가 해주면 B, C를 알아서 끌어온다.
4. Gradle은 설정을 통해 프로젝트 마다 각각 다른 라이브러리를 추가 할 수 있기 때문에
멀티 프로젝트에 Maven보다 유리하다.
Maven과 Gradle의 차이점에 대해서는 Gradle 홈페이지 에서 더 자세하게 확인 할 수 있다.
gradle.org/
Gradle Build Tool
Accelerate developer productivity. Gradle helps teams build, automate and deliver better software, faster.
gradle.org

'PROGRAMMING > SPRING' 카테고리의 다른 글
| [JUNIT] 간단한 테스트 케이스 만들기 (0) | 2021.07.07 |
|---|---|
| [SPRING] 객체지향 설계의 5원칙 SOLID (0) | 2021.06.27 |
| [SPRING] 서버 재 시작 없이 수정한 코드 반영하기 (0) | 2021.05.31 |
| [SPRING] 스프링 부트 프로젝트 간단하게 생성하기 (0) | 2021.05.10 |
| [PLUGIN] Lombok 설치 및 확인방법 (0) | 2021.05.03 |