빌드 관리 도구란?
- 빌드 : 소스코드 파일을 컴파일에서 실행할 수 있게 변환하는 과정 또는 결과물
- 빌드 관리 도구 : 컴파일 과정에서 필요한 라이브러리들을 자동으로 관리해주는 도구
- 최근에는
Maven
과Gradle
이 많이 사용된다.
빌드 관리 도구가 수행 하는 작업
- 종속성 다운로드
- 소스코드를 바이너리코드로 컴파일
- 바이너리 코드를 패키징
- 테스트 실행
- 프로덕션 시스템에 배포
메이븐(Maven)
메이븐(Maven)이란?
- 자바용 프로젝트 Lifecycle 관리 목적 빌드 도구
아파치 Ant
의 대안으로 만들어졌다. → 스크립트 작성이 많고, 라이브러리 의존관리가 어려움- 아파치 라이센스로 배포되는 오픈 소스 소프트웨어
메이븐의 특징
- LifeCycle : 정해진 Lifecycle에 의하여 작업을 수행, 전반적인 프로젝트 관리 기능을 포함하고 있다.
- 프로젝트 모델링 : Maven은 필요한 라이브러리를
pom.xml
에 정의한다. - 플러그인을 통한 전역적인 재사용 : Maven은 빌드에 대한 대부분의 책임을 각 플러그인에 위임한다. 플러그인들은
Maven저장소(Repository)
에 저장된다.
메이븐 LifeCycle
- Clean : 이전 빌드에서 생성된 파일들을 삭제하는 단계
- Validate : 프로젝트가 올바른지 확인학고 필요한 모든 정보를 사용할 수 있는 지 확인하는 단계
- Compile : 프로젝트의 소스코드를 컴파일하는 단계
- Test : 유닛(단위) 테스트를 수행하는 단계(테스트 실패시 빌드 실패로 처리, 스킵 가능)
- Package : 실제 컴파일된 소스 코드와 리소스들을 jar등의 배포를 위한 패키지로 만드는 단계
- Verify : 통합테스트 결과에 대한 검사를 실행하여 품질 기준을 충족하는지 확인하는 단계
- Install : 패키지를 로컬 저장소에 설치하는 단계
- Site : 프로젝트 문서를 생성하는 단계
- Deploy : 만들어진 Package를 원격 저장소에 release하는 단계
메이븐 설정파일
POM
: Maven의 기능을 이용하기위해 사용하는 xml문서- 프로젝트 마다 1개씩 가진다.
- 필요한 라이브러리를
pom.xml
에 정의시, 라이브러리 실행, 설치에 필요한 다른 라이브러리 관리 및 네트워크를 통한 다운로드를 해 준다.
pom.xml
의 주요 기능- 프로젝트 정보 : 프로젝트의 이름, 라이센스 등
- 빌드 설정 : 소스, 리소스, 라이프사이클별 실행한 플러그인 등 빌드와 관련된 성질
- 빌드 환경: 사용자 환경 별로 달라질 수 있는 프로파일 정보
- pom 연관 정보 : 의존 프로젝트(모듈), 상위 프로젝트, 포함하고 있는 하위 모듈 등
그래들(Gradle)
그래들(Gradle)이란?
- Maven을 대체할 수 있는 프로젝트 구성 관리 및 범용 빌드 툴
Ant Builder
와Groovy Script
를 기반으로 구축되어 기존 Ant의 역할과 배포 스크립트의 기능을 모두 사용 가능- 스프링부트와 안드로이드에서 사용
- JVM에서 사용되는 스크립트 언어
- Java와 호환이 되며, Java클래스 파일을 그대로 Groovy 클래스 파일로 사용 가능.
그래들(Gradle)의 특징
- 간결함 : Maven의 xml의 문서의 양이 비대하다는 단점을 보완하여 코딩에 의한 간결한 정의가 가능하다.
- 재사용에 용이 : 프로젝트 설정 주입방식(Configuration Injection)으로 정의하여 Maven의 상속 구조보다 재사용에 용이
- 구조적인 장점 :
Build Script
를 xml이 아닌Groovy
기반의DSL(Domain Specific Language)
을 사용하여 코드로서 설정정보를 구성하기 때문에 구조적인 장점이 있다. - 편리함 : Gradle 설치 없이
Gradle Wrapper
를 이용하여 빌드를 지원 - 멀티 프로젝트 지원 : 멀티 프로젝트 빌드를 지원하기 위해 설계된 빌드 관리 도구이다.
- 지원 :
Maven
과Ivy repository
를 완전 지원
그래들(Gradle) 설정 파일
build.gradle
- 빌드에 대한 모든 기능을 정의, 환경 설정, 빌드 방법, 라이브러리 정보를 기술하여 프로젝트의 관리환경을 구성
setting.gradle
- 프로젝트 구성을 설정할 떄 작성하는 파일
- 프로젝트간의 의존성 및 멀티 프로젝트를 구성할 때 사용
- 싱글 프로젝트의 경우 생략 가능
그래들 LifeCycle
- 초기화(initialization) : 빌드 대상 프로젝트를 결정하고 각각에 대한 Project객체를 생성한다. settings.gradle 파일에서 프로젝트 구성한다.
- 구성(Configuration) : 빌드 대상이 되는 모든 프로젝트의 빌드 스크립트를 실행한다.
- 실행(Execution) : 구성 단계에서 생성하고 설정된 프로젝트의 태스크 중에 실행 대상을 결정한다. gradle 명령행에서 지정한 태스크 이름 인자와 현재 디렉토리를 기반으로 태스크를 결정하여 선택된 태스크들을 실행한다.
결론
Gradle은 Ant의 유연한 구조정 장점 및 Maven의 편리한 의존성 관리 기능을 합쳐 놓은형태에 성능 까지 더해지면서 대세 빌드 관리 도구가 되었다.
또한 gradle은 Groovy언어를 사용하면서, Maven의 xml문서보다 가독성이 좋다.
SpringBoot를 공부하면서, gradle살짝 사용해 보았었는데, 기존의 Maven을 알아볼 수 있는 기회가 되었다.
참고
https://mylupin.tistory.com/39
https://velog.io/@alicesykim95/Maven%EA%B3%BC-Gradle%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90
반응형