엔지니어로 가는 길

<자바 세상의 빌드를 이끄는 메이븐> 박재성 저 본문

프로그래밍 관련 도서

<자바 세상의 빌드를 이끄는 메이븐> 박재성 저

탐p슨 2020. 8. 17. 20:56
728x90

책 소개

 

 

이 책은 내가 꿈꾸고 있는 이상적인 개발 환경의 중심에 있다고 할 수 있는 빌드 환경을 메이븐 기반으로 구축해 가는 과정에 대하여 다루고 있다. <본문 중에서>

 

메이븐을 한 번도 써보지 않은 상태에서 메이븐을 도입하여 프로젝트를 구축해나가는 과정이 담겨있기 때문에 메이븐에 대해 아예 모르는 사람일지라도 이해하는데 어려움이 없을 것 같다.

 

새로운 무언가를 익힌다는 건 참 고된 일이다. 어떻게 하면 덜 힘들게 배울 수 있을까? 언제 배워야 할까? 생활코딩을 운영하는 이고잉님의 말이 떠오른다. "어떤 문제를 만나서 그 문제가 주는 좌절이 그 문제를 해결할 새로운 기술을 배우는데 드는 고통보다 더 클 때가 새로운 무언가를 배울 적기이고, 이럴 때 배우면 새로운 무언가를 익히기가 덜 힘들다."

 

이 책이 마음에 드는 가장 큰 이유는 이런 스토리가 있는 책이기 때문이다. 메이븐을 도입해야만 하는 문제 상황을 제시해주어서 독자가 간접적으로나마 문제 상황을 경험할 수 있게 한다. 덕분에 책을 통해 메이븐을 익힐 때 이걸 왜 배워야 하지 하는 생각도, 어렵고 힘들다는 생각도 들지 않았다.

 

아쉬운 점은 거의 10년이 된 책이라는 점과, 절판되어 서점에서 구매할 수 없는 책이라는 점이다.

 

메이븐을 깊고 섬세하게 다루고 있지만 당장 필요한 아주 기초적인 것만 정리하고, 그 외의 것들은 차차 정리하거나 실제로 맞닥뜨렸을 때 공부하는 게 좋을 것 같다.

 

빌드란

무언가를 만드는 과정이다. 프로그래밍에서는 소프트웨어를 만드는 과정을 말한다.

 

메이븐(maven)이란

 

https://maven.apache.org

 

주로 자바 프로젝트를 빌드할 때 사용되는 도구 중에 하나이다.

 

굳이 메이븐과 같은 빌드 툴을 사용하는 이유는

단순, 반복적으로 실행하는 작업을 자동화함으로써 업무 효율성을 높이기 위함이다. 하나 예를 들면, 빌드를 하기 위해서는 프로젝트에서 쓴 다른 라이브러리들을 가져와야 하는데 메이븐을 사용하면 일일이 해당 라이브러리를 제공하는 저장소에 들어가서 로컬 컴퓨터에 다운을 받고 프로젝트에서 사용할 수 있게 경로에 추가하는 일 없이 pom.xml(메이븐의 기본 설정 파일)에 의존성을 추가해주면 끝이다.

 

메이븐의 특징

- 메이븐은 메이븐이 접근할 수 있는 저장소를 지원한다.

@ 중앙 저장소: 오픈 소스 라이브러리, 메이븐 플러그인, 메이븐 아키타입 관리. 개발자가 임의 배포 불가.
@ 원격 저장소: 중앙 저장소에 없는 라이브러리를 한 곳에 모아두기 위한 별도의 메이븐 저장소.
@ 로컬 저장소: 메이븐을 빌드할 때 다운로드하는 라이브러리, 플러그인을 관리하는 개발자 PC의 저장소.

 

이 저장소를 통해 템플릿 프로젝트인 아키타입, 의존 관계에 있는 라이브러리, 메이븐 플러그인 기능을 지원한다. 메이븐을 사용할 때 메이븐만 설치하면 프로젝트 빌드에 필요한 라이브러리, 플러그인을 저장소에서 로컬로 자동으로 다운로드한다.


- 메이븐은 정형화된 프로젝트 구조와 빌드 명령을 제공하므로 관리를 일관되게 할 수 있다.
- 전사적으로 사용할 프로젝트 템플릿을 만들어 배포할 수 있다(메이븐의 아키타입 기능).

 

라이프사이클, 플러그인, 페이즈, 골

라이프사이클: 빌드 과정

- 기본 라이프사이클: 소스 코드 컴파일, 테스트, 압축, 배포

- clean 라이프사이클: 빌드한 결과물 제거(target 디렉토리 제거)

(메이븐은 기본적으로 빌드 후의 모든 산출물을 target 디렉토리에서 관리한다.)

- site 라이프사이클: 프로젝트 문서 사이트 생성

 

위의 각 라이프사이클은 독립적이다. 기본 라이프사이클을 진행했을 때 clean 라이프사이클이 진행되지 않는다. (clean 페이즈를 실행하지 않을 경우 이 전에 빌드했던 산출물 중에 불필요한 산출물이 남아 있어 에러가 발생할 수 있으니 다른 페이즈를 실행할 때 반드시 clean을 실행하고 빌드하는 습관을 가지는 것이 좋다.)

 

페이즈(phase): 라이프사이클의 각 단계

페이즈는 빌드 라이프사이클에서 빌드 단계와 각 단계의 순서만을 정의하고 있는 개념이다.

빌드 과정에서 페이즈가 빌드 작업을 하지는 않는다.

실질적인 작업은 각 페이즈에 연결되어 있는 플러그인의 골이 한다.

페이즈는 의존 관계를 갖는다. (compile => test => package => install => deploy)

예를 들어, test 페이즈를 실행하려면 먼저 compile 페이즈를 실행해야 한다.

 

플러그인(plug-in): 메이븐이 제공하는 기능

메이븐의 모든 기능은 플러그인을 기반으로 동작한다.

메이븐 페이즈 또한 플러그인을 기반으로 동작한다.

즉, 각각의 페이즈에서 특정 플러그인을 기반으로 빌드를 진행한다.

 

골(goal): 메이븐 플러그인에서 실행할 수 있는 각각의 작업

메이븐 플러그인은 하나의 플러그인에서 여러 작업(여러 개의 골)을 수행할 수 있다.

 

정리하자면 메이븐의 빌드 과정을 라이프사이클이라고 하는데 라이프사이클은 페이즈로 이루어져 있고, 페이즈에서는 플러그인을 통해서 빌드 과정이 진행되는데, 플러그인은 골이라는 작업단위로 이루어져 있다.

 

인텔리제이에서 메이븐 살펴보기

 

 

책이 오래돼서 그런지 라이프사이클이 책과 좀 다른 것 같다. 책에서는 메이븐 명령어를 다루고 있지만 굳이 정리하지 않은 이유는 IDE를 사용할 경우 그냥 더블클릭 만으로 원하는 페이즈를 실행할 수 있기 때문이다.

 


 

여태까지는 메이븐이 뭔지 잘 몰랐다. 메이븐을 제대로 쓴 적도 없다. (컴파일 뒤의 페이즈를 이용해본 적이 없다.) 이제 메이븐이 뭔지 알았으니 잘 사용하고 공부해보자.

728x90

'프로그래밍 관련 도서' 카테고리의 다른 글

<실용주의 프로그래머> 실용주의란  (0) 2020.04.17
Comments