Similar documents
Introduction to CTIP

<B3EDB9AEC0DBBCBAB9FD2E687770>

Microsoft PowerPoint - chap01-C언어개요.pptx

Windows 8에서 BioStar 1 설치하기

PowerPoint 프레젠테이션

Microsoft PowerPoint - MonthlyInsighT-2018_9월%20v1[1]

슬라이드 1

wtu05_ÃÖÁ¾

5월전체 :7 PM 페이지14 NO.3 Acrobat PDFWriter 제 40회 발명의날 기념식 격려사 존경하는 발명인 여러분! 연구개발의 효율성을 높이고 중복투자도 방지할 것입니다. 우리는 지금 거센 도전에 직면해 있습니다. 뿐만 아니라 전국 26

슬라이드 1

PowerPoint Presentation

<C3E6B3B2B1B3C0B C8A32DC5BEC0E7BFEB28C0DBB0D4292D332E706466>

consulting

1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과

SIGIL 완벽입문

..1,2,3,

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

....pdf..

Microsoft PowerPoint - aj-lecture1.ppt [호환 모드]

Windows 10 General Announcement v1.0-KO

행정학박사학위논문 목표모호성과조직행태 - 조직몰입, 직무만족, 공직봉사동기에미치는 영향을중심으로 - 년 월 서울대학교대학원 행정학과행정학전공 송성화

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>

IP 심화 라우팅프로토콜적용시 라우팅테이블에서 이니셜이있는네트워크를설정하는것 : onnected 직접연결된네트워크를의미한다. 그러므로라우팅은 나는이런네트워크와연결되어있다. 를직접연결된라우터들에게알려주는것 1>en 1#conf t 1(config)#router rip 1

.....hwp

소규모 비즈니스를 위한 플레이북 여기서 다룰 내용은 다음과 같습니다. 1. YouTube 소개 2. YouTube에서 비즈니스를 위한 채널 만들기 3. 눈길을 끄는 동영상 만들기 4. 고객의 액션 유도하기 5. 비즈니스에 중요한 잠재고객에게 더 많이 도달하기

Microsoft PowerPoint Android-SDK설치.HelloAndroid(1.0h).pptx

C++ Programming

표준 소개 자료

소프트웨어 검증 및 설계

View Licenses and Services (customer)

로거 자료실

0.筌≪럩??袁ⓓ?紐껋젾 筌

저작자표시 - 비영리 - 변경금지 2.0 대한민국 이용자는아래의조건을따르는경우에한하여자유롭게 이저작물을복제, 배포, 전송, 전시, 공연및방송할수있습니다. 다음과같은조건을따라야합니다 : 저작자표시. 귀하는원저작자를표시하여야합니다. 비영리. 귀하는이저작물을영리목적으로이용할

PowerPoint Presentation

DBMS & SQL Server Installation Database Laboratory

Microsoft PowerPoint - CSharp-10-예외처리

W7_Business_ 제품설계

표준프레임워크 Nexus 및 CI 환경구축가이드 Version 3.8 Page 1

Microsoft PowerPoint - jfeature장범석서재원박동현.pptm

152*220

JDK이클립스

Microsoft Word - 4장_처짐각법.doc

<B3EDB4DC28B1E8BCAEC7F6292E687770>

슬라이드 1

untitled

[Brochure] KOR_TunA

È޴ϵåA4±â¼Û

01¸é¼öÁ¤

SANsymphony-V

untitled

»êÇÐ-150È£

저작자표시 - 비영리 - 변경금지 2.0 대한민국 이용자는아래의조건을따르는경우에한하여자유롭게 이저작물을복제, 배포, 전송, 전시, 공연및방송할수있습니다. 다음과같은조건을따라야합니다 : 저작자표시. 귀하는원저작자를표시하여야합니다. 비영리. 귀하는이저작물을영리목적으로이용할

JUNIT 실습및발표


