본문 바로가기

회사관련 모든글

CI/CD에 대하여

출처: https://www.redhat.com/ko/topics/devops/what-is-ci-cd

CI/CD는 지속적 통합(Continuous Integration) 및 지속적 제공/배포(Continuous Delivery/Deployment)를 의미

 

지속적 통합(CI)은 코드 변경 사항을 공유 소스 코드 리포지토리에 자동으로 자주 통합하는 사례를 나타냅니다. 지속적 제공 및/또는 배포(CD)는 코드 변경 사항의 통합, 테스트, 제공을 나타내는 프로세스로, 두 가지 부분으로 구성됩니다. 지속적 제공에는 자동 프로덕션 배포 기능이 없는 반면, 지속적 배포는 업데이트를 프로덕션 환경에 자동으로 릴리스합니다.

 

지속적 제공이란?

 지속적 제공은 CI에서 빌드와 단위 및 통합 테스트를 자동화한 다음 검증된 코드를 리포지토리로 릴리스하는 것을 자동화합니다. 따라서 효과적인 CD(지속적 제공 프로세스)를 마련하려면 CI(지속적 통합)가 개발 파이프라인에 이미 구축되어 있어야 합니다(CD(지속적 제공)가 되려면 CI(지속적 통합)가 구축되어 있어야 한다는 의미. 제공이 되려면 통합이 제대로 구축되어 있어야 한다는 의미로 기억하기. "통합(Integation)이 잘되어야 그것을 결과적으로 서버에 제공(Delivery) 할수 있다" 로 기억하면 됨).

지속적 제공의 경우, 코드 변경 사항의 병합부터 프로덕션 레디 빌드의 제공에 이르기까지 모든 단계에 테스트 자동화와 코드 릴리스 자동화가 수반됩니다. 이 프로세스가 종료되면 운영 팀은 애플리케이션을 프로덕션으로 신속하게 배포할 수 있습니다.

일반적으로 지속적 제공(CD)이란 개발자의 애플리케이션 변경 사항이 자동으로 버그 테스트를 거치고 레포지토리(예: GitHub, 컨테이너 레지스트리)로 업로드된다는 것을 의미합니다. 이후 레포지토리에서 운영 팀이 변경 사항을 라이브 프로덕션 환경으로 배포할 수 있습니다(즉 제공(delivery)된다는 것은 레포지토리로 제공된다는 것을 의미하는 것임). 그 결과 개발 팀과 비즈니스 팀 간 가시성 및 의사 소통 부족 문제가 해결될 수 있습니다. 이를 위한 지속적 제공의 목표는 언제나 프로덕션 환경으로 배포할 준비가 되어 있는 코드베이스를 갖추고 새로운 코드를 배포하는 데 필요한 노력을 최소화하는 것입니다(즉 배포 직전의 모든 준비를 다 해놓는 작업이 Continuous Delivery이다).

실제 사례에서 지속적 배포란 개발자가 애플리케이션에 변경 사항을 작성한 후 몇 분 이내에 클라우드 애플리케이션을 자동으로 실행할 수 있는 것을 의미합니다(자동화된 테스트를 통과한 것으로 간주). 이를 통해 사용자 피드백을 지속적으로 수신하고 통합하는 일이 훨씬 수월해집니다. 이러한 연결된 모든 CI/CD 사례는 애플리케이션 배포의 리스크를 줄여주므로 애플리케이션 변경 사항을 한꺼번에 릴리스하지 않고 작은 단위로 세분화하여 더욱 손쉽게 릴리즈할 수 있습니다. 

 

CI/CD 에 대한 개념 최종정리 

CI는 지속적 통합을 의미하고 여기서의 통합은 운영에 사용되는 실제 레포지토리에 반영되기 전에 새롭게 수정된 소스코드가 기존의 코드와는 충돌하지 않는지, 몇명이서 서로 각기 수정한 코드가 기존의 코드와 충돌하지는 않는지 TEST를 통해 새코드혹은 수정된 코드를 기존의 코드와 병합해 보는 과정입니다. 
이과정에 이상이 없다면 CD(Continuous Delivery)의 과정에서 수정된 코드를 실제 운영환경에 사용되는 레포지토리에 적용하고 이러한 과정을 자동으로 반복해 주는 것이 Continuous Delivery라고 합니다. 그리고 여기까지 이상이 없다면 이것을 실제 운영환경에 자동으로 반영시켜 주는 것이 Continuous Deployment 라고 합니다.