1. Maven 소개


이전에는 자바 프로젝트를 시작할 때 제일 먼저하는 작업이 이클립스를 띄우고, 자바 프로젝트를 만들어 라이브러리를 lib폴더에 추가하는 것이었다. 이러한 과정에 들어가기 전에 아래와 같은 고민이 생겼다.


1.프로젝트가 빌드에 필요한 것이 무엇인가? 

2.다운로드 받을 필요가 있는 라이브러리가 어떤 것인가? 

3.다운로드 받은 것을 어디에 넣어야 하는가? 

4.빌드에서 어떤 goal을 실행할 수 있는가? 


이런 고민 때문에  잘될때는 새로운 프로젝트의 빌드를 해결하는데 최소 몇분이 걸리고, 잘 되지 않을 때는 프로젝트의 빌드가 어려워서 새로운 개발자가 소스를 수정하고 프로젝트를 컴파일하는 지점에 도달하는데 수시간이 걸리는 현상이 발생하였다. 

이렇게 매번 비슷한 라이브러리를 사용하는 자바프로젝트를 계속 만들다 보면 매번 똑같은 작업을 반복하여야 했고, 이러한 삽질을 해결해 주기위해 등장한 것이 Maven이다.



사실  Maven 탄생이전에 이러한 문제점을 해결해주기 위해 Ant라는 빌드툴이 있었는데 여기서 좀 더 개선된 것이 Maven이다.

물론  Ant보다 Maven이 더 우월하다고 결론을 내릴 수는 없는데 이와 관련된 내용은 다음 포스팅에서 다룰 것이다.


2. Maven의 동작원리


이제 Maven의 동작원리에 대해 간단히 알아보자.





1.개발자 A가  "embian"이라는 라이브러리를 만들었다.

1.1 이 라이브러리는 완벽하지 않고, 다른기능을 추가해야 할수 있다. 

1.2 그래서 여러 개발자가 필요시 이 라이브러리를 사용해야 한다


2. 라이브러리를 만들고 난후 Maven툴을 이용하여 빌드 한 후 서버에 올린다.(a)


3. 개발자 B와 개발자C가 "embian"라이브러리가 필요한 경우 프로젝트마다 설정되어 있는 "pom.xml"이라는 파일을 설정하면 Maven툴이 알아서 서버에 접속하여 "embian"라이브러리를 다운받아 자신의 프로젝트에 자동으로 추가한다.(b)


4.필요에 따라 "pom.xml" 파일을 설정하면 Maven툴은 주기적으로 서버와 통신하여 최신버전의 "embian"라이브러리를 다운받게 할 수 있다. 개발자 A 혹은 다른 개발자가 "embian"라이브러리를 수정하여 서버에 업로드 할 수 있기 때문이다. (a)


5."embian"라이브러리를 사용하는 "embian2"라는 라이브러리가 있을 경우 Maven툴은 알아서(의존성을 체크하여) "embian2"와 "embian"라이브러리를 다운받는다.


6. Maven툴은 여러 플러그인을 hudson이나 Ant,Nexus등의 유명툴과 연동할수 있다.



3.정리 
Maven을 소개하고 동작원리까지 알아보았으니 이제 정리하면서 다시 한번 말해 Maven 무엇일까?

답은 여러분의 관점에 달렸다.

대부분의 Maven사용자들은 Maven 소스 코드로부터 배포 가능한 산출물을 만드는데 사용되는 도구인 "build tool"이라고 부를 것이고, 빌드 담당자와 프로젝트 매니저들은 Maven을 프로젝트 관리 툴로서 더 종합적인 무언가 라고도 할것이다.

Maven 같은 프로젝트 관리 도구는 빌드 도구에서 발견되는 기능의 상위 개념을 제공한다. 빌드 기능을 제공하는 이외에Maven 레포트를 실행하고, 사이트를 만들며, 작업 팀의 멤버 간의 커뮤니케이션을 가능하게 해준다.


다음은 Apache Maven 공식적인 정의이다

Maven 프로젝트 객체 모델 (Project Object Model), 표준의 집합, 프로젝트 라이프사이클, 의존성 관리 시스템, 라이프사이클 정의된 단계에서 플러그인 목표를 실행하는 논리를 포함하는 프로젝트 관리 도구이다. 여러분이 Maven 사용할 정의된 프로젝트 객체 모델을 사용한 프로젝트를 기술하며Maven 다음에 공유된(혹은 사용자가 만든) 플러그인들로부터 cross-cutting 로직 적용할 수 있다.  Maven이 프로젝트 관리 도구라는 사실에 두려움을 느끼겠지만 만약 당신이 빌드 도구를 찾는다면 Maven이 그 역할을 수행할 것이다.


Maven이 성공할 수 있었던 핵심 근거는 소프트웨어를 빌드하는데 공통 인터페이스를 정의했다는 것이다.아파치 Wicket과 같은 프로젝트가 Maven 사용하는 것을 살펴보면 소스를 체크아웃 받고 부담없이 mvn install을 사용해서 빌드를 한다.

쉽게 설명하자면 자동차 키를 어디에 꽂는지 알고 있으며, 가속 페달이 오른쪽에 위치하고 브레이크가 좌측에 위치한다는 것을 알고 있다는 것이다.


이렇게 Maven에 대해 알아보았으니 다음 포스팅에는 Maven을 설치하고 간단한 프로젝트를 소개하는 포스팅을 하도록 하겠다.

그럼 See you soon~!



참고자료: 

Maven:the Definitive Guide -O'Reilly Media, Inc.

http://blog.naver.com/sidoheba?Redirect=Log&logNo=110179097295

http://oreilly.com/catalog/mavenadn/chapter/ch01.pdf

http://wiki.javajigi.net/display/IDE/Maven


Posted by 비회원