본문 바로가기
Dev/Spring Boot

Java Build Tool - Maven, Gradle

by yeonise 2022. 8. 3.

빌드 자동화 도구는 프로젝트에서 필요한 파일들을 자동으로 인식하여 빌드해준다. 뿐만 아니라 빌드 전에 프로그램 개발이 제대로 되었는지 소스 코드를 컴파일, 테스트, 분석하는 기능도 갖고 있다. 프로젝트의 정보 관리, 테스트 빌드, 배포 등의 작업도 진행한다. 외부 라이브러리를 참조하여 자동으로 다운로드 및 업데이트 관리를 해주는데, 이 기능이 우리가 빌드 자동화 도구를 사용하는 가장 주된 목적이라고 할 수 있다. 자바의 대표적인 빌드 도구에는 Ant, Maven, Gradle 세 가지가 있다.


1. Maven

 

Maven은 자바의 대표적인 관리 도구였던 Ant를 대체하기 위해 개발되었다. 프로젝트의 외부 라이브러리를 쉽게 참조할 수 있도록 porm.xml 파일에 명시하여 관리하며, 참조한 외부 라이브러리에 연관된 다른 라이브러리도 자동으로 관리된다.

 

기존에 사용하던 Ant는 빌드의 기능만 가지고 있으며, 그 외의 모든 기능들은 개발자가 직접 수동으로 관리해야 한다. 따라서 자연스럽게 자동으로 라이브러리를 관리해주는 기능이 추가된 Maven을 사용하게 되었다.

 

Ant와 Maven의 비교

Ant Maven
XML 기반의 빌드 스크립트이다. XML 기반의 빌드 스크립트이다.
라이프 사이클을 갖지 않아 각각의 결과물에 대한 의존관계 등을 정의해야 한다. 라이프 사이클과 프로젝트 객체 모델이란 개념이 도입되었다.
간단하고 사용하기 쉽다. porm.xml로 편하게 Dependency를 관리할 수 있다.
유연하지만 대규모 프로젝트에서 복잡해지는 경향이 있다. 라이브러리가 서로 의존하는 경우에 복잡해지는 경향이 있다.
자유롭게 빌드 단위를 지정할 수 있다. Ant의 장황한 빌드 스크립트를 개선했다.

 

Maven에서 porm.xml의 역할

  • 프로젝트 정보 관리
  • 해당 프로젝트에서 사용하는 외부 라이브러리 관리
  • 해당 프로젝트의 빌드 관련 설정 관리

 

Maven 대표 태그

  • modelVersion : Maven의 버전을 의미
  • groupId : 프로젝트 그룹 ID를 뜻하며, 일반적으로 대표하는 사이트 도메인을 역순으로 적어 사용
  • artifactId : groupId 외에 다른 프로젝트와 구분할 수 있는 프로젝트 ID를 작성
  • version : 프로젝트의 버전을 의미하며 개발 단계에 따라 구분하여 작성
  • name : 프로젝트의 이름
  • description : 해당 프로젝트의 간략한 설명을 작성
  • properties : porm.xml 파일 내에서 빈번하게 사용되는 중복 상수를 정의하는 영역으로, 해당 영역의 상수를 사용하기 위해서는 ${태그명}의 형태로 사용
  • dependencies : 해당 프로젝트에서 의존성을 가지고 사용하는 라이브러리를 정의하는 영역으로, 각 라이브러리마다 <dependency> 태그를 사용하여 구분
  • build : 프로젝트 빌드와 관련된 정보를 설정하는 영역

 

Maven Life Cycle

생명주기 설명
clean 빌드시 생성되었던 파일들을 모두 삭제한다.
validate 프로젝트가 올바른지 확인하고 필요한 모든 정보를 사용할 수 있는지 확인한다.
complie 프로젝트의 소스코드를 컴파일한다.
test 단위 테스트를 수행한다. 테스트 실패시 빌드 실패로 처리한다.(생략 가능)
package 실제 컴파일된 소스코드와 리소스들을 jar, war 등의 파일 배포를 위한 패키지로 만든다.
verify 통합 테스트 결과에 대한 검사를 실행하여 품질 기준을 충족하는지 확인한다.
install 패키지를 로컬 저장소에 설치한다.
site 프로젝트 문서와 사이트를 생성한다.
deploy 만들어진 패키지를 원격 저장소에 Release 한다.

Maven은 미리 정해진 동작 방식과 미리 정의된 빌드 순서가 있다. 이를 라이프 사이클이라고 하며, 단계에 따라 순차적으로 빌드가 실행되어 개발자의 명령을 수행한다.

 


2. Gradle

 

Gradle은 Groovy 스크립트를 활용한 빌드 자동화 도구이다. Ant와 Maven과 같은 이전 세대 빌드 도구의 단점을 보완하고 장점을 취합하여 만든 오픈소스로 공개된 빌드 도구이다. 안드로이드 프로젝트의 표준 빌드 시스템으로 채택되어 사용되고 있으며, 멀티 프로젝트의 빌드에 최적화하여 설계되었다.

 

Maven의 pom.xml을 Gradle 용으로 변환할 수도 있으며, Maven의 중앙 저장소도 지원하기 때문에 라이브러리를 그대로 가져다 사용할 수 있다.

 

Gradle과 Maven의 비교

Gradle에 비해 Maven이 점유율이 더 높은 상황이지만, 점차 Gradle의 점유율이 오르는 중이다.
Gradle에 비해 Maven의 성능이 떨어진다.
Maven에 비해 Gradle이 대규모 프로젝트에서의 성능이 좋다.
Maven은 porm.xml 파일을 사용하고 Gradle은 build.gradle 파일을 사용한다.

 

Gradle 대표 용어

  • repositories : 참조할 라이브러리가 저장된 위치 등을 설정
  • mavenCentral : 기본 Maven Repository를 사용하겠다는 의미
  • dependencies : 외부 라이브러리 사용을 위한 의존성을 설정

 

 

 

reference

AroudHub Studio

MadPlay

 

 

 

관련된 이전 글

 

소프트웨어 빌드 (Software Build) - 빌드 자동화

소프트웨어 빌드는 소스 코드 파일을 컴퓨터나 휴대폰에서 실행할 수 있는 독립 소프트웨어 가공물로 변환하는 과정을 말하거나 그에 대한 결과물을 말한다. 소프트웨어 빌드에 있어 가장 중요

jamstorage.tistory.com

 

댓글