[서비스] 1. 오프닝 네트워킹 파티 (전체 공통) (1/13(월) 밤 9시) FAST TRACK ASIA와 CAMP에 대해 소개하고, 3개 코스의 전체 참가자들의 소개 및 네트워킹을 진행합니다. 2. 패스트트랙아시아 파트너 CEO들과의 네트워킹 파티 (전체 공통) (

이도경, 최덕재 Dokyeong Lee, Deokjai Choi 1. 서론


º´¹«Ã»Ã¥-»ç³ªÀÌ·Î

¿©¼ººÎÃÖÁ¾¼öÁ¤(0108).hwp

041~084 ¹®È�Çö»óÀбâ

Level 학습 성과 내용 1수준 (이해) 1. 기본적인 Unix 이용법(명령어 또는 tool 활용)을 습득한다. 2. Unix 운영체계 설치을 익힌다. 모듈 학습성과 2수준 (응용) 1. Unix 가상화 및 이중화 개념을 이해한다. 2. 하드디스크의 논리적 구성 능력

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");

슬라이드 1

Social Media and Social Computing

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

178È£pdf

Office 365, FastTrack 4 FastTrack. Tony Striefel FastTrack FastTrack

문서의 제목 나눔고딕B, 54pt

병원이왜내지최종본1

이 드리는 혜택 완벽 을 위한 발환경 : Team Foundation Server 200 & CAL 제공 최저의 비용으로 구현을 위해 Visual Studio Team Foundation Server 200 서버 라이센스와 CAL이 에 포함되어 있습니다 을 모든 팀원이

열거형 교차형 전개형 상승형 외주형 회전형 도해패턴 계층형 구분형 확산형 합류형 대비형 상관형 (C) 2010, BENESO All Rights Reserved 2

C# Programming Guide - Types

*2008년1월호진짜

쉽게 풀어쓴 C 프로그래밊

The Pocket Guide to TCP/IP Sockets: C Version

System Recovery 사용자 매뉴얼

에스디엘팜플렛-최종.cdr

Microsoft Word - release note-VRRP_Korean.doc

내지-교회에관한교리

SQL Developer Connect to TimesTen 유니원아이앤씨 DB 기술지원팀 2010 년 07 월 28 일 문서정보 프로젝트명 SQL Developer Connect to TimesTen 서브시스템명 버전 1.0 문서명 작성일 작성자

소식지수정본-1

연구노트

**09콘텐츠산업백서_1 2

본 강의에 들어가기 전

Microsoft PowerPoint - 2번째발표(최종).pptx

750 1,500 35

마켓온_제품소개서_ key

슬라이드 1

Studuino소프트웨어 설치

게시판 스팸 실시간 차단 시스템

PowerPoint 프레젠테이션

Cloud Friendly System Architecture

Chapter ...

win8_1±³

TTA Journal No.157_서체변경.indd

ISP and CodeVisionAVR C Compiler.hwp

PowerPoint Template

목차 I. CI 정의 II. CI 필요성 III. CI 기능및특징 IV. CI 제품 V. Hudson VI. 적용방안 VII. 결론 - 1 -


CD 2117(121130)

Transcription:

허드슨을이용한지속적통합 초판 PDF 1.0 2015년 7월 10일지은이장윤기펴낸이한기성펴낸곳인사이트편집송우일등록번호제10-2313호등록일자 2002년 2월 19일주소서울시마포구서교동잔다리로 119 석우빌딩 3층전화 02-322-5143 팩스 02-3143-5579 블로그 http:// blog.insightbook.co.kr 이메일 insight@insightbook.co.kr ISBN 978-89-6626-161-1 이책의정오표는 http://www.insightbook. co.kr/55151에서확인하실수있습니다. Copyright 2012 장윤기이책내용의일부또는전부를재사용하려면반드시저작권자와인사이트출판사양측의서면에의한동의를얻어야합니다.

차례 추천의글지은이의글책의구성감사의글 X XV XVI XVIII 01. 지속적통합이해 1 1.1 역할별고민거리 2 1.2 지속적통합이란? 4 1.3 지속적통합도구도입 6 1.4 형상관리 7 1.5 빌드 9 1.6 테스트 10 1.7 코드품질검사 13 1.8 배포 16 1.9 결과피드백 20 1.10 지속적통합도입시주의사항 23 1.11 지속적통합적용베스트프랙티스 27 1.12 요약 30 02. 지속적통합서버 31 2.1 지속적통합도구선정기준 31 2.2 지속적통합도구 36 2.3 허드슨이란? 40 2.4 허드슨특징 42 2.4.1 쉬운설치 42 2.4.2 쉬운환경설정 42 2.4.3 형상관리감시기능 43 2.4.4 결과피드백기능 44 2.4.5 빌드도구통합과원격빌드기능 44 2.4.6 테스팅도구와통합 45 2.4.7 플러그인제공 45

2.5 허드슨과젠킨스 45 2.6 요약 47 03. 허드슨설치 49 3.1 설치준비 49 3.1.1 JDK/JRE 설치 50 3.1.2 톰캣설치 51 3.1.3 허드슨다운로드 52 3.2 설치 52 3.2.1 독립형으로실행 53 3.2.2 톰캣기반으로실행 54 3.2.3 그외설치 55 3.3 허드슨홈디렉터리 57 3.3.1 홈디렉터리의이해 57 3.3.2 여러개홈디렉터리지정 59 3.3.3 홈디렉터리백업 61 3.4 다국어지원 62 3.5 업그레이드 64 3.6 요약 64 04. 환경설정 65 4.1 환경설정개요 65 4.2 글로벌환경설정 68 4.3 글로벌환경변수 73 4.4 JDK 설정 76 4.5 플러그인관리 77 4.5.1 업데이트 77 4.5.2 설치가능 78 4.5.3 설치됨 79 4.5.4 고급 81 4.6 요약 82 05. 지속적통합작업정의 83 5.1 작업정의하기 83 5.2 작업스케줄링 91 5.3 작업과작업간연계 96

5.3.1 후속작업정의 97 5.3.2 Build Trigger를이용한연계 98 5.3.3 작업간연계확인 100 5.4 동시작업제어 102 5.5 작업이력관리 105 5.6 작업정보백업 108 5.7 작업정의세부옵션설명 114 5.7.1 기본프로젝트설정 115 5.7.2 추가프로젝트설정 117 5.7.3 형상관리연계 119 5.7.4 빌드작업실행 120 5.7.5 빌드작업정의 121 5.7.6 빌드후속작업 122 5.8 요약 124 06. 형상관리연계 128 6.1 허드슨과형상관리연계 129 6.1.1 글로벌설정 131 6.1.2 작업별설정 134 6.2 형상관리모니터링 139 6.2.1 형상관리주기적인모니터링 139 6.2.2 형상관리에서허드슨작업실행 142 6.3 허드슨작업영역공유 146 6.4 형상관리설계에따른허드슨작업구성 148 6.5 허드슨과깃연계 156 6.5.1 깃에대한이해 156 6.5.2 글로벌설정 158 6.5.3 작업정의설정 158 6.6 요약 160 07. 앤트를이용한빌드연계 161 7.1 앤트이해하기 161 7.2 앤트스크립트정의 163 7.3 앤트실행을위한옵션 165 7.4 앤트와허드슨연계 168 7.4.1 앤트글로벌설정 168

7.4.2 앤트연계작업정의 170 7.4.3 앤트에서허드슨환경변수이용 174 7.5 요약 177 08. 메이븐을이용한빌드연계 179 8.1 메이븐이해하기 179 8.1.1 메이븐기본구조 180 8.1.2 생명주기 185 8.2 메이븐과허드슨연계 188 8.2.1 메이븐글로벌설정 188 8.2.2 메이븐빌더정의 192 8.2.3 메이븐에서허드슨환경변수이용 196 8.3 허드슨과넥서스연계 197 8.3.1 저장소이해 197 8.3.2 넥서스이해 199 8.3.3 허드슨작업정의 205 8.4 요약 208 09. 테스트도구연계 210 9.1 자동화된테스트 210 9.2 코드커버리지 217 9.3 성능테스트 222 9.4 요약 229 10. 품질검사도구연계 231 10.1 코드품질검사 231 10.2 체크스타일 233 10.3 PMD 239 10.4 파인드버그 243 10.5 요약 248 11. 결과보고와피드백 250 11.1 RSS 연동 251 11.2 이메일연동 254 11.3 요약 265

12. 작업정의추가기능 267 12.1 파라미터기반작업정의 268 12.1.1 문자열파라미터 269 12.1.2 선택파라미터 272 12.1.3 불린파라미터 273 12.1.4 파일파라미터 275 12.1.5 실행파라미터 277 12.1.6 비밀번호파라미터 279 12.1.7 서브버전파라미터 280 12.1.8 파라미터트리거 281 12.2 원격작업연계 284 12.2.1 슬레이브설치 286 12.2.2 마스터 / 슬레이브설정 289 12.2.3 작업정의 297 12.3 다중설정작업정의 299 12.4 작업정의상속 303 12.5 요약 307 13. 배포 309 13.1 배포정책수립 309 13.2 배포시스템설계 312 13.3 허드슨작업정의 315 13.4 요약 320 14. 보안 321 14.1 보안적용 321 14.2 사용자인증 323 14.2.1 허드슨자체데이터베이스이용 (Hudson s own user database) 323 14.2.2 유닉스계정정보이용 (Unix user/group database) 328 14.2.3 서블릿컨테이너이용 (Delegate to servlet container) 328 14.2.4 LDAP 이용 331 14.3 권한관리 (authorization) 331 14.3.1 모든사용자에게모든권한부여 332 14.3.2 로그인사용자에게모든권한부여 332 14.3.3 매트릭스기반권한부여 332

14.3.4 프로젝트매트릭스기반권한정책부여 335 14.3.5 이전버전방법사용 336 14.4 보안해제 336 14.5 요약 337 15. 지속적통합도구확장 338 15.1 플러그인생성 338 15.2 소스코드이해 348 15.2.1 자바소스코드 349 15.2.2 젤리화면구성 353 15.2.3 pom.xml 파일 357 15.2.4 확장가능영역 358 15.3 이클립스연계 359 15.4 요약 363 16. 부록 1: 개발도구연계 364 16.1 이클립스연계 364 16.2 넷빈즈연계 367 16.3 요약 369 17. 부록 2: 예제 371 17.1 예제다운로드 371 17.2 데이터베이스연동 374 17.3 이클립스연동 376 17.4 요약 377 18. 부록 3: 허드슨 3.0 378 18.1 주요변경내용 378 18.2 다운로드와실행 380 18.3 요약 383 찾아보기 384

추천의글 출근하자마자커피한잔을뽑아컴퓨터앞에앉는다. 새벽네시에지속적통합도구가빌드한일일빌드산출물을확인한다. 어제구현한코드에서중복코드는없는지, 코딩표준에맞지않는코드는없는지, 단위테스트가깨진부분은없는지등을확인하고수정할부분이있다면고친다. 출근하자마자하는일이라 10~20분정도투자하면작업을마칠수있다. 9시 19분일일회의를알리는알림노래가흘러나온다. 9시 20분부터프로젝트관련자들이모여 15분내외로회의를진행한다. 10시부터업무시작이다. 이슈관리시스템에등록된업무중우선순위가가장높은업무를하나할당한후개발을진행한다. 단위테스트코드를만들고프로덕션코드를구현하면서네시간을투자해개발을완료했다. 그런다음버전관리시스템에소스코드를커밋하면지속적통합도구가단위테스트와통합테스트를진행한후성공적으로빌드되었음을알린다. 지속적통합도구는빌드결과물을웹애플리케이션서버에배포해테스트할수있는상태로만든다. 이슈관리시스템업무를기획자에게할당해테스트를요청한다. 이후 QA 단계까지진행해해당기능에대한개발작업을완료한다. 기획자와 QA가테스트를진행하는동안최근에관심이있던기술을학습하는데한시간정도투자한후퇴근한다. 내가꿈꾸는이상적인개발자의하루다. 이같은하루를만들기위한중심에지속적통합도구가있다. 이책은지속적통합도구를활용해단순반복작업을자동화해나가는과정을단계적으로접근하고있다. 이책은, 세계적으로많은곳에서사용하는허드슨이라는지속적통합도구에대해깊이있는내용을다룬다. 지속적통합, 빌드, 배포에관심이있다면이책을보며지속적통합환경을구축해보기바란다. 우리는컴퓨터가해야할많은일을직접하고있다. 지금부터라도컴퓨터가할수있는, 해야할일은컴퓨터에위임하고우리는좀

더가치있고, 의미있는일에시간을투자하면좋겠다. 이같은환경을만드는 데이책이조금이나마도움이되리라생각한다. 자바지기박재성 지금은젠킨스라는또다른프로젝트가분가했지만, 최초 java.net에서오픈소스로시작된허드슨은오라클이탐낼만큼완성도가높은프로젝트다. 대개서버에서돌아가는작업들에문제가발생하면터미널로들어가서로그를뒤적거려 CSI처럼분석하지만허드슨 / 젠킨스는이일을웹브라우저에서할수있다. 언제부터문제가시작되었는지, 어떤코드가바뀌어문제인지등을지속적인통합이라는방법으로쉽게알수있게되었다. 아주오래전부터 OKJSP 사이트관리도구로사용 (http://okjsp.pe.kr:8080/, 공개페이지다 ) 하고있었는데, 이렇게책으로만나게되어서기쁘다. 더구나이책에는국내큰프로젝트에서사용한경험이녹아들어있어서인터넷에조각조각흩어진정보와는다른통찰력을얻을것이다. 허드슨은플러그인이 300개가넘는좋은플랫폼형오픈소스다. 작은프로젝트라도지속적인통합도구를적용해시작한다면든든한지원군을얻은느낌을받을것이다. 이책은그시작에좋은도우미가될것이다. 자바개발커뮤니티 OKJSP 대표운영자허광남 2005년소프트웨어개발프로젝트의화두로실용주의가급부상하고있었다. 전세계소프트웨어개발프로젝트의 80% 이상이원래계획했던목표를다이루지못한다는통계도한몫거들었던것으로기억한다. 실용주의프로그래머 의데이비드토마스는당시인터뷰에서 개발자를교육하는실용적방법이있는가 란질문에대해, 소프트웨어개발은컴퓨터와프로그래밍언어에대한것이아닌, 어떤그룹의사람들이다른그룹의사람들의문제를해결하도록도와주는것으로, 고귀한것은사람을돕는일 이란답변을했다. 즉, 당시교육환경은이런소양을갖춘사람을배출하는일과거리가멀었다는의미다. 지난해 5월, 지속적통합이란주제로책을쓸계획을세웠다는저자의연락

을받았다. 프로그래머를위한자동화가필요한시기고그런일들이조직을위한자동화로연결되며, 궁극적으로사람들을돕는일로연결될수있다는논지였다. 프로젝트경험에서비롯된저자의이야기에빠져드는데는오랜시간이걸리지않았고, 이내용이출판되길바라는마음이생겼다. 행운은때때로열어놓은줄몰랐던문으로몰래들어온다고했던가? 독자들이 다른사람을돕는고귀한일 에대해생각해볼수있는행운을거머쥐는기회가되리라생각한다. 리시드대표조규형 사람이발전하려면매일의노력도중요하지만, 이를한결같이할수있는원동력인 비전 이있어야한다. 단순반복적이고, 소모적인일을조금이라도덜하고, 더생산적이고재미있으며보람있는일을할수있어야오늘보다나은내일을맞이할수있다. 다소거창하지만, 이책은적어도그런생각이드는책이다. 일상에매몰되는것이아니라, 어떻게하면더쉽고빠르고편하게일할수있을지고민하게하는책이다. 허드슨은전세계적으로광범위하게사용되는지속적통합관리도구다. 빌드의악몽에서벗어나고자하는많은개발자의호응을얻고있으나, 국내개발자들에게는널리알려져있지않은편이다. 이책에서지은이는대형프로젝트경험을살려, 실전에서필요로하는사항들을알기쉽고, 명쾌하게알려주고있다. 특히더익숙한용어와한국 IT 실정에맞는내용으로구성되어있다. 도구는도구일뿐이다. 도구는주인을닮는다. 쓰는사람이어떻게현명하고똑똑하게잘쓰느냐에따라 120% 효율을낼수도있고, 50% 도안되거나곧갖다버려야하는쓰레기가될수도있다. 지은이가알려주는도구의쓰임새를어떻게현명하게활용할것인지곰곰이생각하면서읽어내려가면좋을것이다. 나를위한자동화 라는비전을갖고, 이를일상에서적용해볼수있는방법을차근차근알려주는이책이일신우일신하는개발자, 프로그래머로거듭나는데도움이되리라믿는다. 오라클컨설턴트임수경

국내 SI, 특히금융권차세대를경험하면서적은예산에단납기로프로그램을개발해야하는 IT 서비스업체는과거의소프트웨어개발방법론을그대로유지하고서는절대로사업을진행할수없는한계에부딪혔다. 이에실용주의개발방법론이대두되었으며현재대형 SI 회사에서도 개발 30% 이상이진행되었을때부터는통합테스트를진행하자 또는 주요프로세스중심으로프로그램을개발하게하고, 이를바탕으로시스템을통합하자 라는방법론이키워드가되는상황이다. 이때가장필요한개념이지속적인통합이지만아직까지는이에대한정확한지침이나방향성이부족한것이현실이다. 이러한시기에지속적통합이라는주제의이책이어쩌면한계에부딪힌소프트웨어개발프로젝트환경에한계를돌파할수있는작은계기가되었으면하는바람이다. LG CNS 모델링팀장송혜린 XP 방법론에는단순 (simplicity), 의사소통 (communication), 피드백 (feedback), 용기 (courage) 등네가지주요가치가있고, XP 실천 (practice) 중에는짝프로그래밍 (pair programming), 리팩터링 (refactoring), 테스트주도개발 (testdriven development), 코딩표준 (coding standard), 메타포 (metaphor) 등이있다. 그리고우리는소프트웨어를개발할때네가지 XP 실천을이미하나씩실천하고있다. 그렇지만아직은많이낯선실천이하나있는데바로지속적통합이다. 지속적통합이란반복적으로이뤄지는통합작업을자동화하고단순화해지속적으로수행함으로써, 소프트웨어품질을개선하고통합에따른위험요인을줄이자는것이다. 항상그렇듯이프로젝트에서개발자들은대부분로컬에서개발을완료한후에통합하고통합테스트를수행하게되는데, 이러한통합및통합테스트과정은참으로지루하고고통스러운과정이다. 개발자로컬환경에서는멀쩡하게잘돌아가던코드들이통합서버에올려실행하면예상치도못한에러가곳곳에서발생하고, 이미협의하여개발한모듈간인터페이스는언제부터변경되었는지연동이제대로되지않는경우도비일비재하다. 또, 시연이얼마남지도않았는데하나고치면다른데서문제가생기는경우도일상다반사다. 이렇게고통스러운통합과정을해결하기위해마틴파울

러가강조했던프랙티스가바로작은릴리스 (small release) 와지속적통합이다. 지속적통합은수년전부터이슈가되어왔고, 현재는상당한성숙단계에이르렀다고할수있다. 또, 손쉽게지속적통합을적용하기위한다양한 CI 서버가개발되었고, 알게모르게많은프로젝트에도입되어큰도움을주고있다. 내가일하는회사에서도 SVN을이용한형상관리, 메이븐 (Maven) 을이용한저장소및의존성관리, 허드슨을이용한빌드및배포자동화등을수행하고있다. 또, 허드슨을이용하여지속적통합작업을수행할때, 우리솔루션을허드슨플러그인으로연동하여소스코드의품질, 보안취약성등을관리하고있다. 어떻게보면, 이렇게 SVN, 메이븐, 허드슨을사용하여애플리케이션생산라인을관장하는노하우는몇몇개발자나업체들만사용해온것이다. 이러한상황에서애플리케이션개발전과정을관장할수있는책이나왔다는데놀라움을금할수가없다. 더군다나친구가그런책을써서더욱기쁘고자랑스럽다. 지은이의경험과고뇌가책상속에서사장되는얘기들이아니라, 마치드라마뿌리깊은나무에서세종대왕이훈민정음을전염병처럼백성들에게전파하고자했던그마음처럼, 같은이유로고민하는많은개발자와회사에전염병처럼전파되어아낌없이사용되기를바랄뿐이다. 유니버셜리얼타임대표이사, JCO 초대회장박용우

지은이의글 처음프로그래밍에입문했던시절과처음회사에들어가프로젝트에참여했던 일은평생잊을수없는기억입니다. 모든 처음 은가장순수하고호기심넘치 며열정과즐거움이있다는의미이기때문입니다. 하지만많은사람이프로그 래밍의즐거움에빠져일을시작하지만얼마지나지않아후회하기시작하고, 저도후회했던사람중한명입니다. 그리고 후회 라는말을하는데그리긴 시간이필요하지않았습니다. 일은즐겁지만처우와환경이열악하고, 열심히 일하고뛰어난지식을지니고있어도제대로인정받지못하는분위기속에시 간이가면갈수록즐거움보다는괴로움이더해지기때문입니다. 분명히프로그래밍이라는것이업무생산성을높이고, 사람이해야하는반 복작업을줄여주며, 기계의효율성도높여주는좋은작업임에는틀림없는데 그산업현장에뛰어든사람들에게는즐거움을주지못하는이유가무엇인지 고민하였습니다. 여러가지고민을거듭하던시절에제마음을파고든한마디 가있었습니다. 바로 사람을위한자동화 입니다. 관련내용을읽고찾아보고실행, 적용해보면서 사람을위한자동화 가아 니라 프로그래머를위한자동화 가더욱절실히필요함을느꼈습니다. 남을위 한자동화와기계를위한자동화, 조직을위한자동화가아닌바로 나 를위한 자동화가필요한시기입니다. 많은사람이 나 를위한자동화를시도하지만각자지식수준이다르고자동 화하는방법을모르며그일에시간을투자할만한여유가있지도않습니다. 그 러한이유로시도는하지만해결은못하고, 다시 후회 라는표현을해야하는 일이반복되는것같습니다. 나를위한자동화 를고민하고어떠한모습을담아야그것을성취할수있을 지고민하던시기에처음시도한것은빌드자동화였습니다. 화재보험사의차 세대프로젝트를진행하던당시에경력많고몸값비싼소프트웨어아키텍트 들의주된일이밤새서개발계에있는소프트웨어를테스트계와운영계로배

포하는작업이었습니다. 이클립스를실행하고소스코드를업데이트하는데만두시간이나걸렸고, 서버로이관해컴파일하는데만네시간이걸리는고단한작업이었습니다. 그리고중간에에러가하나라도나면이작업을다시처음부터시작해야했습니다. 통합개발도구와빌드스크립트를이용하였지만사람도힘들고조직도큰손해였습니다. 그리고그밤샘작업하던아키텍트중에내가포함되어있다는사실이더욱힘든일이었습니다. 이렇게고단한작업속에 나를위한자동화 를꿈꾸었고이때만난것이바로허드슨과앤트 (Ant), 메이븐 (Maven) 을조합한지속적통합활동이었습니다. 현재해당프로젝트는자동화된지속적통합활동을통해빌드와배포가안정화되어운영되고있습니다. 그회사에서근무하는많은개발자를빌드와배포악몽으로부터해방시켜준것입니다. 허드슨과첫만남이제게는큰성공이었고많은사람에게큰기쁨이되었습니다. 바로 나 를위한자동화에서시작된것이 우리를위한자동화 로발전한것입니다. 그렇다고허드슨이만능은아닙니다. 그리고빌드자동화를제공하는앤트와메이븐이삶의행복을주는핵심기술이되어주지도않습니다. 다만우리가 나 를위한자동화를꿈꾸고지속적으로시도하며반복적으로적용해나가는데큰도움이되는도구들이며그중핵심이바로허드슨입니다. 그리고그도움이되는도구들에대해공유하고같이생각해보려고이책을준비하였습니다. 책의구성 이책은크게다음과같이구성되어있습니다. 지속적통합의이해 허드슨을이해하려면지속적통합이추구하는내용을먼저이해할필요가있 습니다. 그러한지식없이허드슨을사용하는것은단순한기능을제공하는도 구를아무의미없이사용하는것뿐입니다. 이미지속적통합에익숙하다면이 내용은넘어가도좋습니다. 관련내용 : 1. 지속적통합이해

허드슨에대한이해지속적통합에대해이해한후지속적통합서버의역할과허드슨을설치하고환경설정하는부분을설명합니다. 이부분은본격적으로허드슨을이용해작업을정의하기전에준비해야할것들에대한내용입니다. 관련내용 : 2. 지속적통합서버, 3. 허드슨설치, 4. 환경설정 허드슨작업정의허드슨에서작업정의는지속적통합활동을위한첫단계입니다. 허드슨에는많은작업정의방법이제공되며그기능도매우뛰어납니다. 그러므로자신이원하는환경과목표에맞춰허드슨작업을정의하는방법을이해할필요가있습니다. 모든기능에대한설명이작업정의와관련있지만이중에서특히순수히작업정의에대한내용만을정리했습니다. 관련내용 : 5. 지속적통합작업정의, 12. 작업정의추가기능 도구연계지속적통합활동은여러도구를상호연계해서자동화된진행을추구합니다. 마치오케스트라지휘자역할과비슷합니다. 지휘자가직접악기를연주하지는않지만좋은소리를만들고갖가지상황에대처하기위해끊임없이지시하고관여하듯이허드슨은여러도구와유기적으로연동해절차를진행해나갑니다. 도구연계에대해가장많은부분을할애하였습니다. 관련내용 : 6. 형상관리연계, 7. 앤트를이용한빌드연계, 8. 메이븐을이용한빌드연계, 9. 테스트도구연계, 10. 품질검사도구연계, 11. 결과보고와피드백 기타내용 그외에보안과배포, 허드슨플러그인개발을통한확장기능에대해설명합니 다. 보안은특히중요한항목으로설명의맥락상책후반부에위치해있지만허 드슨을설치한이후가장먼저작업해야할항목이바로보안을적용하는것입 니다. 관련내용 : 13. 배포, 14. 보안, 15. 지속적통합도구확장

감사의글 마지막으로이책을쓰는시점에고마운일과즐거운일이많았습니다. IT 서비스환경에대해많이고민하던시절에만난현대해상화재보험차세대프로젝트는제자신이한단계도약한큰계기였습니다. 그리고그프로젝트에서얻은경험이바로이책을쓰는데기반이되었습니다. 그때같이일했던아키텍트들과프레임워크개발자들은평생스승으로기억될소중한분들입니다. 그리고현재진행하는차세대프로젝트도이전프로젝트에서경험한것을다시한번확인하고적용할수있는좋은기반입니다. 그리고같이일하는아키텍트들의또다른경험담이제게는더욱큰지식을쌓을수있는계기가되었습니다. 처음이책을준비하고기획하면서태블릿에서메모수준으로시작된내용을같이리뷰해주고의견준친구들인 29클럽멤버들에게고마움을표현하고싶습니다. 특히품질관리와관련해서조언해준이영석대표, 코드검사와커버리지에대해조언해준박용우대표, 그리고메모수준의기획서를들고출판사에갈수있도록도와준조규형대표에게고마움을표현합니다. 출간을허락해주신인사이트한기성사장님과편집자들께도감사합니다. 아무리좋은원고라도서랍속에서사장되면빛을발할수없는종이에불과할텐데출판을통해사람들과공유하고이야기할수있는계기를마련해주셨습니다. 그리고무엇보다주변에서많은도움을준가족을빼놓을수없습니다. 책을쓴다는것은즐거우면서도극도로민감해지는작업이라가족의도움없이는불가능했습니다. 항상기도로후원해주시는부모님께감사드리고혼자만의좋은집필공간을마련해주신장인, 장모님의후원과내짜증과민감함을다받아주고참아준사랑하는두딸해라, 해윤과사랑하는아내애리에게고마움을표합니다.

01 지속적통합이해 지속적통합 (Continuous Integration) 이라는용어를대다수소프트웨어엔지니어들이익숙하게받아들이지못하고있고, 알더라도이것을어떻게적용해성공시킬수있을지의문을제기하는사람이많다. 그만큼지속적통합이생각보다업계에많이알려져있지못하고, 적용하기에는아직은다소고민이되는부분이기때문이다. 그래도최근들어우리가아는것이상으로지속적통합에대한관심과이를프로젝트에도입하려는노력이서서히나타나고있으며알게모르게우리주변에이미도입되어움직이고있는경우가많다. 우리곁에지속적통합이다가온것이다. 지속적통합이소리소문없이다가오고있는이유는일반사용자를위한것이아닌개발자자신을위한자동화방법론이며기계를위한자동화가아닌사람을위한자동화라서개발자스스로깨닫지못하는사이에이미내부적으로적용되어실행되기때문이다. 지속적통합이개발자동화를추구하기때문에주목을받고있기는하지만, 반대로자동화라는말에굉장히부정적인반응을보이는사람이많다보니지속적통합도입을반대하고해당방법론을이해하지못하는경우도많다. 지금부터지속적통합이라는개념이무엇인지살펴보고이를도입함으로써얻을수있는장점과반대로이를도입할때추가로고민하고고려할것이무엇인지알아보겠다.

1.1 역할별고민거리 정보통신산업그중에서도소프트웨어산업의발전은기존에사람이수작업으 로처리하던일을자동화함으로써생산성을높였으며예상못할정도로다양 하게삶의질을향상시켰다. 이렇게소프트웨어산업이다른어떤산업보다빠 르게발전할수있었던것은소프트웨어개발자들의숨은노력의결과임이틀 림없는사실이다. 독자들이지금이글을읽고있는시간에도많은개발자가좋 은소프트웨어를만들기위해불철주야노력하고있을것이다. 그런데개발자들의노력이사람들의삶의질을높여놨다면이와는정반대로 시간이갈수록개발자들의만족도는점점떨어지고있다. 특히대한민국소프 트웨어개발자중본인업종을자랑스럽게여기거나자기일을가업으로자식 들에게물려주고싶다고생각하는경우를거의본적이없다. 이러한문제가발 생한이유는바로남을위한자동화와개선을생각했지, 정작자기일에대한 자동화와개선은등한시했기때문이다. 그뿐아니라관리자, 기획자, 품질관리자등의삶의만족도역시개발자들과 마찬가지로높지않다. 소프트웨어산업의발전과대중화로고객의눈높이는 상당히올라가있으며원하는기능과품질을더빠르게만족시켜주지못하면 해당소프트웨어는도태되거나간신히명맥만을유지하는상황이발생해서이 로인한정신적압박감이굉장히크기때문이다. 그렇다면소프트웨어산업에종사하는사람들이어떻게하면좀더행복해지 고삶의질을높일수있을까? 이문제는각조직의구성원과소프트웨어산업 을바라보는사람들의입장에따라차이가있을것이다. 먼저소프트웨어개발프로젝트조직을한번생각해보자. 현대프로젝트의 추세는분업화되고전문화되면서아무리조그만프로젝트라도다양한분야의 전문인력이모여일한다. 대표적인조직분류로보면프로젝트를관리하는프 로젝트관리자 (PM), PM 을도와프로젝트전반을관리하는프로젝트관리조직 (PMO), 구조를잡아가는아키텍트, 소프트웨어설계자, 설계를구현하는개발자와개발리더, 그리고소프트웨어의모양을아름답게하고사람친화적인모 습으로변화시켜주는디자이너등이대표적이다. 이사람들의역할과함께각 자소프트웨어분야에서고민하는것을정리하면표 1.1 과같다.

역할프로젝트관리자 (PM) 프로젝트관리조직 (PMO) 고민사항 하루에도수십번프로젝트상황에대해보고를받는다. 많은정보취득을위해노력해도프로젝트진행상황을한눈에파악하기어렵다. 정확한상황파악이어렵다보니프로젝트조직원들이야근을해야만일이잘되는것으로생각하는경우가많다. 프로젝트를성공시키기위해프로젝트효율성을높이고진행상태를정확히확인하고싶지만실무조직에서정확한상황을 PMO에공유하기를꺼린다. 프로젝트관리자가올바르게판단할수있도록정확한진행상태를보고해야하나쉽지않다. 아키텍트 소프트웨어, 하드웨어, 데이터베이스구조와각각의연관관계에대해설계한아키텍처가올바른지검증하고싶어하지만정확한검증이어렵다. 아키텍처가잘못되었다는것을확인하는데시간이너무오래걸린다. 아키텍처의문제점을발견했더라도이것을바로잡는것이상황상불가능한경우가있으며, 그모든책임을아키텍트가감당해야하는것에대해심리적압박감이있다. 설계자 소프트웨어설계가잘못된부분이있는지확인하고싶다. 개발자로부터설계상문제점에대해빠르게피드백을받고싶다. 개발리더 개발진척사항을정확하게확인하고싶다. 개발자들에게올바른개발방향을제시하고잘못된부분을빠르게찾아해결하고싶다. 개발자 모든개발과정이어렵고복잡하다. 설계자와개발리더, 품질관리자등과함께지속적으로의사소통을하며내용을확인해가고싶으나그러한환경이잘마련되어있지않다. 지적재산권, 보안등의강화로개발절차와환경통제가점점더심해지고, 이를처리하기위해반복적인작업을계속해야만한다. 내가개발하는컴퓨터에서는잘동작하는데다른사람의컴퓨터로배포만하면동작하지않는다. 품질관리자 개발자가개발한소프트웨어를빠르게인수받아서테스트할수있기를바란다. 표 1.1 역할별고민사항 표 1.1에서설명한것외에도각역할별로더많은고민거리가있다. 그리고문제사항이지속적으로발생하여괴롭힌다. 이모든것이결국에는소프트웨어생산성을떨어지게하고떨어진생산성으로인해소프트웨어산업종사자들은더욱힘든상황을맞이하며이는또다시소프트웨어생산성을떨어트리는악순환을일으키고만다.

1.2 지속적통합이란? 그림 1.1은소프트웨어개발프로젝트에서대부분사용하는개발생명주기다. 물론요구사항분석과설계등의작업, 마무리, 유지보수가있지만순수하게개발이라는측면에서는그림에나온여섯가지단계와크게다르지는않을것이다. 코드 배포 컴파일 검사 패키징 테스트 그림 1.1 역할별고민사항 여기서중요하게생각할것은이여섯개단계가계속반복된다는것이다. 큰의미에서는처음부터끝까지한번의작업으로모두완료될수있지만, 소프트웨어업그레이드나버그수정을위해단계를다시시작해야하는경우가계속생긴다. 그리고한소프트웨어내에있는각라이브러리나공통 API의경우는소프트웨어개발전체과정중에서반복적인개발주기가있으므로생명주기는반복적으로발생할수밖에없다. 이러한반복작업속에사람들은몇가지고민을하기시작했으며그내용은다음과같다. 6단계가얼마없는것같으나각단계별내부절차나처리해야할작업이생 각보다많고복잡하다. 단계별처리가복잡하고시간이많이소요되는관계로전체절차를자주반 복하기를꺼린다.

소프트웨어를개발하는데소요하는시간보다각절차를진행하는행정적절 차를처리하는데시간이더소모되는경우가있다. 그래서이러한문제를해결하고자다음과같이개발환경에대해새로운시 도를하기시작하였다. 소스코딩의생산성을높이려고통합개발환경을도입하였다. 소프트웨어개발생명주기에따른절차를자동화하기위해다양한빌드, 배 포도구등이등장하였고이를적극활용하기시작하였다. 워크플로나 BPM 같은프로세스관리 통합도구를이용해개발프로세스자 동화를시도하였다. 개발라이브러리에대한연관관계를개발자들이직접하지않고도구로자 동화한다. 이처럼개발자를위한자동화를시도하기시작하였고이러한개발자동화방법이소프트웨어생산성을높일뿐아니라소프트웨어결함을줄이는데큰도움이되었다. 그리고이전에는시간과절차상할수없던여러활동을자동화프로세스에포함시킬수있게되었다. 그뿐아니라개발과정을자동화함으로써개발생명주기에대한절차를더많이반복할수있게되었고, 그결과로소프트웨어결함이나문제점을더빠르게찾아낼수있는이점도얻게되었다. 이처럼빈번하게반복적으로개발주기를진행하는것을지속적통합 1 이라한다. 여기서주목할것은바로지속적이라는점이다. 사전적의미의 지속적 은어떠한상태가오랫동안계속유지되는것이지만지속적통합에서 지속적 은어떤행동을수시로반복수행한다는의미가더강하다. 실제로지속적통합활동에서강조하는것역시소프트웨어에대한통합을반복적으로, 그리고수시로수행하고테스트하라는것이다. 1 대략적인설명을통해눈치챘겠지만마틴파울러가지속적통합이라는용어를만들고이에대한내용을세상에알리기전부터이러한개발방법은이미산업에적용되고있었고많은사람이예전부터고민하던내용이다. 마틴파울러의글은 http://martinfowler.com/articles/continuousintegration.html 에서볼수있다.

그렇다면개발이라는측면에서지속적통합을하지않는소프트웨어프로젝 트에서는어떤문제점들이나타날까? 그내용을정리하면다음과같다. 전체통합시컴파일에러가발생할가능성이높다. 특정분야별테스트시문제가없었으나통합하여테스트시에러가발생한다. 개발자 PC에서는정상작동하였으나서버에배포하고난후에는동작하지 않는다. 특정한환경에서는정상동작하지만다른환경에서는동작하지않는다. 공통라이브러리나상호연동되는소스코드변경으로전체소프트웨어품질 에큰영향을미친다. 잘동작하던소프트웨어가갑자기성능문제가발생한다. 소프트웨어를업그레이드했더니잘되던기능에서문제가발생한다. 물론이모든내용이통합을자주하지않아발생하는문제라고 100% 단정할 수없지만최소한지속적으로통합한다면쉽게확인할수있는내용이라는점 이다. 1.3 지속적통합도구도입 지속적통합은사람이아닌자동화된프로세스를통해이루어질때비로소그 장점이있다. 자동화된도구가아니라사람이수동으로하는지속적통합을정 의한다면처음에는잘할수있으나, 시간이흐를수록작업을실행하지못하는 경우가계속생기고어느순간에는거의돌아가지않는상황이온다. 또아무리 수동으로통합작업을하더라도도구의도움없이모든복잡한절차를하나하 나개발자가스스로진행해나간다는것도여간성가신일이아닐수없다. 결 국지속적통합도구도입은바로개발자스스로작업을자동화하고개발자의 업무프로세스를개선하는데반드시필요한내용이다. 지속적통합도구도입이필요한또다른이유한가지는소프트웨어개발과 기업의글로벌화에있다. 이미많은기업이소프트웨어개발에서글로벌화를 진행하였거나진행하고있다. 예를들어낮에는미국에서개발이이루어지고

밤에는 12시간후에출근하는인도에서미국에서개발한내용을바탕으로개발작업을진행하는경우다. 이는한소프트웨어를 24시간개발할수있는환경이다. 개념은약간다르지만글로벌화의또다른예로공통모듈은한국에서개발하고, 공통모듈을응용한애플리케이션은중국에서개발하는경우도있다. 그리고이렇게개발한최종애플리케이션을유럽에서테스트하고최종적으로대만에서패키징해하드웨어에탑재하는경우도있다. 이렇듯한기업내에서도여러지역과국가를넘나들며개발을진행하는형태가늘어날수록수작업에의한통합작업은불가능해지며지속적통합을통한자동화된반복적인통합수요가늘어날수밖에없다. 현재시장에나와있는지속적통합서버대부분이원격지에대한지속적통합기능까지포함하고있다. 앞으로도소프트웨어개발이다양화되면될수록지속적통합서버도입은가속화될것이다. 1.4 형상관리 최근소프트웨어개발프로젝트에서형상관리서버없이개발하는곳은거의없을것이다. 프로젝트규모와관계없이이제형상관리서버도입은선택이아닌필수사항이다. 그뿐아니라개발자가한명밖에없는개인프로젝트에서도형상관리서버를도입하여사용한다. 편리하기때문이다. 지속적통합에서형상관리서버의역할은단순히소스코드버전을관리하고히스토리를확인할수있는기능을넘어서여러개발자가만들어낸각종산출물을한곳에모아놓는통합저장소개념이더강하다. 여기서산출물은단순히프로그래밍언어의소스코드만을의미하지않는다. 소스코드외에소스코드를생성하는개발도구, 각종설계서와 UML 다이어그램, 소프트웨어실행환경도형상관리가필요한대표적항목이다. 어떤것을형상관리에보관할것인가? 프로젝트에서형상관리서버를도입할때우선고려해야할사항은어떠한것 을형상항목으로선정해보관하고관리할것인지다. 대다수프로젝트나기업 에서는생산해낸소스코드에형상항목을국한하는경향이있지만이것은굉

장히위험한생각이다. 환경변화에따라소스코드뿐아니라개발환경과설계환경도바뀌기때문이다. 최악의경우는바뀐개발환경에서기존소스코드나라이브러리를인식하지못하거나실행하지못할수도있다. 그러므로소스코드뿐아니라이와관련된각종개발도구와개발환경도형상관리서버에같이보관할필요성이있다. 형상관리에대한인식변화형상관리가보편화되고널리쓰이지만프로젝트내에서사용하는방식을보면잘못활용되는경우가많다. 그렇게잘못쓰이는상황이생기는것은형상관리활동에대해정확한규정을마련하지않았기때문이다. 무엇보다먼저형상관리서버를도입하고활용할때는형상관리에대한사내규정이나프로젝트내표준규정을마련하는게중요하다. 규정을마련할때는다음항목을참고하자. 개인이만들어내는소스코드는결코개인사유자산이아님을알아야한다. 모든소스코드는조직소유이며그러한이유로다른사람과공유하는것을 기본목적으로해야한다. 일단형상관리에소스코드를커밋한다는것은해당소스코드에결함이없 고실행이가능함을의미해야한다. 형상관리에존재하는소스코드는여러 형태로재사용되거나공유될소지가많으므로잘못된소스코드를커밋한다 는것은결국다른소스코드에영향을주고전체적으로소프트웨어가동작 하지않는결과가나온다. 형상관리서버는개인자료백업서버가아니다. 개인자료백업은백업서 버나파일서버를이용해야하며형상관리서버는백업이아닌다른사람과 자료를공유하는것이목적이다. 형상관리서버에있는소스코드는가급적모든구성원이공유할수있도록 하는것이좋다. 보안이나권한, 기업내지적재산권등의이유로공유가제 약되는경우가많다. 그러한제약을최소화하고가능한범위에서모든구성 원이형상관리에존재하는형상항목을공유하는것이생산성향상측면에 서좋다.

이네가지주제를가지고형상관리에대한표준규정을마련하는것이중요하다. 이러한규정을마련하지않거나단순히형상관리서버를소스코드를백업하는정도의수단으로사용하는것은올바른형상관리방법이라할수없다. 지속적통합에서형상관리의중요성은계속해서강조해야하는부분이다. 특히형상관리의잘못된사용은컴파일에러나테스트에러를유발할소지가높고이는지속적통합활동의큰걸림돌이된다. 지속적통합활동이이러한문제점을빨리파악하는것이목적이지만사용자의인식이변하지않은상태에서오류가너무자주나오면오히려역효과만불러일으킬수있다. 1.5 빌드 지속적통합에서빌드란소프트웨어를컴파일한다는의미를넘어서개발자가형상관리에커밋한소스코드를가장먼저테스트하는품질검사활동이다. 컴파일에실패했다는것은소스코드에문제가있다는것을의미하며, 또현존하는컴파일러는대부분어떤소스코드의무엇때문에컴파일이실패했다는것을친절하게알려주기때문이다. 그러므로지속적통합서버는형상관리에새로운소스코드가커밋되거나기존소스코드가변경되었을때즉시빌드과정을거쳐서소스코드가정상으로컴파일되는지확인해볼필요가있다. 그리고문제가발생했을때는즉시해당개발자에게컴파일실패를피드백해야한다. 내가금융차세대프로젝트에서운영시스템에대한빌드절차및빌드스크립트를개발할때가장빈번하게접한질문은자기개발 PC에서는컴파일에러가나지않았는데서버에서는컴파일에러가난다는내용이었다. 이러한문제가발생하는이유는다음과같다. 통합개발도구의자동빌드기능을꺼놓고사용하는경우가많다. 자동빌드 기능을이용하면개발도구가소스코드를계속컴파일해서개발도구가느 려진다. 그러한이유로자동빌드를하지않는것을마치개발 PC 에서빌드 에계속성공하고있다고착각하는경우가있다. 프로젝트표준으로만든빌드스크립트와통합개발환경설정을자기방식 으로변경해사용하는경우다. 예를들어자신만이사용하는라이브러리를

추가해놓고형상관리에는라이브러리를커밋하지않거나프로젝트표준이 아닌다른라이브러리를사용하는경우다. 정상소스코드를전부커밋하지않는경우다. 로컬개발 PC에서동작하는 소스코드를전부형상관리에커밋하지않고일부소스코드만커밋하면서 버에서는당연히컴파일에러가날수밖에없다. 한소스코드에여러명이동시에개발한다면오류에대한책임을서로미루 게되며이는결국영원히해결되지않는컴파일에러상황에도달할수있다. 아주상식적인내용인데앞의네가지경우때문에프로젝트에서는빌드에러가자주발생한다. 로컬개발 PC에서컴파일에러가나는것은개인문제일수있지만서버에서컴파일에러가나면해당프로젝트와연관된모든사람이작업을진행하지못하게되는큰원인이된다. 그러므로지속적통합서버에서이루어지는빌드과정에서컴파일오류발생을최소화하는것은매우중요한활동이다. 지속적통합서버는대부분자체적인빌드기능이없다. 대신에빌드도구와연계해해당빌드도구를실행하고그결과를확인하는기능이있다. 그러므로좋은지속적통합서버는현존하는대부분의빌드도구와연동을제공해야한다. 특정한플랫폼과언어를위한빌드도구와연동만을제공한다면해당지속적통합서버도입은다시한번생각해봐야한다. 일반적으로현재많이사용하는빌드도구는자바진영에서는앤트와메이븐을들수있으며닷넷을위한낸트 (Nant), msbuild 등이있다. 그리고과거 C와 C++ 언어를위한 make도대표적인빌드도구다. 이책에서는이모든빌드도구를설명하지는않을것이다. 이중에서앤트와메이븐을빌드도구로연동하는방법을자세히알아보겠다. 1.6 테스트 국내프로젝트환경에서테스트는굉장히큰모순이있다. 프로젝트시작단계 에서는테스트를강조하고테스트를완료해야만프로젝트를오픈할수있다고 한다. 그리고그것을반영하듯프로젝트일정에설계와개발기간과마찬가지 로테스트기간역시길게잘잡혀있다. 그런데여기서부터모순이생기기시

작한다. 테스트일정은대부분프로젝트후반부에집중하도록잡혀있다. 개발 이완료되는시점에단위테스트를수행하고단위테스트를완료한이후에통 합테스트를수행하고프로젝트를오픈하는형태다. 일정만으로보면테스트 는가장뒤로밀린다. 개발기간에수시로소프트웨어를테스트해야하는데도테스트가뒤로밀려 있고중요성을높이인식하지않는것은문제가있다. 이러한프로젝트일정때 문에개발자들은대부분개발기간에테스트보다는소스코드작성에전념한 다. 그리고관리자도개발자가소스코드를얼마나작성했는지만관리하지, 해 당소스코드가제대로테스트됐는지관리하지않는다. 결국본격적인단위테 스트가시작되면서기존에작성된많은코드가재작성되며심지어완전히새 로작성되는경우도있다. 또단위테스트와통합테스트를거치면서심각한소 스변경사항이발생하게된다. 또하나모순점은테스트기간을마치나중에개발기간을더확보할수있는 여유일정이라고생각하는경향이있다는것이다. 예를들어개발기간이 6 개 월이고테스트기간이 4 개월잡혀있다면, 많은사람이테스트기간중실제테 스트는두달이면되고나머지두달은개발기간의연장이라고생각한다. 그래 서프로젝트개발일정이지연되면많은관리자와개발자가테스트기간을넉 넉히잡았으니그기간에테스트를잠시하지않고개발을하면충분히진행할 수있다고생각한다. 앞의두가지경우를살펴보면서테스트의중요도가프로젝트에서뒤로얼마 나밀리는지알았을것이다. 이예가과거개발프로젝트에서나나타나는현상 은아니다. 오늘날진행되는많은프로젝트에서도이와같은인식은변함이없 다. 테스트를뒤로미루고테스트기간은개발기간의완충역할을하는것이라 는사고가결국소프트웨어품질을떨어트리고결함을양산하는원인중하나 로지목된다. 지속적통합에서주장하는테스트에대한방향은일단개발생명주기를더 짧고반복적으로가져가자는것이다. 그리고개발주기내에다양한테스트기 법을적용해테스트를자동화하고반복적으로테스트를수행하자는내용을담 고있다. 그뿐아니라소스코드를개발하기전에테스트용코드를먼저개발하 는방법도제시한다. 하지만모든새로운개발방법론이그렇듯이방법도찬성

측과반대측으로나뉜다. 찬성측주장은잦은테스트는결국소프트웨어품질 을높인다는것이다. 그에반해반대측은주로다음과같은주장을펼친다. 비즈니스를개발하기에도시간이벅찬데거기에다테스팅을위한코드를작 성한다는것은일정상무리가있다. 테스트를하려면테스트용데이터가필요한데해당데이터를관리하고, 테스 트도구와연계하기가불가능하다. 테스트를사람의손과눈이아닌코드를이용해수행한다는것을신뢰하지 못하겠다. 테스트는품질관리조직이나테스터가하는것이지, 개발자가테스트까지 관여해야할이유가없다. 그런데이러한반대논리가실제프로젝트에서는많이인정을받고있으며, 프로젝트에테스트주도개발을도입하자고주장하는사람을프로젝트경험이 없고현실을잘모르며이론만아는사람으로매도하기도한다. 그래서대다수 프로젝트에서테스트방법론을도입할때가장큰걸림돌은어떻게하면테스 트절차와항목들을도출하고어떻게잘관리해나갈지고민하는것이아니라 기존 IT 관리자와경험자들을어떻게설득할지에대한것이다. 테스트주도개발은장점이많다. 그리고이책의주제인지속적통합도결 국테스트주도개발을중요한통합항목으로삼고있다. 프로젝트에서개발자 들이테스트케이스를좀더쉽게작성할수있는방법을고민하면서여러가지 시도를한적이있다. 그리고실제로 JUnit 을직접쓰는것보다좀더쉽게테스 트케이스를만들고데이터를수집하는방법을적용한적이있다. 그리고이를 통해개발팀에테스트케이스작성을강조하고테스트케이스작성을중요한 개발항목으로만들었다. 하지만여기서문제가생겼다. 개발자들은대부분소스코드작성에여전히 압박을받고있었고, 관리자는테스트케이스작성을중요한개발활동으로여 기지않았다. 그래서많은개발자가테스트케이스를엉터리로작성하였으며 자동화도구로실행하면모든테스트케이스가성공으로나오고실패한케이 스가거의나오지않았다. 왜그런완벽한테스트가이루어졌는지소스코드를

확인해보니많은테스트케이스가 try catch 문장으로예외나에러를잡아서실패로처리하는것이아니라무조건성공했다고결과를리턴하도록만든것이었다. 이렇게테스트케이스의필요성을느끼지못하는조직에서는테스트케이스자체에대한테스트가필요할정도다. 또하나문제는테스트케이스가많아지면많아질수록자동화된테스트를수행할때소요되는시간이점점더늘어간다는점이다. 시간이소요된다는것은달리말하면개발자입장에서는소스코드를작성할시간이줄어든다는것을의미한다. 결국개발자스스로테스트케이스를통해테스트를반복적으로하는과정을생략하기시작한다. 그리고이렇게생략하면서결국새로생기거나변경되는코드에대한테스트케이스를작성하지않거나관리하지않는상황이생기고테스트케이스작성활동이무의미해져버린다. 마지막으로관리자입장에서는개발자들이시간을들여테스트를수행하고테스트케이스를잘관리하고있으므로테스터나품질관리자인건비절감으로이어지기를기대하는점이다. 테스트주도개발의기본사상은테스트를중요시하자는것이지, 인건비를절감하자는것이아니다. 물론테스트주도개발을통해소프트웨어결함을줄이고약속된시간에완성된소프트웨어나서비스를제공한다면궁극적으로는인력과비용절감이라는결과를맞이할수있지만인건비를절약하려고테스트주도개발을도입한다는것은잘못된생각이다. 모든결함의시작은무엇이잘될것이라는가정과그가정이항상올바르게적용될것이라는맹목적인확신에서비롯된다. 테스트주도개발이만능은절대될수없다. 다만테스트주도개발을적용함으로얻을수있는이점은프로젝트구성원이테스트의중요성을느낄수있는계기가된다는것과실제로잘관리되는테스트케이스덕에문제사항을쉽고빠르게발견할가능성이높아진다는점이다. 1.7 코드품질검사 앞서테스트를이야기했는데또검사라는내용이나와서그두개의차이점에 대해의문이생길수도있다. 두가지는거의같은의미로사용하기도하며분 명한역할을나눠구분하기도한다. 일단테스트와검사의가장큰차이점은테

스트는주로소프트웨어동작과관련된부분을살펴보지만검사는소프트웨 어구조가올바르게작성되었는지살펴본다. 예를들어우리가시험을치를때 OMR 카드에답을적는다고하자. 이때검사를한다는의미는다음과같다. OMR 카드수험번호항목에작성하였나? 성명란에이름을작성하였나? 컴퓨터사인펜으로기입하였나? 혹시 OMR 리더기가인식할수없는필기도 구로작성하지는않았나? OMR 카드에이물질이묻지는않았나? 이에비해테스트를한다는의미는다음과같다. 작성한수험번호가올바른값인가? 본인의수험번호가맞는가? 작성한성명이자기이름이맞는가? 작성한답이본인이풀어낸답을그대로옮겨놓은것인가? 두예를통해확실히알수있는것은테스트는주로그행동이나결과가올 바른것인지판단하는반면, 검사는구조적인면을판단한다는점이다. 그래서 테스트와검사는구분되는개발절차다. 대표적인예로아무리소스코드가구 조적으로문제가있고엉망이라도테스트케이스는입력된값에대해원하는 값이출력된다면항상통과될것이다. 그렇다면데이터가올바르면됐지, 구조까지확인해야하는이유는무엇일 까? 그이유는소프트웨어는구조가유연하고사람의생각과논리를담고있어 서결함이발생할수있는가능성을많이내포하고있고, 그결함이구조적인 문제로인한경우가상당히많기때문이다. 사람의생각자체가결함이있을수 있고어떤동일한일에대해서로다른논리를펼치는것과마찬가지로소프트 웨어를개발하는것은사람의다양성이반영되기때문이다. 또하드웨어적제 조과정에비해구현해야할논리적판단이많고, 그논리적판단을구현하는 구조적인방법이너무나다양해구조차이로인한결함이발생할가능성이더 욱높아진다.

이렇듯결함발생가능성이높은소프트웨어의품질을높이는문제는의외 로자동차나반도체같은하드웨어를생산하는공정과비슷한방식으로해결 할수있다. 하드웨어생산공정은작업효율성과자동화를위해매우세분화되 어있으며, 각세분화단계에따라결함을검사하고결함이발견되었을때결함 이발생한이유를분석한후해당문제점을제거하는일련의과정을반복적으 로진행한다. 그리고이러한결함에대한검사와조치에대해서는어느정도일 정한패턴이존재하므로해당패턴에따라지속적으로자동화된검사를각과 정마다진행하게된다. 바로이러한하드웨어의결함조치기법을소프트웨어 에적용하는것이지속적통합에서얘기하는결함검사기법이다. 하지만이러한세분화된공정을마련하고각공정별결함을찾아내는방식에 많은개발자와관리자가거부감을느끼는게일반적이다. 이런사람들의공통 적인생각또는의견은이렇게잦은검사와결과에대한조치는소프트웨어생 산성을저해하며, 개발자가소스코드작성외의부수적인일에매달림으로써 집중력이떨어진다는것이다. 그리고소스코드에대한구조를너무제약하면 개발자의자유로운창의력을해치게되고, 결국창의적이고생산적인소프트 웨어를개발하는데방해가된다는것이다. 그래서구조에대한것은아키텍트 가알아서하고개발은그냥개발자편한대로하는것이좋은접근방식이라고 주장한다. 불행히도소프트웨어의규약과구조를무시하고개발하면단위테스트때는 괜찮지만통합테스트나성능테스트시에문제가발생한다. 혼자서는잘동작 하지만다른사람이작성한부분과상호연동해동작할때는구조적인규칙을 따르지않아서문제가생기고이는통합테스트실패로나타난다. 또개인이한 두번테스트할때는성능문제가발생하지않지만, 부하발생기로대량의성능 테스트를수행하면구조를따르지않았을경우성능문제가발생한다. 대표적 인예가스레드사용규칙을무시하였거나객체생성과종료, 데이터베이스연 결과해제등에대한규칙을위반해생기는성능문제다. 물론가장좋고이상적인방법은결함자체가소프트웨어에침투할수있는 경로를차단하는것이지만, 인간이하는작업에서결함을없앨수없는것이현 실이므로유입된결함을미리발견해빨리제거하는프로세스를마련하는것 이현재로서는최선의선택이다.

그렇다면이러한결함검사를개발자들, 그리고심지어관리자조차왜귀찮고불필요한작업이라고생각할까? 바로실제로검사를하는방법이자동화되어있지않고대부분사람이검사하기때문에발생한다. 예를들어아키텍트가소스코드코딩규칙을정했는데그규칙대로제대로소스코드가작성되었는지확인하려고모든개발자와관리자가소스코드를하나하나다검토해야한다면효율성이떨어질수밖에없다. 그뿐아니라진척에대한압박을받는개발자들의경우형식적으로확인한후문제가있어도그냥문제가없다고보고하고넘어가는것이대부분이다. 이러한문제점을해결하기위해결함검사에대한자동화를추구하는것이중요하다. 소스코드가형상관리서버로커밋되면해당소스코드들에대한구조적검사를지속적통합도구를통해수행하고, 문제점을해당개발자에게피드백한다면모든개발자와관리자는사람이검사하는불편함을해결할수있게된다. 그러므로생산성을유지한상태에서결함검사를수행할수있게된다. 일반적으로국내결함검사에서자주사용되는내용은다음과같다. 명명규칙준수검사 아키텍처가이드준수검사 SQL 작성규칙준수검사 보안규칙준수검사 프로젝트규모에따라네가지를모두검사할수도, 한가지도검사하지않을수도있다. 검사를하려면각각에해당하는규칙과가이드가프로젝트표준으로정의되어있어야하지만, 매우작은규모의프로젝트에는그러한일련의과정을거치는것이무척큰부담이될수도있으며그러한규칙을정할만한아키텍트가없을수도있기때문이다. 1.8 배포 배포라는용어의기술적범위는광범위하다. 과거에는서비스가이루어지는서 버나클라이언트로소프트웨어를전달하는것을의미하였으나현재는컴파일과

패키징을하고자동화된테스트와검사를수행하며이모든것을통과하면최종사용자에게전달하는포괄적인내용이다. 내용이포괄적이고사용하는기술이다양하며전달해야하는대상이광범위하고, 배포해야하는요건이날이갈수록엄격해지고있다. 결국이러한모든환경과요건을만족시키기란매우어려운일이다. 이책에서는웹기반애플리케이션개발배포에대해알아보겠다. 웹서버 : 정적자원웹서버는클라이언트에서들어오는요청을애플리케이션서버에전달하는역할을수행하며이와함께정적자원, 즉 HTML, 이미지, CSS, 자바스크립트등사용자요청에따라변경되지않고고정되어있는데이터를서비스한다. 그러므로애플리케이션을배포할때정적인자원은웹서버에배포한다. 애플리케이션서버 : 동적자원애플리케이션서버는사용자요청에대해동적으로데이터를생성해처리하는역할을수행한다. 주로 JSP, 자바애플리케이션, PHP, ASP 등이여기에속하며동적자원은자원을실행할수있는엔진이나컨테이너에배포한다. 그리고컨테이너와채용기술에따라배포하는방법은매우다양하고복잡하다. 예를들어 J2EE 환경에서많이사용하는웹로직 (WebLogic) 의배포경우수를조합하면 64종이넘는다. 동적자원배포문제는굉장히어렵고다양한경우를많이겪게되며배포의핵심에속한다. 배치서버 : 대량처리자원 배치 (batch) 서버는소규모프로젝트보다는주로중대형프로젝트에서많이보 게된다. 예를들어월말에통계데이터를생성하거나대량의데이터를야간에 일괄처리하는데많이사용한다. 주로대량처리를위한데이터파일들과이러 한파일을처리할수있는애플리케이션으로구성되어있다. 배치서버에자원 을배포하는것은애플리케이션서버에배포하는것에비해비교적요건이복 잡하지는않지만, 배치는특성상한번실행되면장기간동작하는관계로기존 에동작하는애플리케이션에영향을주지않고배포를잘해야하는숙제가생 긴다. 그뿐아니라온라인애플리케이션과는다르게일단실행하고나면에러

가발생하더라도이를중지하고다시실행하는데굉장히큰부담이생길수밖 에없다. 그러므로조그만실수도매우큰영향을미칠수있다. 데이터베이스서버 : 데이터자원데이터베이스를배포항목으로여기는곳은많지않다. 많은프로젝트에서애플리케이션에대해서는로컬환경, 개발환경, 검증환경, 운영환경등을구분해사용하지만데이터베이스는상당히많은영역에서공유하고있으며개발자에의해자유롭게접근하고사용할수있는영역이아니기때문이다. 하지만데이터베이스에대한불일치로인해애플리케이션장애가생기는경우가상당히많다. 특히데이터베이스테이블스키마와데이터구조가자주바뀌는프로젝트초창기에는잘돌던프로그램이데이터베이스변경으로에러가나거나예측하지못한이상동작을하기쉽기때문이다. 그러므로애플리케이션배포시에는데이터베이스자원의적용상태를고려해작업해야한다. 특히신규로데이터가생성되는것이아니라기존에운영되는데이터를마이그레이션해사용하는경우는더욱심한변경과마이그레이션절차에따른불일치를겪을가능성이높다. 앞서설명한네가지모든자원에대해완벽한배포알고리즘을작성하는것은매우어려운작업이다. 또무수히많은경우수가생기며예측못한돌발상황이많이발생한다. 결국이러한배포의어려움때문에자동화를포기하고수 정적자원 동적자원대량처리자원데이터자원 WAS 서버 #1 웹서버 #1 WAS 서버 #2 DB 서버 #1 배치서버 #1 웹서버 #2 WAS 서버 #3 DB 서버 #2 WAS 서버 #4 그림 1.2 시스템및자원구성

작업으로배포절차를마련하는경우가많다. 아니면이클립스나넷빈즈같은통합개발환경의편리함에빠져자동배포가아닌개발도구를이용한수동배포를선호하는경우도생긴다. 하지만수동배포방법은지속적통합에서가장경계해야하는방식이다. 자동화되지않은배포방식은반복적으로수행되지않음을의미하며, 이는결국잊혀지고무시되며실수할수있는경우를스스로만들어내는것이다. 편리한수동배포방식을적용해서자동화한것과비슷한효과를얻고완벽한테스트와품질검사, 보안검사를완료했더라도실제서비스가이루어지는서버로배포작업을진행하는중에에러가많은부분에서발생할수있다. 예를들어애플리케이션서버를모두네대운영중이라면네대모두에프로그램을배포해야하는데그중한대에배포하지않는실수를범하기쉽고, 웹애플리케이션서버를재시작하다가그중한대에서발생한오류를인지하지못해일정한요청사이로에러가발생하는굉장히찾아내기어려운에러가발생할소지가있다. 설마라고생각하지만실제로많은프로젝트에서자주발생하는것들이다. 그림 1.3은배포에대한일반적인처리절차를대략적으로정리해도식화한것이다. 정적자원동적자원대량처리자원데이터자원 개발자 커밋 형상관리 개발계배포 웹서버 #1 WAS 서버 #1 WAS 서버 #2 배치서버 #1 DB 서버 #1 개발서버 통합테스트계이관 정적자원 동적자원대량처리자원데이터자원 정적자원동적자원대량처리자원데이터자원 WAS 서버 #1 웹서버 #1 WAS 서버 #1 WAS 서버 #5 DB 서버 #1 웹서버 #1 WAS 서버 #2 DB 서버 #1 웹서버 #2 WAS 서버 #2 WAS 서버 #6 배치서버 #1 WAS 서버 #3 배치서버 #1 운영관이관 웹서버 #3 WAS 서버 #3 WAS 서버 #7 DB 서버 #2 웹서버 #2 DB 서버 #2 배치서버 #2 WAS 서버 #4 웹서버 #4 WAS 서버 #4 WAS 서버 #8 DB 서버 #3 통합테스트서버 운영서버 그림 1.3 계층별배포절차

서비스의안정화를위해배포하면바로적용되는것이아니라여러절차와단계를거쳐야만최종서비스단계로돌입할수있으며단계를더할수록더욱복잡한시스템환경을경험해야한다. 이렇게복잡하고다양한환경에대해수작업으로모든것을하기는불가능하며, 지속적으로엄격하게상태를검토하고이모든것이통과되었을경우다음단계로진행할수있도록자동화된작업을정의하는방법만이유일한해결책임을알아야한다. 1.9 결과피드백 아무리모든절차와과정을자동화했더라도자동화된작업상태를알수없고문제사항을빨리알아챌수없다면쓸데없이자원만낭비하는것이다. 그러므로지속적통합에서추구하는최종목적은자동화된빌드와배포를넘어서이모든내용에대해프로젝트의구성원이모두같이공유하고문제상황에대해빠르게해결해나갈수있는훌륭한결과피드백시스템을마련하는것이다. 피드백을받는방법은여러가지가있다. 최대한다양한형태로피드백할수록해당결과를확인할가능성이높고, 그렇게함으로써결함을최대한빨리확인할수있게된다. 성공적인결과피드백을하기위한전제조건은다음과같다. 전통적인메시지전달방법외에다양한매체나프로토콜로결과를피드백해 야한다. 정확한상태메시지를해당담당자에게정확히전송해야한다. 이중에서도 특히중요한것은모든사람에게메시지를전달하는것이아니라실제로그 메시지가의미있는사람에게전달돼야한다는것이다. 너무많은결과피드백으로중요한피드백내용이무시되지않도록해야한다. 이세가지경우를만족할수있다면성공적인피드백시스템을구축했다고할수있다. 하지만말로표현하기는쉬워도시스템적으로세가지조건을만족하도록만드는것은매우어려운일이며다년간의경험과시행착오를거쳐야만이룰수있는목표다.

다양한방법을통한메시지전달 IT가발전할수록통신수단이많아지며통신수단과전산시스템의연동역시대부분가능한세상에서살고있다. 앞으로시간이흐르면흐를수록더많은통신수단이나타날것이다. 그러므로많은문제상황에대해여러통신수단으로전달할수있다면해당피드백을더욱빠르게확인할수있다. 지속적통합을구축할때고려할수있는대표적인피드백방법은다음과같다. 이메일 단문메시지 (SMS) 메신저 PC 화면에알림 시스템감시용모니터 이다섯가지외에도여러방법이있고문제가발생했을때알림을줄수있는프로토콜이다양하지만앞의다섯가지경우는규모가작은프로젝트나기업에서도충분히구현할수있는좋은방법이다. 먼저이메일은 SMTP나 IMAP 같은표준프로토콜로전송할수있다. 특히구글, 네이버, 다음, 네이트같은서비스에서는자사사이트에접속하지않아도 SMTP나 IMAP 등으로메일을보낼수있는기능을제공한다. 또무료로사용할수있는리눅스배포판을설치하면메일전송서버를손쉽게만들수도있다. 물론사내에그룹웨어가마련되어있는곳이라면메일을더욱쉽게보낼수있다. 단문메시지의경우는개인이시스템적으로보낼수있는방법은없지만비교적값싼구축비용과월비용으로기업용단문메시지서비스를받을수있다. 시스템적으로단문메시지를보내는서비스를제공하는회사는많으니해당업체의서비스를이용해보는것도좋은방법이다. 그외에도사내메신저를이용하거나 PC의작업표시줄에팝업메시지를띄우는방법등을생각해볼수있으며, 잘구축된 ITSM이나통합운영환경이제공되는기업이라면해당모니터링화면에문제발생시내용을표시하는것도좋은방법이된다.