|
'메이븐? 이게 결국 책으로 나왔구나.'
|
|
모든 프로그래밍 언어가 비슷하겠지만, 웹프로그래밍 언어에 경우 상대적으로 변화의 폭이 크다. 이런 표현을 한 이유는 웹의 빠른 환경변화에 따른 언어 자체로의 변화적인 측면 때문이기도 하지만, 웹프로그래밍 언어에 경우 프레임워크와 연관 툴 및 유틸리티, 오픈소스, 웹서버, 효과적인 실무구현 사례, 데이터베이스 등에 따라 상당한 영향을 받기 때문이다. 때로는 프로그래밍 언어의 기술적 구현은 이 모든 요소들에 영향을 받아서 결정되기도 한다. 또한 독립적으로 설정되는 외부 툴을 상호보완적으로 어떻게 설정하고 적절하게 사용하느냐에 따라서 프로젝트의 기간과 과정을 유연하게 만들고, 프로젝트의 완성도를 높일 수도 있으며, 관리 및 유지보수의 편의성을 이끌어낼 수 있다.
- 메이븐 설치 및 템플릿 프로젝트 생성 - 메이븐 라이프사이클 - 의존 라이브러리 관리 - 메이븐과 이클립스 통합 - 메이븐과 데이터베이스 통합 - 리포팅 기능을 이용한 문서 관리 - 메이븐 사내 저장소 설치 및 활용 - 메이븐 아키타입
국내에 메이븐 관련 서적이 드문 만큼 이 책은 개발자들의 메이븐 활용에 대한 답답함을 해소해줄 수 있을 것이다. 더욱이 이 책에는 다양한 프로젝트 경험과 직접 관련 프로젝트를 다룬 저자의 고민과 경험이 배어있기 때문에 개발자로써의 공감과 더불어 좀 더 쉽게 이해를 이끌어낸다. |
|
자바 세상의 빌드를 이끄는 MAVEN |
|
2009년도에 같은 저자가 출간한 "자바 프로젝트 필수 유틸리티"를 읽고, 자바프로젝트에서 Maven을 적용하려고 하였다. Maven이 표준화 및 의존관계 라이브러리 관리에 강점을 가진다는 점을 적극 활용하기 위하여, 모 프로젝트의 프로토타이핑(prototyping)기간에 Maven으로 기본적인 빌드환경을 만들고 프로젝트 표준에 맞는 아키타입(archetype)까지 만들었었다. 하지만, "자바프로젝트 필수 유틸리티"는 자바 프로젝트에서 필요한 전반적인 툴을 개념적으로 이해하는데는 도움이 되었으나, 책에서 나온 내용을 따라해 보면 잘 안 되는 부분이 많았고(담당자들의 불만이 많았던 부분이다. 아마도 환경부분에 대해서 다른 부분이 있었으리라...), Maven을 전문적으로 다루지 않았다. 결국, "관례에 따른 표준"을 벗어나는 이슈들을 해결하는데, 너무 많은 시간이 소요되었고, 급박한 프로젝트 일정에 쫓겨, Maven은 "은탄환(Silver Bullet)에 불과하다"라는 주장에 반박도 못하고, Ant를 사용하게 되었다. 작지 않은 프로젝트에서 Ant 스크립트(Script)는 점점 더 복잡해졌고, 의존관계 라이브러리들 때문에 빌드(Build)가 실패하면 문제해결에 많은 노력과 시간을 소모하였다. ("자바 세상의 빌드를 이끄는 메이븐"이 조금 더 빨리 출간되었더라면 그렇게 고생을 하지 않았을 텐데.. ㅠㅠ) 최근에는 각종 오픈소스 프로젝트와 전자정부 프레임워크에서 Maven을 사용하고 있기 때문에, 많은 개발자들이 Maven을 사용하고 있다. 하지만, 저자가 이야기한 바와 같이, 참조할 만한 책들이 많지 않다. 과거에 Make나 Ant로 빌드 스크립트를 만들어 본 경험을 바탕으로, Maven의 설정파일(pom.xml)을 열어 본 개발자들은 당황하고(내자신도 그랬다), Maven의 기본개념을 이해하지 못한 채, 정해진 구조에 따라서만 개발해야 하는 아주 경직된 빌드 툴이라고 치부하고는, 개발자가 마음대로 target이나 의존관계를 설정할 수 있는 Ant만을 추구해왔던 것은 아닌가 생각헤본다. 이러한 현실에서, Maven의 실체에 관하여 상세하게 설명해준 책을 쓴 저자의 노력을 높이 사고 싶다. 책의 내용은 별도로 요약해서 올리겠다. Maven에 관한 개인적인 생각 지속적 통합툴(Continuous Integration)의 대표적인 툴도 Hudson이라고 하더니만, 이 툴은 하필 Maven이라는 이름을 지었을까.. maven의 사전적의미는 "박식한 사람" "통달한 사람" 이라는 의미이다. 아파치의 메이븐 프로젝트 홈페이지에서는 "Maven, a Yiddish word meaning accumulator of knowledge" 라고 되어 있다. "Maven은 이디쉬어로 지식을 축적한 사람"이라는 의미?? 위키피디아에서는 다음과 같이 이야기하고 있다. "A maven (also mavin) is a trusted expert in a particular field, who seeks to pass knowledge on to others. The word maven comes from Hebrew, via Yiddish, and means one who understands, based on an accumulation of knowledge." "Maven은 특정 분야에서 신뢰할 수 있는 전문가이며, 지식 전파를 추구한다. maven이라는 단어는 히브리어에서 유래하였는데(이디쉬어를 거침), 축적된 지식에 근거하여 이해하는 사람을 의미한다. " "Maven이 빌드, 문서화, 리포팅, 의존관계 라이브러리 관리, 배포 등을 관리할 수 있다", "특정 도메인의 전문가", "관례에 따른 표준"이라는 문구가 눈에 들어온다. "(빌드/배포/라이브러리 관리 분야에서) 많은 사람들의 경험을 통해서 가장 합리적이라고 생각되는 지식들을 모아서, 표준화시켜(저장소/디렉토리구조/빌드 및 배포 절차 등), 빌드/배포/관리/운영을 지원하는 툴"이라고 생각해보니, maven이라는 이름이 아주 그럴 듯하다.
|
|
현업에 종사하는 사람이라면 익숙하게 들었을지도 모르지만 그렇지 않은 사람들에게는 생소한 단어이다. 프로그래밍을 하면서 많은 사람들이 관심을 갖는 부분은 프로그래밍 언어에 관한 문법이나 사용법에 관심을 많이 갖는다. 반면에 프로젝트를 완성하기 위한 기본적인 환경설정에 관한 관심이 낮은 것은 사실이다. 환경설정은 프로젝트 시작할 때, 한번만 설정하면 프로젝트가 끝날 때까지 수정할 일이 없기 때문이다. 이러다 보니까 자주 많은 시간과 관심을 갖기가 어렵다. 이 책을 읽으면서 프로젝트를 준비하기 위해 반드시 중요하게 집고 넘어가야 하는 부분이 환경설정에 관한 부분이라는 것을 알게 되었다. Java에 대한 경험이 없다 보니까 아직까지 메이븐의 정확한 기능에 대해서는 의문이 있는 것은 사실이다. 내가 Java을 공부한다면 반드시 메이븐에 대한 지식이 필요할 듯 한데, 직접 사용하지 않고 책으로만 읽으려니까 내용이 완벽하게 이해하기가 무척 어려웠다. Java에 대한 관심 때문에 책을 한 권 사서 공부하려고 마음을 먹고 있다. 조만간 직접 설치하면서 기능을 탐독하면 지금보다는 더 이해하기가 수월할 것이다. 메이븐이 기능을 대략적으로 살펴본다면 Java의 객체지향 성향으로 인해 Sub project와 연계되어 실행을 하게 되는데, 이 때 유용하게 연결할 수 있다는 것이 메이븐 기능의 핵심인 것으로 보인다. 이 책의 소개 글에서도 설명하였듯이 메이븐은 여러 개발자들에게 익숙하지 않은 낯선 툴임에는 분명하다. 하지만 메이븐을 충분히 활용할 수 있도록 이 책이 도와줄 것이다. 또한 개발자들이 공동으로 작업할 수 있는 환경을 지원하므로 Java의 객체지향 환경에서 아주 유용하게 활용할 수가 있다. 익숙하지는 않지만 기존의 빌드 툴과는 분명 차별화된 기능이 있다. 이는 좀더 빠르고 효율적으로 프로젝트를 진행하고 완성할 수 있는 방법이다. 메이븐의 세세한 기능까지 언급할 수는 없지만 이 책을 통해서 메이븐의 대략적인 기능을 파악한 것만으로도 나에게는 많은 도움이 되었다. 이 책에서는 메이븐의 기능이나 설정에 관해 자세히 설명하고 있다. 빌드 툴인 메이븐은 많은 기능을 가지고 있는 것 같다. 아직 메이븐의 실체를 완벽하게 파악하지 못해 어떠한 기능들이 있는지를 설명할 수 없다는 것이 아쉬움으로 남는다. 이 책을 읽으면서 Java을 배우는 길이 쉽지만은 않다는 것을 새삼 깨닫게 되었다. 몸으로 직접 해봐야 하는데 책으로만 읽으니까 이해의 깊이와 속도에도 한계가 있는 듯 하다. Java 입문을 메이븐을 이용하여 열심히 공부해봐야겠다. 시작은 미흡하지만 그 시작이 위대해질 것이다. |
|
작년 가을 즈음인게 여름즈음인가 |
|
메이븐 |
|
우리는 지금까지 프로젝트를 진행하면서 사용되는 프레임워크 구조나 필요한 라이브러리들을 설치하여 사용해 왔다. 하지만 프로그램을 만들고 배포할때나 해당 라이브러리를 찾는 불편함은 누구든지 느꼈을 것이다. 그 몇 가지 불편함들은 첫째로 프로젝트를 생성할 때마다 디렉토리 구조와 프로젝트 구조설정에 시간을 많이 낭비했다. 둘째로 프로젝트에 필요한 라이브러리들을 찾아 참조하는데 시간을 낭비했다. 셋째로 빌드를 하고 배포시 라이브러리로 생성할 때에 시간을 낭비했다. 하지만 이제 메이븐은 그동안 우리가 느꼈던 불편함들을 말끔히 해결해 줄 빌드 툴이다.
메이븐이란, 사전적으로는 ‘지식을 축적한 자’, ‘숙련자’, 또는 ‘프로’ 라는 뜻을 지니고 있다. 마켓 메이븐, 즉 시장에서의 메이븐이라고 하면, 다양한 제품, 상점, 서비스 등 쇼핑 전반적인 사항에 관심을 갖고 다양한 매체를 통해서 정보를 수집하는 사람들을 일컫는다. 그러니까 ‘쇼핑의 숙련자’, ‘쇼핑의 프로’ 라고 할 수 있다. 이들은 상품을 둘러보고 구매하는 쇼핑 그 자체에 대해서 많은 지식을 갖고 있을 뿐 아니라, 자신들의 경험이나 지식을 다른 사람들과 공유하고자 하는 성향이 강해서 입소문의 발신자 역할을 한다고 볼 수 있다.
이 책은 상당수의 자바 오픈 소스 프로젝트가 메이븐을 빌드 툴로 사용하지만, 이를 현업에 적용하는 것을 어려워하는 개발자를 위해 기획되었다. 메이븐을 처음 접하는 개발자도 무리 없이 학습하게 하려고 저자가 경험했던 프로젝트를 기반으로 프로젝트 시작부터 끝까지 메이븐을 실습하게 구성했다.
저자는 서문에서 메이븐 책을 쓰게 된 첫째 이유는 저자가 책을 쓰고 있는 시점에 국내에 메이븐 책이 한권도 나오지 않았기 때문이라고 했다. 이 책으로 인해 개발자들이 삽질하는 시간을 줄일 수 있도록 하기 위해서 였다. 둘째 이유는 메이븐에 녹아 있는 빌드툴과 관련한 접근 방법을 개발자들이 느껴 보기를 바랐다. 셋째 이유는 개발자 각각의 성장을 위해서라고 했다. 특히 메이븐을 활용하고 싶지만 두려움을 느끼는 개발자, 몇 번의 시도를 했지만 번번이 실패를 거듭했던 개발자, 현재 메이븐을 사용하고 있지만 기본적인 기능만 활용하고 있는 개발자, 메이븐을 사용하면서 반복적인 삽질을 하고 있는 개발자에게 도움을 주기 위함이라고 했다.
이 책은 단순히 메이븐의 사용법만을 전달하는 책이 아니다. 오히려 문제가 많은 현실가운데 이상향을 그리고, 메이븐을 손에 든 채 이상향을 향해 한 걸음씩 전진하는 개발자의 용기를 보여준다. 그리고 저자의 회고 글을 통해 개발자의 고뇌와 시행착오 그리고 마침내 얻게 되는 희열을 엿보게 된다. 메이븐에 관심 있는 개발자들에게는 네비게이션과 같은 역할을 하므로 많은 도움이 될 것이다. 급변하는 개발 환경에서 새로운 개발 방법과 마주하는 것을 두려워하지 않는 개발자에게 이 책을 강력 추천한다. |
|
저자의 전작인 자바 프로젝트 필수 유틸리티와 너무 유사합니다. |