곰돌이 놀이터

[기본] CI 란? 본문

기본 개발 지식

[기본] CI 란?

달나라 곰돌이 2018. 7. 30. 13:43

 CI ( Continuous Integration, 지속적인 통합 ) 


CI 란 팀의 구성원들이 작업한 내용을 정기적으로 통합하는 것을 의미한다.

풀어서 이야기하면 소프트웨어가 거대해지고 복잡해지면서 팀 단위로 개발을 하게 되었고 분업과 협업이 필수가 되면서 하나의 프로젝트를 여러 명으로 구성된 한 팀이 작업을 하게 되고 분업과 협업 과정에서 일을 나눠 각각 할당된 부분만 작업을 하게 되었다. 

그리고 팀멤버들은 자신이 담당해서 하고 있는 부분의 소스코드를 정기적으로 GIT, SVN 과 같은 형상 관리 시스템( SCM, Source Code Management ) 에 Submit 하는데 

이 각각의 팀멤버들로부터 Submit된 소스코드들을 정기적으로 통합하는 것을 CI라고 하고 이것을 시행해주는 프로그램을 CI tool 이라고 한다. 


CI 시스템을 구축하지 않은 경우 개발자들이 각자 개발한 소스코드를 형상관리 서버에 커밋하면 별도의 품질관리를 거치지 않고, 대부분 개발이 끝난 막바지에 통합을 하여 테스트를 진행하게 된다.

이럴경우, 개발 중 별도의 품질 관리를 수행하지 않았기 때문에 잘못된 소스코드를 형상관리 시스템에 반영하였을 경우 발생되는 문제가 개발 후반에 모두 장애로 발견된다.


반면 CI 시스템을 구축하게 되면 CI 서버는 형상관리 서버에 Commit된 소스코드를 주기적으로 폴링하여 컴파일, 단위테스트, 코드 인스펙션 등의 과정을 수행하며 신규 또는 수정된 소스코드가 결함이 있는지 여부를 지속적으로 검증한다.

검증 결과는 이메일, RSS 등의 피드백 메커니즘을 통해 개발자들에게 전달되고, 이를 통해 조기에 결함을 발견하여 해결 할 수 있는것이다.


 CI 시스템 구축을 위한 핵심 구성요소 


■ CI Server

빌드 프로세스를 관리하는 서버로 Jenkins 가 여기에 속한다.

ex > Jenkins, Travis CI, etc


■ SCM( Source Code Management )

소스코드 형상 관리 시스템으로 Git 이 여기에 속한다. 소스코드의 개정과 벅업 절차를 자동화하여 오류수정 과장을 돕는다. 팀 프로젝트의 경우 각자 수정한 부분을 전체가 자동으로 동기화 할 수 있는 시스템이다.

ex > Subversion, Git, etc


■ build Tool

컴파일, 테스트, 정적 분석 등을 실시해 동작 가능한 소프트웨어를 생성하는 도구로 Maven 이 여기에 속한다. 빌드는 형상 관리 시스템에 있는 소스코드를 가져와 컴파일 하여 실행 가능한 파일로 만드는 일련의 과정을 일컫는 말이다.

ex > Maven, Gradle, Ant, make, etc


■ Test Tool

작성된 테스트 코드에 따라 자동으로 테스트를 수행해주는 도구로 빌드 툴의 스크립트에서 실행되며 JUnit이 여기에 해당한다.

ex > JUnit, Mocha, etc


■ 빌드 스크립트를 통한 CI 자동화 수행 절차

1. 소스코드를 바이너리 파일로 컴파일한다.

2. 바이너리 파일을 배포 형태로 패키징한다.

3. 단위 테스트를 수행한다.

4. 정적 분석을 수행한다.

5. 분석 결과를 리포팅한다.

6. 패키징한 파일을 테스트 서버에 배포한다.


 참고 


http://happystory.tistory.com/89

https://opentech-lee.blogspot.com/2017/05/jenkins-open-source-ci-continuous.html

http://asfirstalways.tistory.com/303

Comments