한가지. 메이븐이란 무엇인가?
메이븐을 한 마디로 정의해서 말을 하자면 개발자로 하여금 프로젝트 관리를 쉽게 도와주는 빌드 툴이라고 할 수 있습니다.
메이븐은 pom.xml이라는 파일에 기반합니다. POM(Project Object Model)이란 Xml 파일에 기반하여 반복적으로 진행되어 왔던 프로젝트 빌드, 리포팅, 문서화 작업등을 도와주는 문서라고 할 수 있습니다.
두가지. 많이 사용되고 있는 ANT와 MAVEN의 비교
아파치 앤트(Apache Ant)는 공통적인 프로젝트 디렉토리 구조와 같은 공식적인 관례를 가지고 있지 않으며, 개발자가 직접 소스코드의 위치와 소스코드의 빌드가 된 파일의 위치, 산출물을 어디에 위치시켜야 하는지 정확하게 지정해주어야 한다. 또한 앤트는 빌드를 실행하는 goal과 goal의 디펜던시를 정의할 수 있는 라이프 사이클을 가지고 있지 않다. 따라서 각 goal에 일일이 작업에 대한 순서를 지정해 주어야한다. 반면,
아파치 메이븐(Apache Maven)은 관례를 가지고 있다. 메이븐은 COC(Convetion over Configuration)의 개념에 입각한다. 설정보다 관례라는 뜻으로 앤트와는 다르게 하나 하나 작업에 대한 순서를 지정해주고 산출물에 대한 위치등을 정해줘야 한다면 메이븐은 어디에 소스코드가 위치하고, 소스코드 컴파일, 컴파일 된 소스코드의 산출물의 위치 등이 이미 다 지정되어 있어 따로 일일히 작업을 해주지 않아도 된다. 메이븐은 pom.xml 파일을 생성하고 기본 디렉토리 안에 소스를 위치시키는 것이 위의 빌드, 리포팅 등의 많은 작업들을 위해 해주어야하는 것의 전부이다.나머지는 메이븐의 특정 관례에 따라 처리하게 된다.
물론 설명으로만 보면 Maven이 Ant보다 훨씬 편해보이지만 그 어떤 것이 더 좋고 나쁘다고 말하기는 힘들 것 같다. 적적한 때에 적절한 툴을 사용하는 것이 중요하고 Maven이 Ant보다 더 많은 작업들을 개발자 입장에서 훨씬 쉽게 처리할 수 있지만 Ant보다 자유도가 떨어지기 때문에 세세한 컨트롤을 필요한 부분에 있어서는 Ant가 이점이 있다. 그러나 Ant는 너무나도 큰 자유도 때문에 script를 재사용하기 어렵고 문법 또한 훨씬 복잡하므로 개발을 하면 할수록 더욱 복잡해지고, 같은 내용을 반복적으로 사용해야하는 단점이 있다.
세가지. 메이븐의 장점
1. 메이븐은 편리한 Dependency Libaray관리 기능을 제공한다.
프로젝트를 진행하다 보면 특정 기능을 구현하기 위해 jar파일 등의 라이브러리가 필요할 경우가 있다. 이 경우 메이븐 pom.xml에 단지 denpency만 추가시켜주면 알아서 해당 라이브러리를 다운받아 주게 된다.
이렇게 단순히 dependency만 추가하게 되면 junit을 사용할 수 있는 라이브러리를 다운 받아준다. 이러한 특징으로 인해 여러명이서 프로젝트 작업을 진행 할 경우 라이브러리 파일을 git이나 svn과 같은 도구를 통해 주고 받지 않고도 프로젝트에 필요한 라이브러리들을 pom.xml 하나로 쉽게 관리할 수 있는 큰 장점이 있다.
2. 모든 프로젝트가 일관된 디렉토리 구조와 빌드 프로세스를 유지할 수 있다.
|
설정보다 관례(Convention over Configuration)라는 아이디어에 따르면 옆과 같이 메이븐 프로젝트로 시작하게 되면 src/main/java, src/main/resouces, src/test/java, src/test/resources와 같은 구조를 발견할 수 있다. 이렇게 메이븐 프로젝트는 공통 구성을 가지게 되고누군가가 이 프로젝트를 봤을 경우 메이븐에 기반한 프로젝트라는 것을 쉽게 인식할 수 있을 뿐만 아니라 프로젝트의 전반적인 내용에 대해 어느정도 유추할 수 있게 된다. 이렇게 메이븐 템플릿 프로젝트로 프로젝트를 생성하면 프로젝트의 뼈대를 자동으로 생성할 수 있게 되는데 이 같은 기능을 아키타입(archetype)이라고 한다. |
3. 메이븐이 제공하는 다양한 플러그인을 활용할 수 있다.
4. 신규프로젝트 세팅을 쉽고 빠르게 진행할 수 있다. (Archetype 기능을 통해)
사가지. Pom.xml의 기본 구성요소
Maven 프로젝트를 생성하면 pom.xml 파일이 프로젝트 루트 디렉터리에 생성된다. 이 pom.xml 파일은 Project Object Model 정보를 담고 있는 파일로서, 이 파일에서 다루는 주요 정보는 다음과 같다.
1. 프로젝트 정보 : 프로젝트의 이름, 개발자 목록, 라이선스 등의 정보를 기술
2. 빌드 설정 : 소스, 리소스, 라이프 사이클 별 실행할 플러그인 등 빌드와 관련된 설정을 기술
3. 빌드 환경 : 사용자 환경 별로 달라질 수 있는 프로파일 정보를 기술
4. POM 연관 정보 : 의존 프로젝트 (모듈), 상위 프로젝트, 포함하고 있는 하위 모듈 등을 기술
잘 안보이지만 왼쪽 위에 보이는 Group Id, Artifact Id, Packagin, Version 에 대해 설명하겠다.
Group Id : 프로젝트를 생성하는 조직의 고유 아이디어를 결정. 보통 Domain Name을 사용
Artifact Id : 프로젝트를 식별하는 유일한 아이디를 말한다. 보통 Project Name을 사용
Packaging : 프로젝트를 어떤 형태로 패키징 할지 결정한다. 진행하고 있는 프로젝트의 경우 웹 프로젝트이기 때문에 war로 설정되어 있다.
Version : 프로젝트 버전 구조 [메이버 버전.마이너 버전. 순차 버전 - 식별자]가 되겠다. 현재는 1.0.0-BUILD-SNAPSHOT으로 지정되어 있는 것을 볼 수 있다.
밑에 보이는 Overview, Dependencies, 등등이 있는 탭에 pom.xml을 눌러보면
과 같이 pom.xml에 표시되어 있는 것을 확인할 수 있다. pom.xml 은 workspace상에 여러 군데 있을 수 있고 hierarchy에 따라 overwrite 또는 상속을 받게 된다.
참고.
자바 세상의 빌드를 이끄는 메이븐 - 박재성 저
[포스팅을 하며]
글을 쓰는 일이 정말 쉽지 않다는 것을 다시 한 번 느낀다. 앞으로 현업에서 새롭게 습득한 지식이나 어려움을 겪었던 경험들에 대해서도 포스팅 해볼 생각이다. 아직은 많이 부족하지만 꾸준히 지식 습득에 노력을 기울이고 학습한 내용에 대해 포스팅 하며 더욱 지식을 굳건히 할 수 있도록 해야 겠다. 미흡하거나 잘못 된 부분의 경우 댓글을 통해 얘기해주면 감사하겠습니다.