[DevOps] CI와 CD란?

Cover image

CI/CD

DevOps에 대해 개념에 듣다 보면, CI와 CD에 대해 듣게 됩니다. 이때 CI와 CD의 개념에 대해 한번 정리해볼려고합니다.

CI/CD의 개념

CD/CD는 Continuous Integration (지속적인 통합) / Continuous Delivery or Continuous Deployment (지속적인 전달/지속적인 배포) 의 약자입니다. 이러한 CI/CD는 애플리케이션 개발 단게를 자동화하여 애플리케이션보다 짧은 주기로 고객에게 제공하는 방법입니다. CD/CD의 기본 개념은 지속적인 통합, 지속적인 서비스 제공, 지속적인 배포입니다. CI/CD는 새로운 코드 통합을 통해 개발 및 운영에서 발생하는 인테그레이션 헬(Integration hell)을 해결하기 위한 솔루션입니다.

CI/CD는 애플리케이션의 통합 및 테스트 단게에서부터 제공 및 배포에 이르는 애플리케이션의 라이프사이클 전체에 걸쳐 지속적인 자동화와 지속적인 모니터링을 제공합니다. 이러한 구축 사례를 CI/CD 파이프라인이라 부르며, 개발과 운영팀의 애자빌 방싱 협력을 통해서 지원됩니다.

Tip) CD는 Continuous Delivery 와 Continuous Deployment 로 두 의미를 가집니다.


CI와 CD의 차이?

CI와 CD는 커버하는 프로세스의 범위에서 차이가 있습니다. CI코드 레벨의 테스트까지 자동화하며, CD시스템 테스트 및 배포 등 실행 환경과 릴리즈까지 자동화합니다.

CI/CD을 적용해서 품질 향상과 개발 효율성을 올려주고 릴리즈 하는 기간을 단축합니다. 최근 비지니스의 변화가 빨라지기 때문에, 시스템과 서비스를 신속하게 변화해야하는 필요성이 있기 때문에 CI/CD를 적용해야할 필요가 있습니다.


CI/CD의 단계.

CI-CD-Diff

1. Continuous Integration (지속적 통합)

개발자가 애플리케이션에 적용한 변경 사항이 병합되면 이러한 변경 사항이 애플리케이션을 손상시키지 않도록 자동으로 애플리케이션을 구축하고 각기 다른 레벨의 자동화 테스트(일반적으로 단위 테스트 및 통합 테스트) 실행을 통해 변경 사항이 애플리케이션에 제대로 적용되었는지를 확인합니다.

2. Continuous Delivery (지속적 제공)

CI의 빌드 자동화, 유닛 및 통합 테스트 수행 후, 이어지는 지속적 제공 프로세스에서는 유효한 코드를 리포지토리에 자동으로 릴리스합니다.

3. Continuous Deployment (지속적 배포)

프로덕션 준비가 완료된 빌드를 코드 리포지토리에 자동으로 릴리스하는 지속적 제공의 확장된 형태인 지속적 배포는 애플리케이션을 프로덕션으로 릴리스하는 작업을 자동화합니다.


CI와 CD의 단계

CI(지속적인 통합)의 장점

CI에서는 개발자가 자신이 변경한 코드를 저장소에 커밋하고 그때마다 자동화 된 빌드와 테스트가 실행합니다. 이 짧은 사이클로 통합을 반복하면서 통합시 발생된 오류를 신속하게 수정하여 개발팀은 통합된 소프트웨어를 신속하게 개발할 수 있습니다.

다음과 같은 특징을 가집니다.

  • 버그를 신속하게 발견하고 대응 가능합니다.

    • 테스트를 자주 발생하기 때문에, 버그를 빠르게 발견하고 해결할 수 있습니다.
  • 신속한 업데이트와 배포가 가능합니다.

    • 항상 최신 버전을 유지하여 이를 바탕으로 업데이트를 배포할 수 있습니다.
  • 개발의 생산성이 향상됩니다.

    • 일찍 적은 비용으로 오류를 해결할 수 있기 때문에 생산성을 향상시키고 품질이 좋은 소프트웨어에 개발할 수 있게됩니다.

CD(지속적인 전달)의 장점

CD는 클라우드와 컨테이너 기술의 확산과 인프라를 코드로 관리할 수 있게 되면서 등장하였습니다. 이를 통해 소스 커밋부터 릴리즈까지 모든 작업을 자동으로 수행할 수 있습니다.

다음과 같은 특징을 가집니다.

  • 소프트웨어 릴리스 프로세스 자동화할 수 있습니다.

    • CD에서는 개발 코드를 변경, 빌드, 테스트, 운영 환경 릴리스에 대한 준비가 자동화됩니다.
  • 개발자 생산성 향상할 수 있습니다.

    • 수작업을 줄여서 생산성이 향상됩니다.
  • 버그를 신속하게 발견하고 대응할 수 있습니다.

    • 테스트의 빈도를 높이고 내용을 충실하게 하여 버그를 조기에 발견하고 해결할 수 잇습니다.
  • 신속한 업데이트와 배포가 가능합니다.

CI/CD 지원 툴

  • Jenkins
  • Travis
  • CicleCI
  • Bamboo

마무리.

다음글에는 대표적인 CI/CD 지원 툴인 Jenkins에 대해 한번 정리해보겠습니다.


출처