일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- IOC
- springwebmvc
- lambda
- springboot
- 컴퓨터시스템
- Kotlin for Java Developers
- exception
- DispatcherServlet
- 프록시
- 링커
- java
- JPA
- 토비의스프링
- ApplicationContext
- 토비의스프링3.1
- 자바
- FunctionalInterfaces
- beanfactory
- ORM
- hibernate
- DesignPattern
- Spring
- 메이븐
- String
- 링킹
- gradle
- Immutable
- 빌드툴
- 클린코드
- AutoConfiguration
- Today
- Total
엔지니어로 가는 길
<자바 세상의 빌드를 이끄는 메이븐> 박재성 저 본문
책 소개
이 책은 내가 꿈꾸고 있는 이상적인 개발 환경의 중심에 있다고 할 수 있는 빌드 환경을 메이븐 기반으로 구축해 가는 과정에 대하여 다루고 있다. <본문 중에서>
메이븐을 한 번도 써보지 않은 상태에서 메이븐을 도입하여 프로젝트를 구축해나가는 과정이 담겨있기 때문에 메이븐에 대해 아예 모르는 사람일지라도 이해하는데 어려움이 없을 것 같다.
새로운 무언가를 익힌다는 건 참 고된 일이다. 어떻게 하면 덜 힘들게 배울 수 있을까? 언제 배워야 할까? 생활코딩을 운영하는 이고잉님의 말이 떠오른다. "어떤 문제를 만나서 그 문제가 주는 좌절이 그 문제를 해결할 새로운 기술을 배우는데 드는 고통보다 더 클 때가 새로운 무언가를 배울 적기이고, 이럴 때 배우면 새로운 무언가를 익히기가 덜 힘들다."
이 책이 마음에 드는 가장 큰 이유는 이런 스토리가 있는 책이기 때문이다. 메이븐을 도입해야만 하는 문제 상황을 제시해주어서 독자가 간접적으로나마 문제 상황을 경험할 수 있게 한다. 덕분에 책을 통해 메이븐을 익힐 때 이걸 왜 배워야 하지 하는 생각도, 어렵고 힘들다는 생각도 들지 않았다.
아쉬운 점은 거의 10년이 된 책이라는 점과, 절판되어 서점에서 구매할 수 없는 책이라는 점이다.
메이븐을 깊고 섬세하게 다루고 있지만 당장 필요한 아주 기초적인 것만 정리하고, 그 외의 것들은 차차 정리하거나 실제로 맞닥뜨렸을 때 공부하는 게 좋을 것 같다.
빌드란
무언가를 만드는 과정이다. 프로그래밍에서는 소프트웨어를 만드는 과정을 말한다.
메이븐(maven)이란
주로 자바 프로젝트를 빌드할 때 사용되는 도구 중에 하나이다.
굳이 메이븐과 같은 빌드 툴을 사용하는 이유는
단순, 반복적으로 실행하는 작업을 자동화함으로써 업무 효율성을 높이기 위함이다. 하나 예를 들면, 빌드를 하기 위해서는 프로젝트에서 쓴 다른 라이브러리들을 가져와야 하는데 메이븐을 사용하면 일일이 해당 라이브러리를 제공하는 저장소에 들어가서 로컬 컴퓨터에 다운을 받고 프로젝트에서 사용할 수 있게 경로에 추가하는 일 없이 pom.xml(메이븐의 기본 설정 파일)에 의존성을 추가해주면 끝이다.
메이븐의 특징
- 메이븐은 메이븐이 접근할 수 있는 저장소를 지원한다.
@ 중앙 저장소: 오픈 소스 라이브러리, 메이븐 플러그인, 메이븐 아키타입 관리. 개발자가 임의 배포 불가.
@ 원격 저장소: 중앙 저장소에 없는 라이브러리를 한 곳에 모아두기 위한 별도의 메이븐 저장소.
@ 로컬 저장소: 메이븐을 빌드할 때 다운로드하는 라이브러리, 플러그인을 관리하는 개발자 PC의 저장소.
이 저장소를 통해 템플릿 프로젝트인 아키타입, 의존 관계에 있는 라이브러리, 메이븐 플러그인 기능을 지원한다. 메이븐을 사용할 때 메이븐만 설치하면 프로젝트 빌드에 필요한 라이브러리, 플러그인을 저장소에서 로컬로 자동으로 다운로드한다.
- 메이븐은 정형화된 프로젝트 구조와 빌드 명령을 제공하므로 관리를 일관되게 할 수 있다.
- 전사적으로 사용할 프로젝트 템플릿을 만들어 배포할 수 있다(메이븐의 아키타입 기능).
라이프사이클, 플러그인, 페이즈, 골
라이프사이클: 빌드 과정
- 기본 라이프사이클: 소스 코드 컴파일, 테스트, 압축, 배포
- clean 라이프사이클: 빌드한 결과물 제거(target 디렉토리 제거)
(메이븐은 기본적으로 빌드 후의 모든 산출물을 target 디렉토리에서 관리한다.)
- site 라이프사이클: 프로젝트 문서 사이트 생성
위의 각 라이프사이클은 독립적이다. 기본 라이프사이클을 진행했을 때 clean 라이프사이클이 진행되지 않는다. (clean 페이즈를 실행하지 않을 경우 이 전에 빌드했던 산출물 중에 불필요한 산출물이 남아 있어 에러가 발생할 수 있으니 다른 페이즈를 실행할 때 반드시 clean을 실행하고 빌드하는 습관을 가지는 것이 좋다.)
페이즈(phase): 라이프사이클의 각 단계
페이즈는 빌드 라이프사이클에서 빌드 단계와 각 단계의 순서만을 정의하고 있는 개념이다.
빌드 과정에서 페이즈가 빌드 작업을 하지는 않는다.
실질적인 작업은 각 페이즈에 연결되어 있는 플러그인의 골이 한다.
페이즈는 의존 관계를 갖는다. (compile => test => package => install => deploy)
예를 들어, test 페이즈를 실행하려면 먼저 compile 페이즈를 실행해야 한다.
플러그인(plug-in): 메이븐이 제공하는 기능
메이븐의 모든 기능은 플러그인을 기반으로 동작한다.
메이븐 페이즈 또한 플러그인을 기반으로 동작한다.
즉, 각각의 페이즈에서 특정 플러그인을 기반으로 빌드를 진행한다.
골(goal): 메이븐 플러그인에서 실행할 수 있는 각각의 작업
메이븐 플러그인은 하나의 플러그인에서 여러 작업(여러 개의 골)을 수행할 수 있다.
정리하자면 메이븐의 빌드 과정을 라이프사이클이라고 하는데 라이프사이클은 페이즈로 이루어져 있고, 페이즈에서는 플러그인을 통해서 빌드 과정이 진행되는데, 플러그인은 골이라는 작업단위로 이루어져 있다.
인텔리제이에서 메이븐 살펴보기
책이 오래돼서 그런지 라이프사이클이 책과 좀 다른 것 같다. 책에서는 메이븐 명령어를 다루고 있지만 굳이 정리하지 않은 이유는 IDE를 사용할 경우 그냥 더블클릭 만으로 원하는 페이즈를 실행할 수 있기 때문이다.
여태까지는 메이븐이 뭔지 잘 몰랐다. 메이븐을 제대로 쓴 적도 없다. (컴파일 뒤의 페이즈를 이용해본 적이 없다.) 이제 메이븐이 뭔지 알았으니 잘 사용하고 공부해보자.
'프로그래밍 관련 도서' 카테고리의 다른 글
<실용주의 프로그래머> 실용주의란 (0) | 2020.04.17 |
---|