Maven에 대해 알아보자 ① : Maven을 사용하는 이유
목차
- 시작하며
- Maven이란?
- Maven을 사용하는 이유
- 그럼에도 Maven의 단점이 있다면?
- 마치며
시작하며
나는 자바 프로젝트를 만들고 사용할 때 거의 항상 Maven의 도움을 받아왔다.
사실 잘 몰라도 대충 검색하면서 쓰면 프로젝트가 어찌어찌 잘 돌아가긴 돌아갔다..
하지만 내가 사용하는 기술을 잘 모르고 사용하면 그 기술을 활용하기 어려워진다고 생각하기에,
이번에 조금 더 확실하게 Maven에 대해 공부하고 개인적인 요약본을 남기고자 이 글을 작성하였다.
개인적으로는 나중에 토이 프로젝트를 진행할 때 막히는 부분을 최소화하고 싶기도 하다.
혹시 내용 중 틀린 내용이나 부족한 점이 있다면 댓글 부탁드립니다.
(감사합니다!^^)
Maven 이란?
Maven이란 자바 프로젝트의 빌드(build)를 자동화 해주는 빌드 툴이다.
Maven을 사용하는 이유
여태까지는 개인적으로 Maven을 사용하는 이유를 한 단어로 라이브러리 관리 용이라고 생각해왔다.
물론 라이브러리를 관리하기 쉬운 것도 많지만,
합리적으로 많은 사람들이 사용하고 IDE에 내장될 수 있는 이유라고 하기엔 살짝 부족해 보였다.
여러 Maven 관련 글을 읽어보니,
Maven을 사용하는 이유는 크게 두 가지가 있는 것 같다.
첫 번째, Maven을 사용하면 빌드 & 배포가 자동화된다.
Maven의 라이프사이클(빌드 + 배포)을 요약하면 다음과 같다.
- Compile : 소스를 자바 바이트 코드로 바꿔준다.
- Test : 컴파일 후 target/classes에 저장된 클래스 file에 대한 단위 테스트를 실시한다.
- Package : target 디렉토리 하위에 지정된 확장자(ex : war, jar) package file을 만든다. (빌드 완료)
- Install : 만들어진 package file을 로컬 저장소로 배포한다.
- Deploy : 만들어진 package file을 원격 저장소로 배포한다.
간단하게 위의 단계만을 이해하고 넘어가도 사용하는데엔 지장이 없을거라 생각하지만,
조금 깊게 생각하려면 phase, plugin, goal를 알고있다면
다음 포스팅에서 다룰 Maven 설정 파일에 대해서 이해하기 좋을 것 같다.
phase는 빌드 라이프사이클의 단계를 의미하며,
위의 Compile, Test, Package, Install, Deploy가 phase라고 할 수 있다.
또한 phase는 빌드 라이프사이클에서 빌드 단계와 각 단계의 순서만을 정의하고 있는 개념으로
빌드 과정에서 phase가 빌드 작업을 하지는 않는다.
실질적인 빌드 작업은 각 phase에 연결되어 있는 플러그인의 goal이 한다.
plugin은 하나 이상의 goal의 집합체로, goal은 실행할 수 있는 각각의 작업이다.
이 외에도 만들어진 target 디렉토리를 삭제하는 clean 라이프사이클과
생성된 target 디렉토리 하위에 site 디렉토리를 만들고 문서를 저장하는 라이프사이클도 존재한다.
두 번째, 라이브러리 관리가 편해진다.
기존 라이브러리 적용 과정
- 라이브러리를 구한다. (주로 검색..)
- 구한 라이브러리를 빌드 경로에 넣는다.
- 빌드 시 저장된 라이브러리가 적용될 수 있도록 경로지정을 한다.
Maven을 사용한 라이브러리 적용 과정
- Maven사이트에서 원하는 라이브러리를 검색한다.
- 검색 결과로 나온 텍스트를 복사해서 Maven설정파일(pom.xml)에 붙혀넣는다.
- 프로젝트에서 Maven Update를 클릭한다.
개인적으로는 Maven을 활용하는 것이 훨씬 편했다.
Maven설정파일에 텍스트를 복사하고 업데이트 하는 것으로 라이브러리 적용이 완료되는 이유는
필요한 라이브러리와 관련된 텍스트가 적혀있는 설정파일을 Maven Update시 읽어들인다.
만약 내가 사용하기 위해 설정파일에 명기한 라이브러리를 지정된 Maven 라이브러리 폴더에서 찾지 못했으면,
Maven이 원격 저장소(Maven에서 제공)에서 해당 라이브러리를 다운로드하여 빌드 시 사용할 수 있다.
그럼에도 Maven에 단점이 있다면?
- 레포지터리의 관리가 불편할 수 있다. (때로는 Maven 원격 저장소에 원하는 라이브러리가 없는 경우가 있다)
- 모든 과정을 설정 파일(pom.xml) 하나로 해결하기에 파일의 가독성이 떨어지고 길어진다.
- 디테일한 빌드기능이 지원되지 않을 수 있다.
- 종종 xml 작성 중 오류 등와 같은 설정 파일(pom.xml) 오류가 있을 시 알아내기 어렵다.
마치며
이번에는 아예 메이븐을 들어본 적도 없는 사람이라면
살짝 어려울 수도 있겠다고 느끼고 있다.
왜냐면 이 글은 이미 메이븐을 조금 알고 있는 나의 기준으로
작성되었기 때문이다.
하지만 오히려 나의 경우에는 원래 메이븐을 알고있고,
글을 작성하는 과정에서도 배운 점이 있기에 괜찮다고 생각한다.
(^^)
다음 포스팅에서는 pom.xml의 내부적인 태그에는 어떤 것들이 있는지와
설정하는 간단한 방법에 대해 요약하려고 한다.
(감사합니다!)