Ant,Maven,Gradle의 차이점을 알아보자.
2021, Mar 11
알아보게 된 이유.
최근 팀에 있는 소스를 빌드, 배포를 bitbucket,bamboo로 ToolChain을 하게 되면서, 궁금증이 생겨서 찾아보고 적어보게 되었다. 그냥 개인적으로 적어보게 되었다.
Spring 프로젝트를 Maven으로 전환하려고 하다보니, 지금 개발하고 있는 앱이 금융앱이었고, 프로젝트에서 필요한, 파트별로 자체적으로 만든 라이브러리들도 많았고, 이 때문에 라이브러리들에 많이 종속적이었다라는게 내가 본 현재 프로젝트 상태였다.
빌드도구들에 대해 알아보니, Ant, Maven, Gradle을 알게 되었고, Gradle은 학부시절 안드로이드를 하다보니 사용은 해봤지만, 기존 빌드 도구들과의 차이점이 무엇인가?가에 대해 궁금해졌고, 그리고 다른 빌드도구들을 사용하시는 개발자들이 사용을 하면서 겪고 느낀점을 블로그를 통해 읽게 되었다.
1. Apache ANT
Ant는 자바 프로그래밍 언어에서 사용하는 자동화된 소프트웨어 빌드 도구이다.
유닉스나 리눅스에서 사용되는 make와 비슷하나, 자바언어로 구현되어 있어 자바 실행환경이 필요하며 자바 프로젝트들을 빌드하는데 표준으로 사용된다고 한다.
다른 빌드 도구보다 역사가 오래되었고, 개발자가 원하는 것을 개발할 수 있다는 유연성에 큰 장점이 있다고한다.
장점
1. compile이 쉽고, deploy, publishing이 쉽다.
- 변경된 파일만 컴파일 한다.
2. 오픈소스
3. 환경변수 독립적
4. 다양한 IDE를 지원한다.
5. 빌드 파일을 XML 형태로 작성 -> 계층적으로 보기 쉽다.
6. 난해한 표기법이 없다.
단점
1. 디폴트 규칙을 정할 수 없다.
2. XML의 기본적인 지식이 필요하다.
3. 유연성이 높으나 프로젝트가 복잡해질 경우 각각의 빌드 과정을 이해하기 어렵다.
4. 스크립트의 재사용이 어렵다.
2. Apache Maven
Apache Ant의 대안으로 만들어졌다.
필요한 라이브러리들을 pom.xml에 정의해 놓으면 네트워크를 통해서 라이브러리들을 자동으로 받아준다. jar파일들을
공유하지 않아도 필요한 것들을 명시해놓으면 라이브러리들을 아주 쉽게 관리할 수 있다.
현재 회사에서는 Maven에 사용할 수 있는 Nexus Repository를 사용도 함께 한다. 망이 분리되어있는 환경에서 개발을 진행하다보니
외부 Repository에 접속하기 어려운 경우가 있었고, 외부 영향에 의해 라이브러리들이 다운받기 힘들어질수도 있으며, 무엇보다
메이븐에 올라와있지 않은 개발팀에서 사용하는 공용 라이브러리를 팀간에 공유 할 수 있기 때문이다.
장점
1. 라이브러리의 관리를 쉽게 할 수 있다.
2. 프로젝트의 작성부터, 프로젝트 라이프 사이클에 포함되는 각 테스트를 지원해준다.
3. war 파일 기반의 배포용으로도 자주 사용한다.
4. 작업 환경이 다른 개발자들이 소스코드를 공유하기 위해 메이븐을 사용하면 개발환경이 다르더라도 작업이 가능하다.
단점
1. 메이븐 프로젝트의 발전으로 라이브러리들이 빠르게 증가하고 있으나 , 3rd 파티 라이브러리등 미제공이 ㅇㅆ다.
2. 모든 내용이 pom.xml에 감기게 되므로 xml파일이 길고 장황하게 될 수 있다.
3. 전체적인 소프트웨어 빌드에 통용되는 라이프 사이클을 제공하고 있어서, 세부 항목, 또는 특화된 빌드 환경에 대한 지원이 미약하다.
3. Gradle
그루비를 이용한 빌드 자동화 시스템이다. 그루비(Groovy)는 자바에 파이썬, 루비, 스몰토크등의 특징을 더한 동적 객체 지향 프로그래밍 언어이다.
Ant와 Maven과 같은 이전 세대 빌드 도구의 단점을 보완하고 장점을 취합하여 만든 오픈소스로 공개된 빌드 도구이다.
Ant,Maven이 가진 장점들을 모아 만들었으며, 의존성 관리를 위해 다양한 방법을 제공하고 빌드 스크립트를 XML 언어가 아닌 DSL을 사용한다.
장점
1. Ant,Maven의 장접을 모아서 만들었다.
2. 빌드 스크립트 내용을 크게 줄일 수 있다.
3. 자바문법과 거의 같아서 쉽게 익힐 수 있다.
4. 그루비 문법을 넘어서 자체 문법을 제공한다 (DSL)
5. Configuraion Injection 방식을 사용해서 공통 모듈을 상속해서 사용하는 단점을 커버 했다.
- 설정 주입시 프로젝트의 조건을 체크할 수 있어서 프로젝트별로 주입되는 설정을 다르게 할 수 있다.
단점
1. 장점만 나열되어있어, 단점을 찾기 힘들었지만 찾아보자면.
2. 느리며 메모리를 많이먹는다.
4. 빌드를 하게 되면 중간의 생성물을 다량으로 File I/O를 시도한다. 그래서 무겁게 느껴진다고한다.