[Spring] Maven - JAVA 프로젝트 관리 도구
Maven이란?
프로젝트의 전체적인 라이프 사이클을 관리하는 자바용 프로젝트 관리 도구
프로젝트 객체모델(Project Object Model)이라는 개념을 바탕으로
프로젝트의 의존성 관리, 라이브러리 관리, 라이프 사이클 관리 기능을 제공하는 프로젝트 관리 도구로써
플러그인을 기반으로 소스코드로부터 배포 가능한 산출물을 만들어내는 빌드 기능 제공한다.
웹 애플리케이션을 구현할 때 이클립스에서 웹 프로젝트를 직접 생성한 후 스프링 기능에 필요한 라이브러리를 직접
다운로드하여 사용했는데, 이런 경우 스프링 버전이 업데이트될 때마다 관련 기능의 라이브러리를 일일이 수정해야하고, 라이브러리의 기능 사용법이 달라지면 소스도 같이 수정해주어야하는 번거로움이 있었다.
메이븐은 이러한 번거로움을 해결해주는 역할로써 자동으로 스프링의 라이브러리 기능을 관리하면서 프로그램을 개발할 수 있도록 도와주는 관리 도구이다.
메이븐은 프로젝트 구조와 내용을 기술하는 선언적 접근 방식의 오픈 소스 빌드 툴이다.
메이븐을 사용하면 프로젝트 종속 라이브러리들과 그 라이브러리에 의존하는 Dependency 자원까지 관리할 수 있으며,
컴파일과 동시에 빌드를 수행할 수 있을 뿐만 아니라 관련된 라이브러리도 일관성 있게 관리할 수 있다.
Maven 특징
- pom.xml 설정 파일에 주입된 라이브러리를 관리하고, 빌드 및 배포 시 로컬 및 원격 저장소(Repository)에서
선언된 라이브러리들을 다운받아 사용하며, 선언된 라이브러리 뿐만 아니라 해당 라이브러리 작동에 필요한
하위 라이브러리까지 네트워크를 통해 자동으로 추가해준다. - 중앙 저장소를 통한 자동 의존성 관리를 해준다. (중앙 저장소란? 라이브러리를 공유하는 파일 서버)
- 프로젝트 전체 내용에 대한 기술 및 설정을 담당하는 pom.xml 설정 파일과
라이브러리 관리에 대한 dependency / repository 관리 모델, 컴파일, 테스트, 패키징 등
빌드 생명 주기를 다루는 라이프 사이클 및 관련 플러그인들과 연동을 다루는 부분으로 구성된다.
pom.xml 설정 파일에 dependency 주입
Maven Dependencies 폴더에 주입된 라이브러리가 추가된 것 확인
Maven Life Cycle
1) Life Cycle (생명 주기)
Maven의 동작 방식은 일련의 단계(Phase)에 연계된 작업(goal)을 실행하는 것이며 논리적인 작업 흐름 단계의 집합이다.
- Clean : 빌드 시 생성되었던 파일들을 삭제
- Validate : 프로젝트가 올바른지 확인하고 필요한 모든 정보를 사용할 수 있는지 확인
- Compile : 프로젝트의 소스 코드를 컴파일
- Test : 단위(유닛) 테스트 수행 (테스트 실패 시 빌드 실패로 처리, 스킵 가능)
- Package : 실제 컴파일 된 소스 코드와 리소스들을 jar, war 등의 파일 배포를 위한 패키지로 만듦
- Verify : 통합 테스트 결과에 대한 검사를 실행하여 품질 기준을 충족하는지 확인
- Install : 패키지를 로컬 저장소에 설치
- Site : 프로젝트 문서와 사이트 생성
- Deploy : 만들어진 패키지를 원격 저장소에 Release
※ 최종 빌드 순서
compile -> test -> package
2) Phase (단계)
Phase란 Build Life Cycle의 각각의 단계를 의미
Phase는 의존 관계를 가지고 있어 해당 Phase가 수행되려면 이전 단계의 Phase가 모두 수행되어야 한다.
즉, 모든 빌드 단계는 이전 단계가 성공적으로 실행되었을 때 실행된다는 것이 Dependency이다.
3) Goal (작업)
특정 작업, 최소한의 실행 단위로써, 하나의 플러그인에서는 여러 작업을 수행할 수 있도록 지원하며
플러그인에서 실행할 수 있는 각각의 기능을 goal이라고 한다.
(즉, 플러그인은 goal의 집합이다.)