본문 바로가기

AWS DevOps/AWS CICD 서비스

CI(Continuous Integration) - 지속적인 통합의 개요

CI(Continuous Integration)의 기본적인 콘셉트는 1991년 Grady Booch를 통해 처음 소개 되었지만 1999년 켄트 백(Kent Beck)이 창시한 익스트림 프로그래밍(XP, eXtreme Programming)의 12가지 핵심 프랙티스(Core Practices)에서 이론과 내용이 소개됨

 

일반적인 기업에서 애플리케이션을 개발할 대, 여러 개발들이 동일한 애플리케이션에서 각기 다른 신규 기능을 개발하거나, 변경 사항을 수정 변경한다. 이 때 어려운 점은 동일한 애플리케이션에 대해 특정 기능 및 개별적으로 수정/변경된 내용을 반영하는 경우 다른 개발자가 동시에 적용하는 변경 사항과 충돌할 가능성이 있으므로, 이러한 부분을 최소화할 수 있도록 조정하는 수작업에 많은 시간과 인력이 소모된다.

 

CI(Continuous Integration)를 통해 자동화된 프로세스를 구현한다면, 개발자들이 코드 변경 사항을 메인 레포지토리를 통해 업로드를 수행하면 이를 통해 코드를 병합하는 작업을 더욱 수월하게 자주 수행할 수 있다. 개발자가 애플리케이션에 적용한 변경 사항이 병합되면 이러한 변경 사항이 다른 개발자가 수정한 내역이나 프로그램에 영향을 주지 않고 애플리케이션에 문제가 발생하지 않도록 병합 작업을 수행한다. 그리고 가기 다른 레벨의 자동화 테스트(일반적으로 단위 테스트 및 통합 테스트( 실행을 통해 변경 사항이 애플리케이션에 제대로 적용되었는지를 확인한다.

 

다시 말해, 클래스와 기능에서부터 전체 애플리케이션을 구성하는 서로 다른 모듈에 이르기까지 모든 것에 대한 테스트를 수행한다. 자동화된 테스트에서 기존 코드와 신규 코드 간의 충돌이 발견되면 CI를 통해 이러한 버그를 더욱 빠르게 확인할 수 있고 이렇게 확인된 소스를 수정하여 원할하게 배포할 수 있다.

 

 

ㅁ CI(Continous Integration)의 구성 요소

 

CI 프로세스를 구현하기 위해 필수적으로 리포지토리 관리, 빌드 자동화 툴, 셀프 테스트, 반영(Commit)을 통한 빌드 툴이 필요

구분 내용
리포지토리 관리 ㅇ 소스코드 및 마스터 리포지토리 관리를 위한 버전 관리 솔루션 필요
ㅇ 다양한 파일의 버전 관리를 통해 소스코드의 개발 내역 관리
ㅇ 체크아웃 기능을 통해 빌드 가능한 코드 확인 가능
ㅇ 현재 사용중인 소스의 버전 관리 및 모든 변경 사항을 리포지토리에 저장
ㅇ 빌드 서버를 추가로 배치하여 원하는 시점에 코드 변경의 모니터링 수행
빌드 자동화 ㅇ 한번의 빌드 실행으로 전체 시스템에 대한 빌드 작업 수행
ㅇ 팀은 빌드 스크립트 또는 표준화된 빌드 도구를 활용하여 빌드 수행
ㅇ 빌드 자동화에는 소스코드 통합, 코드 컴파일, 유닛 및 통합테스트, 프로덕션과 같은 환경 배포 포함
ㅇ 버전 제어 시스템에서도 이전 빌드의 백업본 유지
ㅇ 빌드 중 오류 발생 시 이전 버전으로 복구 수행 및 소스코드 비교를 통해 원인 분석 작업 수행
셀프 테스트
(Self-Test)
ㅇ 오류/버그의 신속하고 효과적인 빌드를 위해 테스트 자동화 포함 필요
ㅇ 자동화된 테스트 시스템을 통해 실패한 테스트 정보 확인 및 대응 수행
ㅇ 자체 테스트 실패 시 전체 테스트도 실패로 처리
반영(Commit)을 통한 빌드 ㅇ 소스 반영(Commit)의 정기적인 수행 시 개발자 간 이슈의 최소화 가능
ㅇ 1일 1회 이상의 소스 변경 반영(Commit) 권장
ㅇ 테스트 상황과 애플리케이션의 상태 확인 가능
ㅇ 팀은 빈번한 반영(Commit)을 통해 더 많은 테스트된 빌드 취득
ㅇ 메인 저장소의 소스 상태 확인 및 유지 체크 가능

 

ㅁ CI(Continuous Integration)을 통해 다음과 같은 효과 기대

구분 내용
개발자 생산성 향상 ㅇ 개발자의 수동 작업에 대한 부담 감소
ㅇ 고객에게 제공되는 오류 및 버그 수 줄이는 데 도움이 되는 도구 활용 가능
ㅇ 팀의 생선상 향상 기대
버그를 더 빠르게 발견하고 해결 ㅇ 테스트를 보다 빈번하게 수행할 수 있음
ㅇ 버그가 더 큰 문제로 발전하기 전 조기 해결 가능
업데이트를 빠르게 제공 ㅇ 팀이 좀 더 빠르고 빈번하게 고객에게 업데이트 제공 가능

 

'AWS DevOps > AWS CICD 서비스' 카테고리의 다른 글

AWS CodeDeploy  (0) 2021.02.21
AWS CodeBuild  (0) 2021.02.20
AWS CodeCommit  (0) 2021.02.20
CI/CD를 위한 도구들  (0) 2021.02.20
CD(Continuous Delivery/Continuous Deployment) - 지속적인 전달 및 배포  (0) 2021.02.20