 |
|
메이븐 2 개요
메이븐은 아파치 소프트웨어 재단의 최상급 오픈소스 프로젝트이며 원래는 자카르타 터빈(Jakarta Turbine) 프로젝트의 복잡한 빌드 과정을 관리하기 위해 만들어졌다. 이렇게 조촐하게 시작했기 때문에 소수의 사람들과 오픈소스 개발 프로젝트에서만 메이븐을 빌드 시스템으로 사용했다. 하지만 빠르게 개선되어 현재 버전 2까지 나오면서 메이븐은 단일 팀 프로젝트에 최적화된 빌드 도구에서 대부분의 소프트웨어 개발 시나리오에 꼭 필요한 범용 빌드 관리 시스템까지 다양하게 사용하고 있다.
메이븐 2를 아주 간단하게 설명하면 다음과 같다.
- 프로젝트의 전형적인 빌드 방법을 이해한다.
- 프로젝트 빌드를 단순화하고 수월하게 하기 위한 내장된 프로젝트 지식(built-in project knowledge)을 사용한다.
- 사용자가 복잡한 프로젝트의 구조와 빌드 과정에서 발생할 수 있는 다양한 요인들 이해하는 데 도움을 주도록 내장된 프로젝트 지식을 활용한다.
- 오늘날 세계적으로 연결되어 있는 프로젝트 팀들과 조화를 이루는 검증된 종속성 관리 시스템을 미리 확인하고 구성하도록 도와 준다.
- 간단한 프로젝트에 대해서는 단순하고 사용자를 방해하지 않는 경험을 제공하고 그 내부에 있는 지식을 활용한다.
- 파워 사용자에게 완전한 유연성(flexible)을 제공한다. 특정 애플리케이션 상황에서는 내장된 모듈들을 재정의하여 선언적으로 사용할 수 있다(설정, 메타데이터 수정, 커스텀 플러그인 제작 등을 통해).
- 기존에 존재하는 동작들로는 처리할 수 없는 상황에서도 확장성(extensible)이 높다.
- 새로 발견한 좋은 사례(beast practice)들과 사용자 커뮤티니와의 계속되는 공유를 메이븐의 내부 프로젝트 지식의 일부로 삼아 지속적으로 개선하고 있다.
메이븐 2 -- 개념적인 개요
프로젝트 빌드 관련 지식을 파악하기 위해 메이븐 2는 어떻게 작업해야 하는지를 나타내는 개념적인 모델들의 집합에 의존한다. 이러한 모델들은(일부는 메이븐 2의 코드 기반으로 하드 코딩됐다.) 새로운 메이븐을 배포할 때마다 계속 정제되고 있다. 그림 1은 메이븐의 핵심 모델들을 보여주고 있다.
그림 1. 메이븐 2 객체와 수행 모델
그림 1에 보이는 핵심 요소들은 다음과 같다.
-
프로젝트 객체 모델(Project object model): POM은 메이븐 2의 기본이 되는 모델이다. 이 모델의 일부는 메이븐 엔진(reactor라고도 불리는)에 이미 내장되어 있고 다른 부분은 pom.xml이라는 이름의 XML 기반 메타데이터 파일을 통해 선언적으로 여러분이 제공해야 한다.
-
종속성 관리 모델(dependency management model): 메이븐은 특이하게 프로젝트의 종속성이 어떻게 관리되는지 파악한다. 종속성 관리는 일반적으로 빌드 관리 도구와 시스템이 자세히 다루지 않는 다소 애매한 영역이다. 메이븐의 종속성 관리 모듈은 메이븐 2에 내장되었고 대부분의 요구사항들을 채택했다. 이 모델이 제대로 동작하는 것으로 검증됐으며 현재 주요 오픈소스 프로젝트에 의해 배포된 생산적인 모델이다.
-
빌드 생명주기와 각 단계: POM에 관련된 개념으로 빌드 생명주기와 각 단계들이 있다. 이것은 내장된 개념 모델과 실제 물리적인 세상의 사이를 잇는 메이븐 2의 인터페이스이다. 메이븐을 사용할 때 대부분의 작업은 플러그인을 사용하여 수행한다. 메이븐 2는 잘 정의된 단계들과 빌드 사이클에 따라 이러한 플러그인들을 조율한다.
지금 위의 개념 중 이해되지 않는 것이 있어도 걱정하지 않아도 된다. 다음 절에서 이런 모델들을 기반으로 한 구체적인 예제들을 제공할 것이다.
메이븐 2 -- 물리적인 개요
그림 2는 메이븐의 물리적인 구성을 각각의 기능과 상호작용을 통해 보여준다. 또 메이븐 2를 어떻게 사용해야 하는지 보여준다.
그림 2. 메이븐 2 동작과 상호작용 모델
그림 2에서 POM은 여러분의 실제 프로젝트에 대한 메이븐이 가지고 있는 지식이다. 이 모델은 pom.xml 파일들에 있는 선언적인 설명(description)들에 의해 만들어진다. pom.xml 파일들은 트리 구조로 구성되며 부모 요소의 속성들을 상속할 수 있다. 메이븐 2는 Super POM을 제공한다. Super POM은 트리 구조의 최상위에 위치하며(따라서 모든 POM은 이것을 상속받는다) 모든 프로젝트에 일반적으로 필요로 하는 속성들을 가지고 있다.
종속성들은 pom.xml 파일의 일부에 서술된다. 메이븐은 프로젝트 종속성들을 종속성 관리 모델에 따라 푼다. 메이븐 2는 local과 global 저장소에 있는 종속적인 컴포넌트(메이븐 용어로 artifact라고 불린다)들을 찾는다. 원격 저장소에 있는 artifact는 지속적인 접근에 대한 효율성 때문에 로컬 저장소로 다운로드된다. 메이븐 2에 있는 종속성 분석기(dependency resolver)는 추이적인(transitive) 종속성을 다룰 수 있다. 즉 종속성을 가지는 것들이 종속하고 있는 종속성 컴포넌트들도 다루게 된다.
메이븐 엔진은 플러그인을 통해 파일을 다루는 거의 모든 작업을 수행할 수 있다. 플러그인은 pom.xml 파일을 사용하여 설정하고 기술한다. 플러그인들은 종속성 관리 시스템에 의해 artifact로 처리되고 빌드 작업을 할 때 필요하게 되면 다운로드된다. 각각의 플러그인은 다양한 생명주기의 각 단계들과 연관이 있을 수 있다. 메이븐 엔진은 생명주기 동안 필요에 따라 플러그인을 호출하는 상태 머신(state machine)을 가지고 있다.
|