CI/CD는 애플리케이션 개발 단계를 자동화하는 방법이다.

CI: 지속적인 통합

CI는 지속적인 통합(Continuous Integration)이다.
개발자를 위한 자동화 프로세스로서, 애플리케이션의 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트 되어 공유 레포지토리에 통합되기 때문에 여러 명의 개발자가 동시에 애플리케이션 개발에 대한 코드 작업을 할 경우 서로 충돌할 수 있는 문제를 해결할 수 있다.

다수의 개발자가 형상관리 툴(Git, SVN)을 통해 기능 추가 시마다 공유 레포지토리에 커밋할 경우, 독립적으로 작업하는 개발자가 애플리케이션에 변경 사항을 적용할 때 다른 개발자가 동시에 적용하는 변경 사항과 충돌할 가능성이 큰데, CI를 성공적으로 구현하게 되면 기능별로 빌드/테스트/병합까지 자동화하여 충돌을 방어할 수 있다.

특히 기능별로 서비스를 쪼개어 개발하는 형태의 MSA(Micro Service Archietecture) 환경에서는 기능 추가가 매우 빈번하게 발생하기 때문에 micro service의 긴밀한 동작 테스트가 중요하고, 이런 상황에서 CI의 적용은 기능 충돌 방지 등의 이점을 제공한다.

CI(지속적 통합)를 통해 개발자가 애플리케이션에 적용한 변경 사항이 병합되면, 이러한 변경 사항이 애플리케이션을 손상시키지 않도록 자동으로 애플리케이션을 구축하고 각기 다른 레벨의 자동화 테스트 실행을 통해 변경 사항이 애플리케이션에 제대로 적용되었는지 확인한다. 자동화된 테스트에서 기존 코드와 신규 코드 간의 충돌이 발견되면 CI를 통해 이러한 버그를 더 빠르게 자주 수정할 수 있다.

CD: 지속적 제공, 지속적 배포

CD는 지속적 제공(Continuous Delivery) 혹은 지속적 배포(Continuous Depolyment) 두 용어 모두의 축약어이다.

지속적 제공은 CI(지속적 통합)의 빌드 자동화, 유닛 및 통합 테스트 수행 후 이어지는 지속적 제공(Continuous Delivery)으로, 유효한 코드를 공유 레포지토리에 자동으로 release하는 것을 말한다.
효과적인 지속적 제공 프로세스를 실현하기 위해서는 개발 파이프라인에 CI가 먼저 구축되어 있어야 한다. 지속적 제공의 목표는 프로덕션 환경으로 배포할 준비가 되어있는 코드베이스를 확보하는 것으로, 코드 변경 사항 병합부터 프로덕션에 적합한 빌드 제공까지의 테스트 자동화와 코드 release 자동화가 포함된다. 이 프로세스를 완료하면 보다 빠르고 손쉽게 애플리케이션을 프로덕션으로 배포할 수 있게 된다.

CI/CD 파이프라인의 마지막 단계는 지속적 배포이다. 프로덕션 준비가 완료된 빌드를 코드 레포지토리에 자동으로 릴리스하는 지속적 제공의 확장된 형태로서, 애플리케이션을 프로덕션으로 release하는 작업을 자동화한다.
프로덕션 이전의 파이프라인 단계에는 수동 작업 과정이 없기 때문에 지속적 배포가 제대로 이루어지려면 테스트 자동화가 제대로 설계되어 있어야 한다.

지속적 배포가 제대로 구현되면 애플리케이션에 변경 사항을 작성한 후 몇 분 이내에 애플리케이션을 자동으로 실행할 수 있다. CI/CD의 적용은 애플리케이션 배포의 위험성을 줄여주므로 애플리케이션 변경 사항을 한 번에 모두 release하지 않고 작은 조각으로 세분화하여 더욱 손쉽게 release할 수 있다.

정리

CI는 새로운 소스코드의 빌드, 테스트, 병합까지를 의미하고, CD는 개발자의 변경사항이 레포지토리로부터 프로덕션 환경까지 release되는 것을 의미한다.

서비스의 사용자는 최대한 빠른 시간 내에 최신 버전의 프로덕션을 제공받아야 한다. 이 때 소프트웨어가 신뢰 가능한 수준의 버전을 유지할 수 있도록 하는 것이 CD이다.

profile
u0u0u0

0개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN