본문 바로가기

IT 관련/IT 기타

아파치 메이븐

아파치 메이븐(Apache Maven)은 자바용 프로젝트 관리 도구입니다. 아파치 앤트(Ant)의 대안으로 만들어졌습니다.

아파치 라이선스로 배포되는 오픈소스 소프트웨어입니다.

메이븐은 컴파일과 빌드를 동시에 수행하는 것으로 알려졌습니다.

메이븐은 테스트를 병행하거나 서버측 배포(Deploy) 자원을 관리할 수 있는 환경을 제공합니다.

또한 라이브러리 관리 기능도 내포하고 있습니다.

메이븐은 필요한 라이브러리를 pom.xml에 정의해 놓으면 개발자가 사용할 라이브러리뿐만 아니라 해당 라이브러리가 작동하는 데에 필요한 다른 라이브러리들까지 관리하여 네트워크를 통해서 자동으로 Download 해주게 됩니다.

 

메이븐은 중앙 저장소를 통한 자동 의존성 관리를 중아 저장소(아파치 재단에서 운영 관리함)는 라이브러리를 공유하는 파일서버라고 볼 수 있고, 메이븐은 자기 회사만의 중앙 저장소를 구착할 수도 있습니다.

자바로 개발을 하다 보면 다양한 라이브러리가 필요하게 됩니다.

setting.xml 또는 pom.xml 파일에 필요한 라이브러리 내용을 적어놓으면 메이븐이 알아서 자동으로 다운로드해주고 관리해줍니다.

 

빌드 도구란?

빌드 도구는 프로젝트의 생성, 테스트 빌드, 배포 등의 작업을 위한 전용 프로그램이며 빠른 기간 동안 계속해서 늘어나는 라이브러리 추가와 동기화의 어려움을 관리하기 위해 등장했습니다.

초기의 자바(java) 빌드 도구로 앤트를 많이 사용하였으나 최근 빌드 도구가 생겨나 메이븐(Maven)이 많이 쓰였고 현재는 그레이들(Gradle)이 많이 쓰입니다.

 

장점

- 컴파일과 빌드를 동시에 수행할 수 있다.

- 서버의 Deploy 자원을 관리할 수 있는 환경을 제공한다.

- pom.xml 파일을 통해 관리하므로 개발, 유지보수 측면에서 오픈소스 라이브러리, 프로젝트 관리가 용이하다.

- IDE에 종속된 부분들을 제거할 수 있다.

- Maven Profile 기능을 통해 배포 설정 파일을 관리하고 배포 파일을 생성할 수 있다.

 

단점

- 특정 플로그인 설정이 조금만 달라져도 불필요한 설정이 길어지고 중복, 가독성 저하가 발생하여 재사용성 및 확장성이 떨어져 유지보수가 어려워진다.

- 특정 프로그인 설정이 조금만 달라져도, 해당 설정을 분리해서 중복 기술할 때가 발생한다.

- 메이븐에서 기본적으로 지원하지 않는 빌드 과정을 추가해야 하는 경우 상당히 복잡해진다.

 

 

이러한 단점들 때문에 최근에는 그레이들(Gradle)이라는 새로운 빌드 도구가 등장하였습니다.

Gradle은 안드로이드 애플리케이션(Android Application)의 기본 빌드 툴로 채택되었습니다.

 

메이븐의 기본 구조는 아래와 같습니다.

application-core
    Lpom.xml
    Lsrc
        Lmain
            Ljava
                Lcom.package.dir
            Lresources
        Ltest
            Ljava
                Lcom.package.dir
            Lresources

 

라이프사이클(Life Cycle)

메이븐(Maven) 프레임워크(Framework)이기 때문에 동작 방식이 정해져 있습니다.

미리 정의하고 있는 빌드 순서가 있습니다. 이를 라이프사이클이라고 합니다.

 

1. default(Build) : 일반적인 빌드 프로세스를 위한 모델

2. Clean :  빌듯이, 생성되었던 파일들을 삭제하는 단계

3. Validate :  프로젝트가 올바른지 확인하고 필요한 모든 정보를 사용할 수 있는지 확인하는 단계

4. Compile : 프로젝트의 소스코드를 컴파일하는 단계

5. Test :  단위 테스트를 수행하는 단계

6. Package : 실제 컴파일된 소스 코드와 리소스들을 jar, war 등의 파일로 묵어 배포를 위한 패키지로 만드는 단계

7. Verify : 통합 테스트 결과에 대한 검사를 실행하여 품질 기준을 충족하는지 확인하는 단계

8. Install :  패키지를 로컬 저장소에 설치하는 단계

9.  Site : 프로젝트 문서와 사이트 작성, 생성하는 단계

10.  Deploy :  만들어진 package를 원격 저장소에 release 하는 단계

 

빌드 순서는 compile > test > package입니다.

compile :  src/main/java 디렉터리 하위의 모든 소스코드가 컴파일됩니다.

test : src/test/java, src/test/resources 테스트 자원 복사 및 테스트 소스 코드가 컴파일됩니다.(단위 테스트 프레임워크 junit를 사용하여 테스트 단계를 거치기 위해 의존성 설정을 해주게 됩니다.)

package : 컴파일과 테스트가 완료된 후, jar, war 파일 형태로 압축하는 작업을 말합니다.

 

설정 관련 파일

1. settings.xml

- 메이븐 빌드 툴과 관련한 설정 파일

- maven_home/conf 디렉터리에 위치(메이븐 설치 시 기본 제공)

* 메이븐을 빌드할 때 의존 관계에 있는 라이브러리, 플러그인을 중앙 저장소에서 개발자 PC로 다운로드하는 위치(로컬 저장소)의 기본 설정 'USER_HOME/. m2/repository'인데 settings.xml에 원하는 로컬 저장소의 경로를 지정, 변결 할 수 있습니다.

 

2. POM(Project Object Model) - 프로젝트 객체 모델

- pom은 pom.xml 파일을 말하며 pom.xml은 메이븐을 이용하는 프로젝트의 root에 존재하는 xml파일(한 개의 프로젝트 최상위 디렉터리에 pom.xml  파일이 생성됨)

- 메이븐의 기능을 이용하기 위해서 pom이 사용되고 내용을 통해서 프로젝트의 모든 설정, 의존성을 알 수 있다.

-  설정 파일명을 다른 이름으로 지정할 수 있음.(mvn -f 파일명. xml test지만 지양)

 

그럼 이만.