자바 프로젝트 버전 관리, 빌드, 자동 배포 관리에 관한 모든 것
S사 근무 시절, 필자의 직무는 '소프트웨어 아키텍트'이었다. 전체 프로젝트의 소프트웨어 아키텍처를 결정하는 역할도 중요하지만, 이 직무의 가장 큰 역할은 프로젝트 전체 인력이 표준으로 사용할 개발 환경을 결정하고 셋업을 한 뒤, 프로젝트 내내 이 환경을 잘 사용할 수 있도록 도와주는 일도 주요한 임무다. 적은 인원과 개발자의 자유도가 높은 프로젝트라면 이 부분을 크게 중요하지 않게 생각할 수도 있다. 하지만 필자가 5년간 진행한 2~300 명의 개발자가 투입되는 대형 프로젝트인 경우, 표준 개발 환경이 프로젝트 전체 품질과 성공을 좌지우지하는 주요한 사항이 된다. 비효율적이고 막무가내로 만들어진 개발 환경은 비효율을 야기하고 개발자들의 업무 만족도를 쉽게 뭉게 뜨리는 주범이 되기도 한다.
근래 자바 프로젝트 표준 개발 환경에는 보통 아래의 것들이 포함된다.
1. 개발 IDE : 이클립스, 인텔리제이IDEA
2. 소스 형상 관리 : 깃 w/ 깃허브/빗버캣, 섭버전
3. 빌드: 메이븐, 그레이들
4. CI : 젠킨스, 트레비스, CircleCI
5. 일정 관리 : 지라, 레드마인, 피보탈트래커
6. 위키 : 컨플런스
만약, 전체 개발 환경이 클라우드 기반이면 구성이 다양하게 바뀔 수 있지만, 저 범위에서 크게 벗어나지 않는다. 환경이 어느 정도 셋업이 되면, 각종 프레임워크를 붙이고, 자동화 테스트를 통한 품질 활동들도 하게 된다.
이런 도구들을 일일이 공부하고 제대로 된 조합을 구상하여 개발자에게 전파하는 것은 그리 쉬운 일이 아니다. 워낙 도구도 많고 각각 가지고 있는 기능들도 엄청 많기 때문이다. 그리고 개발자마다 가지고 있는 경험이 다 다르기 때문에 러닝 커브를 최소화하고 누구든지 빠른 시일 내에 적응하는 표준 개발 환경을 결정하는 것은 어느 정도 경험이 있는 개발자라도 그리 만만치 않은 작업니다.
그런데 최근 이러한 고민을 덜어줄 만한 번역서가 출간되었다. 바로 "자바 프로젝트 필수 유틸리티(한빛미디어)"가 그것이다.
일단 앞표지의 그림에 눈이 간다. 여러 도구들로 이루어진 놀이동산이나 공장의 생산 라인과 흡사하다. 아마 여러 도구들로 이루어진 빌드 파이프라인을 그림으로 멋지게 표한한 것이 아닐까 싶다. 컨베인 벨트 위의 초콜릿 같은 제품은 소스 코드인 듯싶다. ;)
이 책에서는 위에서 언급한 자바 프로젝트의 표준 개발 환경에 필수적인 메이블, 그레이들, 깃/깃허브, 젠킨스의 기본 지식 및 설치 방법, 활용 방법 등이 기술되어 있다. 스칼라 빌드를 위해 SBT 관련 내용도 추가되어 있다.
각 챕터의 시작에는 도구의 기본적인 개념 및 태생 배경, 유명해진 이유 등을 소개하고 있다. 모든 도구는 탄생 배경에 대한 이해가 있어야 더욱 잘 활용할 수가 있지만, 많은 개발자들이 그저 사용하는 방법에만 익숙하기 마련이기 때문에 이 부분이 필자에게는 가장 마음에 드는 부분 중 하나이었다.
모든 도구의 설치 방법을 스크린샷과 함께 자세하게 설명하고 있다. 초보 개발자라도 책의 내용을 천천히 따라 하다 보면 충분히 가지고 놀 수 있을 정도로 활용할 수 있을 것으로 보인다.
개발자가 사용하는 개발IDE에 따라서 메이븐이나 그레이들과 같은 빌드 도구를 함께 사용하는 방법이 상이하다. 이를 위해 이클립스, 인텔리제이 그리고 넷빈즈에서 메이블과 그레이들을 어떻게 사용하는지 기술되어 있어 다양한 개발자들에게 도움이 되리라 본다.
원서에는 없지만 한국판에는 7장 깃/깃허브와 8장 젠킨스가 추가된 것도 기쁜 일이다. 가장 많이 사용하는 오픈소스 소스 형상 관리 및 CI도구가 빠졌다면 무척 아쉬웠을 것이다. 게다가 8장 젠킨스에서 소스 코드 정적 분석 및 품질활동에 많이 활용하는 소나큐브가 1개 절을 차지하고 있다.
다양한 주제들을 폭넓게 다루고 있어 좋은 면도 있지만, 내용이 워낙 방대하다 보니 각각의 도구의 깊은 면까지는 다르고 있지 못하고 있는 것이 다소 아쉽다. 차라리 책이 더 두꺼워지더라도 내용들을 더 깊이 다뤘으면 훨씬 좋지 않았을까 싶다. 가령, 메이븐을 사용할 때 라이프사이클 정의를 위해 다양한 '골'을 활용할 수 있는데 책에서 다루고 있는 골은 가장 기본적은 clean, package, compile, test-compile, test 정도이다. 그리고 몇 가지 플러그인을 다루고 있다. 참고로 메이븐의 디폴트 라이프사이클은 아래와 같다. (출처: https://maven.apache.org/ref/3.5.3/maven-core/lifecycles.html#default_Lifecycle)
소나큐브 절에서도 소나큐브의 간단한 소개 및 설정 방법, 젠킨스 연동 방법 등에 대한 설명은 잘 되어 있지만, 정작 중요한 테스트 코드 작성 방법이나 소스 정적 분석에 대한 설명이 없어서 깊이 활용하기 위해서는 추가로 공부할 필요가 있어 보인다.
하지만, 대부분의 도구를 잘 모르는 초보 개발자들이나 개발 언어가 바뀐 분들, SI 환경에서 엔터프라이즈급 프로젝트에 투입되었는 데 개발 환경에 대한 이해가 부족한 개발자나 표준 개발 환경을 처음 셋업 하는 분들에게 여러 도구들을 한 책으로 입문 수준으로 배울 수 있는 데에는 큰 도움이 되리라 본다.
끝으로 책의 뒤표지에 있는 AWS 클라우드 테크니컬 트레이너이신 정개발님의 추천사를 공유하면서 마칠까 한다.
* 본 글은 한빛미디어의 나는 리뷰어다! (Episode April 2018)의 참여로 작성한 글입니다.