본문 바로가기

Better SW Development

Maven 학습 중

Maven 이라는 툴에 대해서 보고 있다.

징글징글하게 많은 툴과 라이브러리들이 난무하는 자바진영에서 그래도 어느정도 영향력을 발휘하고 있는 Tool 인 것 같아, 보게 되었다.

아직 학습중이지만, 뭐하는데 쓰는 거냐? 에 대해 간략히 이야기 한다면 build tool + project management tool 라고 할 수 있겠다. Project Management Tool 이라고 하니까 뭔가 대단해 보일 수 도 있지만, Focus 는 소스와 라이브러리 관리 + 단위테스트에 한정되어 있다.

프로젝트 소스를

Main 소스, Rsource, Test 의 3가지 커다란 카테고리로 나누고, 소스 빌드에 필요한 의존성이 있는 라이브러리들을 관린해 준다. 그 핵심에는 POM(Project Object Model)이라는 프로젝트 소스 관리 개념이 자리잡고 있다. 여기에 플러그 인 이라고 하는 개념과 함께 다양한 기능을 제공하고 있지만, Maven 의 저작자들은 Maven 을 빌드와 배포에 우선적으로 사용하길 권하고 있다. (우선 필요한 부분위주로 쓰고, 다양한 기능들은 천천히 알아가라는 뜻인것 같다.)

자바 진영의 최고 Build 툴이라면 두말 할 것 없이 Ant 인데, Ant와 Maven 의 관계는 상호 경쟁적이라기 보다는 상호 보완적인 관계가 더 맞는것 같다. 물론 둘 다 같은 일을 할 수 있지만, 함께 쓰는게 더 나아 보인다.

Ant 와 비교해 보면 Maven 의 독특한 특징이 보이는데, Ant가 바다와 같은 광활한 컨트롤이 가능하다면 Maven 은 COC(Convention Over Configuratoin)이라 컨셉을 바탕으로 보편적인 상식에 의한 설정의 최소화를 꾀한다. 따라서 세밀한 조정은 Ant가, 그리고 편하고 간단한 설정은 Maven 이 강점을 갖는다.

Ant 로 빌드 + Deploy 스크립트를 짜 봤지만, 구조적으로 프로젝트 소스를 관리하려면, Initial Script를 짜는 시간도 적잖이 드는데다가, 지나면 지날 수록 ant 실행용 build.xml 의 크기와 복잡도가 만만찮게 변하게 된다. (뭐, 그 쯤 되면 make가 더 간단할지도.)

아직 학습중이니까 여기까지만 쓰고 정리하자면

=== Maven ===
- 프로젝트 Build 및 소스한정 관리 툴
- COC 를 이용한 간편한 설정지원
- 의존관계를 설정함으로써 편리한 환경구성지원
- 학습에 어느정도 기간이 필요함
- ant가 하는 일을 할 순 있지만, 함께 쓰는게 더 좋을 듯 함
- POM (Project Object Model)이라는 개념을 갖고 있으며 pom.xml 에 기술되어 있음
- 적지 않은 오픈소스 프로젝트들에서 도입하고 있음

PS.

한영사전에는 뜻이 짧게 '전문가' 이렇게만 나오는데 영영사전에는 아래와 같이 나온다.

A maven (also mavin) is a trusted expert in a particular field, who seeks to pass knowledge on to others.

(뒷쪽 문장에 주목)

그리고, 발음은 한영사전 기준으론 메이번, Oxford 영어 사전에는 메이븐으로 나온다. 메이븐이 맞지 싶다.