3. CI (지속적인 통합)이란?
지속적으로 퀄리티 컨트롤(품질 관리)을
적용하는 프로세스를 실행
모든 개발을 완료한 뒤에 퀄리티 컨트롤을 적용하는
고전적인 방법을 대체하는 방법으로서
소프트웨어의 질적 향상과 소프트웨어를
배포하는데 걸리는 시간을 줄이는데 초점
초기에 그리고 자주 통합해서 통합의 지옥의 함정을
피하는 것을 내포
출처 : 위키백과 - CI
4. CI의 역사
‘익스트림 프로그래밍(Extreme Proramming)’
커뮤니티에서 나왔으며, XP 방법론의 지지자인 마틴
파울러(Martin Fowler) 와 켄트 벡(Kent Beck)이
1999년 경 처음으로 지속적 통합에 대해 글을 작성
출처 : slideshare – Sunny Kwak 지속적인 통합
5. CI 시스템을 구축하지 않은 경우 CI 시스템을 구축한 경우
CI 시스템
• 코드를 형상관리 서버에
커밋하면서 품질관리를 없이 통합을
하여 테스트를 진행
• 품질관리를 수행하지 않았기
때문에 잘못된 코드가 반영되면
개발 후반에 모두 장애로 발견
• 형상관리 서버에 Commit된 코드를
주기적으로 폴링하여 컴파일,
단위테스트, 코드 인스펙션 등의
과정을 수행
• 신규 또는 수정된 코드가 결함이
있는지의 여부를 지속적으로 검증
출처 : happystory님의 블로그
6. CI의 장점
위험을 줄여준다.
반복적인 수작업을 줄여준다.
언제 어느 때라도 배포할 수 있는 소프트웨어를
생성해낸다.
프로젝트 가시성을 좋게한다.
소프트웨어 제품에 대한 보다 큰 자신감을 갖게 해준다.
출처 : slideshare – Yoonki Chang 허드슨을 이용한 지속적 통합
11. CI Server
빌드 프로세스를 관리하는 서버
Jenkins, Hudson, CruiseControl.Net, TeamCity 등
다양한 CI 도구들이 사용되고 있지만, 무료임에도
안정적이고, 다양한 플러그인을 사용할 수 있기
때문에 젠킨스와 허드슨이 많이 사용
출처 : happystory님의 블로그, slideshare – Yoonki Chang 허드슨을 이용한 지속적 통합
12. Jenkins VS Hudson
Hudson
썬에서 근무하던 고스케 가와구치가 개발
썬에서 관리하던 java.net에서 관리되는 오픈소스 CI툴
저작권은 오라클 사에 귀속되어 있는 상태
Jenkins
java.net의 관리 방식에 변화가 생김
java.net에서 github로 옮기고 Jenkins로 이름 변경
출처 : hotdogya님의 블로그, 참조 : okjsp 블로그, okjsp 블로그
13. Jenkins 란?
open source CI (= Continuous Integration) Tool이다.
더 쉽게 말하자면 하나의 프로젝트를 여러 명으로 구성된
한 팀이 작업을 할 때 프로젝트를 리드하는 매니저가 일을
여러 가지로 나눠 팀 멤버들한테 분배하고 팀 멤버들은
각각 할당된 부분을 작업 하게 된다.
팀 멤버들은 자신이 담당하고 있는 부분의 소스코드를
정기적으로 SVN과 같은 Version Control System에
Submit하는데 이 각각의 팀 멤버들로부터 Submit된 소스
코드들을 정기적으로 통합하는 것을 CI라고 하고 이것을
시행해주는 프로그램을 CI Tool이라고 한다.
출처 : Software Engineering 블로그
14. Jenkins의 기능
빌드 호출(trigger)
소스 저장소에서 소스 받아오기
자동화된 빌드 및 테스트
리포트 생성 및 통보
배포
출처 : slideshare – Sunny Kwak 지속적인 통합
15. Jenkins의 요구사항
WAS 서버(Apache Tomcat, WebLogic 등)
빌드 도구(Maven, Ant 등)
소스 저장소 도구(Git, SVN, CVS 등)
설치 방법은 링크 참조(젠킨스 설치 및 설정)
출처 : slideshare – Sunny Kwak 지속적인 통합
17. SCM
소스코드 형상관리 시스템(Source Code Management)
소스코드의 개정과 백업 절차를 자동화하여 오류 수정
과정을 도와줄 수 있는 시스템
여러사람이 같은 프로젝트에 참여할 경우, 각자가 수정한
부분을 팀원 전체가 자동으로 동기화할 수 있는 시스템
Subversion, Git, Mercurial 등
출처 : happystory님의 블로그
18. SCM
SVN과 Git이 가장 널리 사용
SVN(Subversion)
자유 소프트웨어 버전 관리 시스템
제한이 있던 CVS를 대체하기 위해 개발
현재는 아파치 최상위 프로젝트
Git
분산 버전 관리 시스템
최초에는 리누스 토르발스가 리눅스 커널 개발에 이용하려고
개발하였으며, 현재는 다른 곳에도 널리 사용
Github
출처 : 위키백과 – 서브버전, 깃
20. Build Tool
컴파일, 테스트, 정적분석 등을 실시해 동작 가능한
소프트웨어를 생성
Ant, Maven, Gradle, MSBuild, Make
빌드
소스코드 파일을 컴퓨터에서 실행할 수 있는 독립 소프트웨어 가공물로
변환하는 과정을 말하거나 그에 대한 결과물을 일컫는 것
가장 중요한 단계는 소스코드 파일이 실행코드로 변환되는 컴파일 과정
참고
빌드의 중요성(http://softwaredev.tistory.com/10)
빌드와 컴파일의 차이(http://allofsoftware.net/19)
출처 : happystory님의 블로그
21. Build Tool
Ant(Apache Ant)
자바 프로그래밍 언어에서 사용하는 자동화된 소프트웨어 빌드
도구
유닉스나 리눅스에서 사용되는 make와 비슷하나 자바언어로
구현되어 있어 자바 실행환경이 필요하며 자바 프로젝트를
빌드하는데 표준으로 사용
XML을 사용하여 환경구성
Maven(Apache Maven)
자바용 프로젝트 관리 도구
Apache Ant의 대안으로 만들어짐
아파치 라이선스로 배포되는 오픈 소스 소프트웨어
출처 : 위키백과 – 아파치 앤트, 아파치 메이븐
22. Build Tool
Gradle
지금까지 자바 진영에서 많이 사용해온 Ant 빌드 툴과 Maven
빌드 툴의 단점은 버리고, 장점은 취한 빌드 툴
Ant와 Maven 빌드 툴의 기능을 모두 포함
Ant의 자유도와 Maven의 관례의 장점을 모두 흡수
Ant와 Maven 빌드 툴 모두 가지고 있었던 가장 큰 단점인
XML에 대한 이슈를 Groovy라는 언어를 사용해 해결
출처 : SLiPP – Gradle 설정 파일 및 기본 개념
24. Test Tool
작성된 테스트 코드에 따라 자동으로 테스트를
수행해주는 도구로, 빌드 툴의 스크립트에서 실행
JUnit, CppUnit, CppTest, MSTest, Selenium
단위 테스트
테스트 대상이 되는 코드 기능의 아주 작은 특정 영역을 실행해
보는 것으로, 개발자가 작성한 테스트 코드로 특정 메소드를
실험해보는 것이 일반적
출처 : happystory님의 블로그
25. Test Tool
JUnit
단위 테스트 도구
외부 테스트 프로그램(케이스)을 작성하여 System.out으로 번거롭게
디버깅하지 않아도 되게 해줌
프로그램 테스트 시 걸릴 시간도 관리할 수 있게 해주며 오픈소스이며,
플러그인 형태로 Eclipse에 포함
하나의 jar 파일로 구성되어 있으며, 사용법이 간단
보이지 않고 숨겨진 단위 테스트를 끌어내어 정형화시켜 단위
테스트를 쉽게 해주는 테스트용 Framework
JDK 1.4에서 추가된 assertXXX를 사용하여 Test를 진행
테스트 결과를 확인하는 것 이외에 최적화된 코드를 유추해내는
기능도 제공
테스트 결과를 단순한 텍스트로 남기는 것이 아니라, Test클래스로
남김
테스트 방법 및 클래스의 Histroy를 넘겨줄 수 있음
출처 : NEXTREE
27. Test Coverage Tool
테스트 코드가 대상 소스 코드에 대해 어느정도
커버하는지 분석하는 도구
개발자가 작성한 테스트코드가 테스트 대상
소스코드에 대해서 어느정도 테스트를 수행하는지를
코드 라인과 백분율을 통해 리포팅하는 것으로
단위테스트 수행 시 테스트 커버리지를 분석하기
위해여 부가적으로 사용하는 툴
Emma, Cobertura, TestCocoon
출처 : happystory님의 블로그
30. Inspection Tool
프로그램을 실행하지 않고, 소스코드 자체로 품질을
판단할 수 있는 정적분석 도구
코딩 표준 준수 검사, 코드 메트릭 측정, 중복코드 검사,
코드 인스펙션 검사 등이 있음
CheckStyle, FindBugs, Cppcheck, Valgrind
출처 : happystory님의 블로그
33. 1. CI Server
Jenkins 설치
설치 방법
• 젠킨스 홈페이지에서
WAR 파일 다운로드
• 톰캣 등의 WAS에
설치 및 실행(1)
• 젠킨스 WAR 파일을
직접 실행(2)
• (1), (2) 중 선호는
방식으로 실행
출처 : slideshare – Sunny Kwak 젠킨스 설치 및 설정
34. 2. IDE + Build
Tool + SCM
• IDE를 선정
• Build Tool 선정
• SCM 선정 선정
IDE
Eclipse
IntelliJ
Build Tool
Ant
Maven
Gradle
SCM
SVN
Git
35. 3. Test Tool
• 테스트 코드를 작성
• Build Tool의
스크립트에서 실행
Maven
Gradle