티스토리 뷰

지속적인 통합 : 소프트웨어 품질을 높이고 위험을 줄이기

이 책은 '지속적인 통합'을 위한 좋은 입문서이자 지침서이다. 지속적인 통합을 해야 하는 이유와 실천(도입) 방법과 유용한 도구들을 소개하고 있다. 지속적인 통합이란 다음을 의미한다.


지속적인 통합이란?

소프트웨어 공학에서, 지속적인 통합(continuous integration, CI)은 지속적으로 퀄리티 컨트롤을 적용하는 프로세스를 실행하는 것이다. - 작은 단위의 작업, 빈번한 적용. 지속적인 통합은 모든 개발을 완료한 뒤에 퀄리티 컨트롤을 적용하는 고전적인 방법을 대체하는 방법으로서 소프트웨어의 질적 향상과 소프트웨어를 배포하는데 걸리는 시간을 줄이는데 초점이 맞추어져 있다.

- 위키백과 


아래 그림은 CruiseControl이라는 CI 서버를 이용한 일반적인 지속적인 통합 시나리오를 보여준다.

출처 : http://www.ibm.com/developerworks/rational/library/sep05/lee/

CI 시스템 구성


통합은 버튼 하나 누르는 것과 같이 쉽고 간편하게 작동하도록 스템화되어 있어야 한다. 2인 이상 협업으로 개발하는 프로젝트에서 통합에 많은 시간 빼앗기고 있다면 지속적인 통합을 심각하게 고려할 필요가 있다. 지속적인 통합은 통합하는데 낭비하는 시간을 줄여주고 개발자가 더 가치있고 생산적인 일에 시간을 쓸수 있도록 도와준다.


지속적인 통합의 이점

  1. 프로젝트 상의 위험을 줄여준다.
    • 빠른 피드백으로 시스템 개발의 문제점 발견
    • 비용, 일정, 예산 상의 위험 감소
  2. 반복적인 프로세스를 줄여준다.
  3. 언제 어느 때라도 배포할 수 있는 소프트웨어를 생성해낸다.
  4. 프로젝트 가시성을 보다 좋게 해준다.
    • 추세를 인지하고 효율적인 의사결정을 내릴 수 있게 도와줌
    • 코드 품질 확보
  5. 개발 팀이 소프트웨어 제품에 대해 보다 큰 자신감을 갖게 해준다.


지속적인 통합 도구들


CI 도구는 아래 표를 참고해서 개발 환경에 적합한 도구를 선택한다.

출처 : http://en.wikipedia.org/wiki/Comparison_of_continuous_integration_software

CI 도구 비교표

자동화된 빌드 도구

Ant, http://ant.apache.org/

Maven, https://maven.apache.org/

NAnt, http://nant.sourceforge.net/

Rake, https://github.com/ruby/rake
 

빌드 스케줄러 도구

AnthillPro, https://developer.ibm.com/urbancode/plugins/anthillpro/

Continuum, https://continuum.apache.org/

CruiseControl, http://cruisecontrol.sourceforge.net/

CruiseControl.NET, http://www.cruisecontrolnet.org/

Draco.NET, http://draconet.sourceforge.net/

Luntbuild, http://luntbuild.javaforge.com/

Hudson, http://hudson-ci.org/

Jenkins, https://jenkins-ci.org/


참고

Continuous Integration, Martin Fowler 

원문 : http://martinfowler.com/articles/continuousIntegration.html

번역 : http://pragmaticstory.com/224

책 홈페이지 http://www.integratebutton.com

Realizing continuous integration, Kevin A. Lee, http://www.ibm.com/developerworks/rational/library/sep05/lee/

Automation for the people: Continuous feedback, PaulDuvall, http://www.ibm.com/developerworks/library/j-ap11146/

Automation for the people: Continuous Inspection, PaulDuvall, http://www.ibm.com/developerworks/java/library/j-ap08016/

Automation for the people: Remove the smell from your build scripts, PaulDuvall, http://www.ibm.com/developerworks/java/library/j-ap10106/

Daily Build and Smoke Test, Steve McConnell, http://www.stevemcconnell.com/ieeesoftware/bp04.htm

Managing Duplicated Code with Linked Editing, Michael Toomim, Andrew Begel, Susan L. Graham, http://harmonia.cs.berkeley.edu/papers/toomim-linked-editing.pdf

How to Use FxCop, Anil_Saran http://www.codeproject.com/Articles/78599/How-to-Use-FxCop

Comparison of continuous integration software, http://en.wikipedia.org/wiki/Comparison_of_continuous_integration_software






 



 

 

개발 일정에 쫓기는 개발자에게 지속적인 통합을 테스트, 검사, 배포까지 고려해서 이상적으로 프로젝트에 적용하기란 쉬운 일은 아니다.  그러나 앞에서 언급한 지속적인 통합의 이점은 프로젝트를 관리하는 장기적인 관점에서 봤을 때 오히려 프로젝트 관리 비용을 절감시켜주는 효과를 가져온다. 프로젝트 초기에 지속적인 통합 시스템을 구축하는 것이 최선이다. 하지만 프로젝트 후반에 도입한다면 팀원들이 지속적인 통합 문화에 거부감없이 동참하도록 조금씩 시스템을 자동화하는 것이 좋을 것이다. 성공적인 프로젝트를 위해서는 지속적인 통합 도입은 선택이 아닌 필수 사항이다.

- James Song

댓글