spring initialeizr에서 프로젝트를 설정할 때 maven과 gradle이 있었다. 이번에 maven과 gradle이 무엇인지 알아보자.
1. 빌드(Build)
(1) 빌드(Build)란?
- Maven과 Gradle은 모두 빌드도구. 이를 이해하기 위해서는 먼저 빌드에 대해 알아야함
- 빌드는 소스코드 파일을 컴퓨터에서 실행할 수 있는 독립 소프트웨어 가공물로 변환하는 과정 또는 그에 대한 결과물을 의미함
- 즉, 우리가 작성한 소스코드(java), 프로젝트에서 쓰인 각각의 파일 및 자원 등(.xml, .jpg, jar, .properties)을 WAS가 인식할 수 있는 구조로 패키징하는 과정 및 결과물을 의미함
- 빌드 도구란 프로젝트 생성, 테스트 빌드, 배포 등의 작업을 위한 전용 프로그램을 의미함
- 빠른 기간 동안 계속해서 늘어나는 라이브러리의 추가, 프로젝트를 진행하며 라이브러리의 버전 동기화의 어려움 등을 해소하기 위해 등장함
- 즉, 빌드 자동화 도구
- Ant, Maven, Gradle이 여기에 해당
2. Maven
(1) Maven이란?
- 메이븐(Maven)은 자바용 프로젝트 관리 도구로 Apache Ant의 대안으로 만들어짐
- Apache Ant 역시 Java기반의 빌드도구로 다른 빌드 도구보다 오래되었음
- Ant는 개발자가 원하는 것을 개발할 수 있다는 유연성이라는 큰 장점이 있지만 프로젝트가 복잡해질 경우에는 각각의 Biuld과정을 이애하기 어렵다는 단점이 있음
- Maven은 프로젝트에 필요한 모든 Dependency를 리스트의 형식으로 Maven에게 알려 관리할 수 있도록 돕는 방식
- 즉, 프로젝트를 진행하면서 사용하는 수많은 라이브러리들을 관리해주는 도구임
(2) Maven 장단점
① 장점
- 여기서 그 라이브들과 연관된 라이브러리들까지 거미줄처럼 모두 연동되어 관리되어 같이 업데이트 되는 장점이 있음
- Ant와 달리 XML, remote repository를 가져올 수 있어 jar, class path를 다운로드 없이 선언만으로 사용이 가능함
② 단점
- 라이브러리가 서로 종속될 경우 XML이 복잡함
- 계층적인 데이터를 표현하긴 좋지만 플로우나 조건부 상황을 표현하기에는 어려움
- 편리하나 맞춤화된 로직 실행 어려움
3. Gradle
(1) Gradle이란?
- 빌드도구로 프로젝트 구성 및 관리, 테스트, 배포 등을 관리함
- 안드로이드 앱의 공식 빌드 시스템임
- JAVA, C/C++M Python 등을 지원함
- 빌트툴인 Ant Builder와 Groovy 스크립트 기반으로 만들어져 기존 Ant의 역할과 배포 스크립트의 기능을 모두 사용 가능함
- 자바 프로젝트에서 외부 라이브러리를 가져다 쓴다는 것은 외부 라이브러리의 jar를 가져와서 classpath에 추가하는 것
- buiild.gradle이라는 파일에 가져다 쓸 라이브러리의 이름, 버전을 명시하면 gradle이 알아서 jar파일을 다운 받고 추가해줌
- gradle은 오픈소스 빌드 자동화 툴
(2) Gradle 장단점
① 장점
- 설정주입방식구조로 Maven의 상속구조 보다 재사용 용이
- 빌드 속도가 Maven에 비해 10~100배 가량 빠름
- Groovy 언어를 이용해서 코드로서의 설정정보를 구성하여 구조적이고 가독성이 좋음
② 단점
4. Maven vs Gradle
- Maven과 Gradle의 장단점을 보면 알 수 있듯이 현재는 Gradle이 더 많이 쓰임
📚 Reference
MISTERY, https://sugerent.tistory.com/571 를 보고 정리한 글입니다.
갓대희's 작은공간 ,https://goddaehee.tistory.com/199 를 참고하여 작성하였습니다.