스프링부트를 시작하며 자바 빌드도구인 Ant, Maven, Gradle에 대해 궁금해 졌다. (이번 글은 작성자 개인이 빌드 도구 각각에 대한 이해와특징을 알아보기 위해 작성된 것이다.)
웹/안드로이드 등등 프로그래밍 개발이 발전하며 프로젝트 생성에 필요한 라이브러리도 점점 많아지게 되었다. 이렇게 많아진 라이브러리를 직접 사이트에서 다운로드 받아 시스템에 추가하는 방법이 있지만 번거로움이 뒤따른다. 여기서 빌드도구(Build Tool)가 등장한다. 빌드도구란, 1)빠른 기간동안에 계속해서 늘어나는 라이브러리의 추가와 2)프로젝트를 진행하며 라이브러리의 버전을 동기화하기 어렵기 때문에 등장하였다. 초기의 JAVA 빌드 도구로 Ant라는 도구를 많이 사용하였으나 늘어나는 라이브러리를 관리하기 위해 Maven, Gradle등의 기존 Ant를 보완한 빌드 도구들도 생기게 되었다. 다음 각각의 빌드도구들에 대한 특성을 공부해 보며 내 멋대로(?) 정리해 보았다.
1. Apache ANT
Ant는 Java 기반의 빌드 도구로 다른 빌드 도구보다 역사가 오래되었다. Ant는 개발자가 원하는 것을 개발할 수 있다는 유연성에 큰 장점이 있다.
[ANT의 특징]
- 각 프로젝트에 대한 XML기반 빌드 스크립트 개발
- 형식적인 규칙이 없음 : 결과물을 넣을 위치를 정확히 알려줘야 하며, 프로젝트에 특화된 Target과 Dependency를 이용해 모델링
- 절차적 : 명확한 빌드 절차 정의가 필요
- 생명주기를 갖지 않기 때문에 각각의 target에 대한 의존관계와 일련의 작업을 정의해 주어야 함
[ANT의 단점]
- 유연성이 높으나 프로젝트가 복잡해질 경우 각각의 Build과정을 이해하기 어려움
- XML, Remote Repository를 가져올 수 없었음 (IVY 도입)
- 스크립트의 재사용이 어려움
2. Apache Maven
Maven은 프로젝트에 필요한 모든 'Dependency (종속성)'를 리스트의 형태로 Maven에게 알려 관리 할 수 있도록 돕는 방식을 말한다.
- Dependency를 관리하고, 표준화된 프로젝트(Standardized project)를 제공
- XML, remote repository를 가져 올 수 있음 : 개발에 필요한 종속되는 'jar', 'class path'를 다운로드 할 필요 없이 선언만으로 사용 가능
- 상속형 : 하위 XML이 필요 없는 속성도 모두 표기
과 같은 기능을 한다. 즉, 'POM.xml' 이라는 Maven 파일에 필요한 'Jar', 'Class Path'를 선언해 주면 직접 다운로드 할 필요 없이 Maven은 Repository에서 필요한 모든 파일들을 해당 프로젝트로 불러와 준다. 이러한 장점에도 불구하고, Maven은 몇가지 단점이 있는데 그것은 바로 아래와 같다.
- 라이브러리가 서로 종속할 경우 XML이 복잡해짐
- 계층적인 데이터를 표현하기에 좋지만, 플로우나 조건부 상황을 표현하기엔 어려움
- 편리하나 맞춤화된 로직 실행이 어려움
3. Apache Gradle
최근 소프트웨어개발 범위의 변화에 따라 빌드의 자동화에대한 요구도증가하게 되었다. Gradle은 JVM 기반의 빌드 도구로 기존의 Ant와 Maven을 보완하였다. 따라서 JAVA 혹은 Groovy를 이용해 logic을 개발자의 의도에 따라 설계할 수 있다.
- 오픈소스기반의 build 자동화 시스템으로 Groovy 기반 DSL(Domain-Specific Language)로 작성
- Build-by-convention을 바탕으로함: 스크립트 규모가 작고 읽기 쉬움
- Multi 프로젝트의 빌드를 지원하기 위해 설계됨
- 설정 주입 방식 (Configuration Injection)
따라서 초기 프로젝트 설정에 드는 시간을 절약할 수 있으며 기존의 Maven이나 Ivy등과 같은 빌드 도구들과도 호완이 가능하다는 점이다.
4. 정리
스프링부트 프로젝트를 시작하며 처음 마주친 '빌드 도구'에 대해 먼저 차근차근 찾아보았다. 앞에서 설명한 Ant, Maven, Gradle 외에도 설명에 포함하지 못한 Ant와 Groovy가 합쳐진 Gant, Ant+Ivy 등 다양한 빌드 툴이 있었다. 각각의 빌드도구 마다 장·단점이 있기에 무엇 하나 좋다 나쁘다를 따지기 어려운 것 같다. 개발하는 사람의 개발 목적에 따라 선택하는 것이 가장 맞는것 같다.
[참고자료]
- http://giyatto.tistory.com/100
- http://blog.embian.com/32
- http://www.allofsoftware.net/2008/11/blog-post_35.html
- http://www.javafaq.nu/java-article1168.html
- http://www.drdobbs.com/jvm/why-build-your-java-projects-with-gradle/240168608?&elq=6141ae3e07314f5d850d7e746b53c52b&elqCampaignId=5806
"스프링부트 프로젝트를 시작하며 처음 마주친 '빌드 도구'에 대해 먼저 차근차근 찾아보았다."
역시 비슷한 시기에 비슷한 관심사를 갖고 있구나 하고 느낀다.
MSA로 가면서 관심이 가는게 Spring Boot개발하기 위해 앞으로는 자바 버전을 뭘써야하지?
비용은 엄청난데.. OracleJDK와 OpenJDK 돈내고 사용하기엔 터무니 없는 가격..
그래 선택했어.. Maven말고 뭔가 있을까? 뭐지 사람들이 왜 자꾸 Gradle 을 말하지?
한국사람들은 어떤 생각을 할까? 찾아 볼까? 이래 왔음..
Reference: https://jj-one-a-week.blogspot.com/2017/05/ant-maven-gradle.html
'Programming > Java' 카테고리의 다른 글
[Java] 예외처리 - try~catch 문, throws문, 예외의 종류 (0) | 2020.10.08 |
---|---|
Mac에서 Java 설치하기 (설치, 환경변수 설정) (0) | 2019.08.07 |
Maven vs Gradle (0) | 2019.08.07 |
[JDBC] JDBC, JPA/Hibernate, Mybatis의 차이 (0) | 2019.08.02 |
Spring Boot, MySQL, JPA, Hibernate Restful CRUD API (0) | 2019.08.02 |
댓글