웹 서비스를 개발/운영하다 보면 CI 와 CD라는 말을 자주 듣게 된다.
보통 CI 와 CD 를 묶어서 이야기하는 경우가 많아서 많은 사람들이(이전에 내가 그랬듯이) 두 개념을 종종 혼동하곤 한다.
이 포스팅에서는 CI와 CD란 무엇인지, 그리고 차이점은 무엇인지 알아본다.
CI 와 CD를 실습해보는 것은 창천향로님의 6) 스프링부트로 웹 서비스 출시하기 - 6. TravisCI & AWS CodeDeploy로 배포 자동화 구축하기 글을 읽어보는 것을 추천한다.
CI(Continuous Integration) - 지속적 통합
CI(Continuous Integration)는 빌드와 테스트 자동화에 대한 개념이다. (이하 CI)
- 개발자를 위한 자동화 프로세스인 지속적인 통합(Continuous Integration)을 의미
- 빌드 및 테스트를 자동화해준다.
CI 예시
- 개발자는 자신의 로컬에서 코드를 수정하고 Github에 Push를 한다.
- CI 도구에서 변경된 코드에 대한 빌드와 테스트를 수행하고 결과를 피드백해준다.
아래는 CI 도구 중 하나인 Travis CI의 화면이다.
빌드 & 테스트에 이상이 있는 경우 → 실패
빌드 & 테스트가 이상 없이 수행되는 경우 → 성공
CI 도구
CI를 위한 도구로는 Jenkins, TravisCI 등이 있다.
CD(Continuous Delivery / Deployment) - 지속적 전달 / 배포
CI가 빌드 및 테스트 자동화라면 CD는 배포 자동화에 대한 개념이다.
CD는 자동화의 수준에 따라 아래 2가지로 구별할 수 있다.
- Continuous Delivery
- Continuous Deployment
이 둘의 차이점은 '프로덕션 배포까지 자동화하는가'다.
- Continuous Delivery (지속적 전달)은 프로덕션은 수동으로 배포한다.
- Continuous Deployment (지속적 배포)는 프로덕션까지 자동으로 배포한다.
CD 예시
- CI 예시에서 CI가 정상적으로 수행되고 나면 빌드된 파일을 CD에 전달한다.
- CD에서는 빌드가 완료된 파일을 받아서 전처리 / 후처리 등을 수행한다. 아래에선 2가지 예시를 간단하게 설명한다.
- ex 1) 기존에 동작하던 애플리케이션을 종료시키고 업데이트된 빌드 파일로 애플리케이션을 구동
- ex 2) 무중단 배포의 경우, 새로 업데이트된 파일을 다른 포트에 풀어놓고, 구동이 완료되면 프락시에서 들어오는 요청을 스위칭 함 (reverse proxy)
CD 도구
CD를 위한 Tool로는 AWS Code Deploy 등이 있다.
정리
정리하자면 CI는 Build & Test에 관한 자동화이며, CD는 Deploy에 대한 자동화이다.
CD는 두 가지 종류 (Delivery / Deployment) 로 분류되는데 그 차이는 프로덕션 배포까지 자동화하는가이다.
CI / CD의 전체적인 파이프라인은 아래와 같다.
댓글 영역