지속적인 통합
"지속적인 통합"을 다시 생각해 볼 기회가 있어서 정리를 해보려고 합니다.
사전적 의미로는 지속적으로 품질 제어를 실행하는 것.
쉽게 말해, 형상관리시스템(Git,SVN 등)에 있는 Source파일을들 읽어서 자동으로 빌드와 분석을 통해서 조기에 문제점을 발견하여 품질과 생산성을 향상시키는것을 말한다.
CI시스템을 구축하지 않은 경우에는 각각의 개발자들이 소스코드를 형상관리서버에 커밋을 하고,
개발이 거의 끝난 마지막에 통합하여 별도의 품질관리를 거치지 않고 테스트를 진행한다.
이런경우에는 개발 후반에 모두 장애가 발생하여 개발하는 시간도 연장되고 업무의 효율이 떨어진다.
1. CI서버
오픈소스인 Jenkins(젠킨스)가 가장 유명하고 널리 사용.
2. 형상관리 시스템
SVN과 Git이 가장 많이 사용되고 있고, CI서버에서 자동으로 Polling하여 검증할 수 있도록 소스코드를 관리하는 형상관리시스템이 필요.
3. 빌드(Build) Tool
Ant와 Maven이 가장 많이 사용되고 있고, 형상관리 시스템에 있는 소스코드를 가져와 컴파일, 테스트 등을 실시하고 사용자들이 실행할 수 있도록 실행 파일을 만드는 과정.
4. Test Tool
자동으로 테스트를 수행하는 도구들로 JUnit이 가장 많이 사용되며, 빌드Tool인 Ant와 가장 많이 사용.
위의 사진처럼 CI서버를 구축함으로써 형상관리서버에 커밋된 소스를 주기적으로 Polling하여
수정된 소스코드가 결함이 있는지의 여부를 지속적으로 검증한다.
또한 검증결과를 개발자들에게 이메일이나 RSS등으로 피드백을 전달하여 결함을 조기에 발견해서 해결할 수 있는 것입니다.
끝으로 개발자에게 지속적인 통합을 테스트, 배포까지 고려해서 프로젝트에 적용하기 쉽지 않다.
그러나 지속적인 통합의 이점은 장기적으로 봤을때 프로젝트 관리 비용을 절감 시켜주는 효과를 가져온다.
프로젝트 초기에 지속적인 통합 시스템을 구축하는 것이 최선이고 지속적인 통합은 선택이 아닌 필수!