상세 컨텐츠

본문 제목

CI(Continuous Integration), CD(Continuous Delivery / Deployment)에 대해 알아보자.

IT/프로그래밍

by James Lee. 2019. 4. 7. 20:37

본문

웹 서비스를 개발/운영하다 보면 CI 와 CD라는 말을 자주 듣게 된다. 

보통 CI 와 CD 를 묶어서 이야기하는 경우가 많아서 많은 사람들이(이전에 내가 그랬듯이) 두 개념을 종종 혼동하곤 한다.

이 포스팅에서는 CI와 CD란 무엇인지, 그리고 차이점은 무엇인지 알아본다.

CI 와 CD를 실습해보는 것은 창천향로님의 6) 스프링부트로 웹 서비스 출시하기 - 6. TravisCI & AWS CodeDeploy로 배포 자동화 구축하기 글을 읽어보는 것을 추천한다.

CI(Continuous Integration) - 지속적 통합

이미지 출처

CI(Continuous Integration)는 빌드와 테스트 자동화에 대한 개념이다. (이하 CI)

  • 개발자를 위한 자동화 프로세스인 지속적인 통합(Continuous Integration)을 의미
  • 빌드 및 테스트를 자동화해준다.

CI 예시

  1. 개발자는 자신의 로컬에서 코드를 수정하고 Github에 Push를 한다.
  2. CI 도구에서 변경된 코드에 대한 빌드와 테스트를 수행하고 결과를 피드백해준다.

아래는 CI 도구 중 하나인 Travis CI의 화면이다.

빌드 & 테스트에 이상이 있는 경우 → 실패

빌드 & 테스트가 이상 없이 수행되는 경우 → 성공

CI 도구

CI를 위한 도구로는 Jenkins, TravisCI 등이 있다.

CD(Continuous Delivery / Deployment) - 지속적 전달 / 배포

이미지 출처

CI가 빌드 및 테스트 자동화라면 CD는 배포 자동화에 대한 개념이다.

CD는 자동화의 수준에 따라 아래 2가지로 구별할 수 있다.

  1. Continuous Delivery
  2. Continuous Deployment

이 둘의 차이점은 '프로덕션 배포까지 자동화하는가'다.

  • Continuous Delivery (지속적 전달)은 프로덕션은 수동으로 배포한다.
  • Continuous Deployment (지속적 배포)는 프로덕션까지 자동으로 배포한다.

CD 예시

  1. CI 예시에서 CI가 정상적으로 수행되고 나면 빌드된 파일을 CD에 전달한다.
  2. CD에서는 빌드가 완료된 파일을 받아서 전처리 / 후처리 등을 수행한다. 아래에선 2가지 예시를 간단하게 설명한다.
    1. ex 1) 기존에 동작하던 애플리케이션을 종료시키고 업데이트된 빌드 파일로 애플리케이션을 구동
    2. ex 2) 무중단 배포의 경우, 새로 업데이트된 파일을 다른 포트에 풀어놓고, 구동이 완료되면 프락시에서 들어오는 요청을 스위칭 함 (reverse proxy)

CD 도구

CD를 위한 Tool로는 AWS Code Deploy 등이 있다.

정리

정리하자면 CI는 Build & Test에 관한 자동화이며, CD는 Deploy에 대한 자동화이다.

CD는 두 가지 종류 (Delivery / Deployment) 로 분류되는데 그 차이는 프로덕션 배포까지 자동화하는가이다.

CI / CD의 전체적인 파이프라인은 아래와 같다.

이미지 출처

Reference


관련글 더보기

댓글 영역