본문 바로가기
카테고리 없음

CI/CD - 지속적 통합(Continuous Integration)/지속적 배포(Continuous Deployment)

by PROMISE_YOO 2022. 2. 24.

CI란?

지속적인 통합(Continuous Integration)의 약자이며 빌드/테스트 자동화 과정을 의미합니다. 다시 말해, 여러 개발자가 작성하고 수정한 코드를 지속적으로 통합하고 테스트할 수 있도록 자동화하는 것입니다.

지속적인 통합(Continuous Integration)의 실행은 변경 사항을 정기적으로 커밋하여 모든 사람에게 동일한 작업 기반을 제공하는 것으로 시작합니다. 커밋할 때마다 빌드와 자동 테스트가 일련의 과정으로 동작하고 변경으로 인해 문제가 생기는 부분이 없도록 보장합니다. (보장 방법은 자동 테스트가 실패할 경우 빌드 실패로 연결합니다. 테스트가 모두 성공해야 빌드가 가능하도록 합니다.) 

 

 

CI 적용의 장점

성공적으로 구현할 경우 애플리케이션에 대한 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트되어 공유 리포지토리에 통합되기 때문에 여러 명의 개발자가 동시에 애플리케이션 개발과 관련된 코드 작업을 할 때 서로 충돌할 수 있는 문제를 해결할 수 있습니다. 자동화된 테스트에서 기존 코드와 신규 코드 간의 충돌이 발견되면 CI를 통해 이러한 버그를 더욱 빠르게 자주 수정할 수 있습니다.

 

 

CD란?

지속적인 서비스 제공(Continuous Delivery) 및/또는 지속적인 배포(Continuous Deployment)를 의미하며 이 두 용어는 상호 교환적으로 사용됩니다. 간단하게 정리해보면 배포 자동화 과정입니다.

 

지속적인 서비스 제공(Continuous Delivery)이란 개발자들이 애플리케이션에 적용한 변경 사항이 버그 테스트를 거쳐 리포지토리(예: GitHub 또는 컨테이너 레지스트리)에 자동으로 업로드되는 것을 의미합니다.

 

지속적인 배포(Continuous Deployment)란 개발자의 변경 사항을 리포지토리에서 고객이 사용 가능한 프로덕션 환경까지 자동으로 릴리스하는 것을 의미합니다. 이는 애플리케이션 제공 속도를 저해하는 수동 프로세스로 인한 운영의 프로세스 과부하 문제를 해결합니다. 

 

간단한 코드 변경이 정기적으로 마스터에 커밋되고, 자동화된 빌드 및 테스트 프로세스를 거치며 다양한 사전 프로덕션 환경으로 승격되어, 문제가 발견되지 않으면 최종적으로 배포됩니다.

 

 

CD 적용의 장점

지속적 배포를 채택하면 품질 저하 없이 최대한 빨리 사용자에게 새로운 기능을 제공할 수 있습니다. 애플리케이션 배포의 위험성을 줄여주므로 애플리케이션 변경 사항을 한 번에 모두 배포하지 않고 작은 조각으로 세분화하여 더욱 손쉽게 배포할 수 있습니다. 

 

 


CI/CD 종류

- Jenkins

- CircleCI

- TravisCI

- Github Actions

- etc

 

 

CI/CD  적용 전과 후 비교


CI 적용하기 전과 후 비교 과정

 
1. 개발자들이 개발하여 코드를 수정후 각자의 feature 브랜치에 코드를 push 합니다.
(이때 별도의 테스트와 빌드 자동화 과정이 없으므로 에러가 발생해도 확인할 수 없습니다.)
2. 각자의 코드를 git에 올리고 통합(Intergration)합니다.
3. 에러가 발생하면 어느 부분에서 에러가 났는 지부터 디버깅하고 코드를 수정합니다.
4. (1) ~ (3)의 과정을 반복합니다.

코드의 양이 많다면 에러 추적이 안되므로 어마어마한 양의 디버깅 과정을 마주하게 될 수도 있습니다.

CI/CD를 적용하면 위 2~4번의 과정을 아래와 같이 줄일 수 있습니다.

git push를 통해 Trigger되어 CI서버에서 알아서 Build, Test를 실행하고 결과를 전송합니다.
개발자들은 결과를 전송받고 에러가 난 부분이 있다면 에러 부분을 수정하고 코드를 master 브랜치에 merge 합니다.


CD 적용 전과 후 배포 과정 비교


많은 시간을 할애하여 에러가 해결되었으면 배포를 시작합니다. 하지만 배포 과정 또한, 개발자가 직접 배포 과정을 거치므로 많은 시간을 소요합니다.

CD를 적용하면 master 브랜치에 코드를 merge 하고 Build, Test가 정상적으로 수행이 되었다면 CI서버에서 알아서 Deploy 과정을 수행합니다.
 


 

 

참고 자료 

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

https://seosh817.tistory.com/104#CI%EB%-E%--%-F