지속적 통합과 지속적 배포
IT 위키
더 많은 작업
Continuous Integration (CI)와 Continuous Delivery (CD)는 소프트웨어를 빠르고 안정적으로 개발·검증·배포하기 위해 자동화를 적용하는 핵심 DevOps 실천 방법이다. CI는 코드 통합과 자동 테스트가 중심이며, CD는 언제든지 배포 가능한 상태를 유지하도록 확장된다.
- 흔히 둘을 합쳐 CI/CD라고 많이 표기한다.
Continuous Delivery는 코드를 항상 배포 가능한 상태로 유지하며, 모든 변경 사항을 프로덕션과 유사한 환경으로 자동 이동시킨다.
CD 파이프라인 단계
- Develop
- Build
- Test
- Release
- Deploy
- Operate
- master(main) 브랜치는 항상 배포 가능한 상태를 유지해야 한다
- 잘못된 코드가 master로 들어가지 않도록 검증 절차가 필요하다
- 모든 Pull Request에서 CI를 실행해야 한다
- Merge 전에 코드가 정상 동작하는지 반드시 확인해야 한다
- 언제든지 릴리즈가 가능한 환경을 유지한다
- SDLC(소프트웨어 개발 생명주기)의 각 단계를 자동으로 연결
- 배포 시간 단축
- 비용 절감
- 프로젝트 규모에 따라 확장 가능
- 코드가 SDLC의 각 단계로 자동 이동하고 배포됨
- 모든 단계에서 품질이 보장되도록 한다
- 지속적으로 코드 리뷰를 수행한다
- 파이프라인 전체의 품질 상태를 유지한다
- 사용자 스토리를 작게 유지한다
- 작은 변경은 위험을 줄인다
- 변경 사항을 지속적으로 통합한다
- 사람은 반복적인 작업을 수행해서는 안 된다
- 테스트 주도 개발(TDD)에서도 자동화 도구로 테스트를 수행한다
- 반복 작업은 컴퓨터가 더 빠르고 정확하게 수행한다
예시:
- GitHub Actions
- Continuous Delivery는 빠른 피드백을 가능하게 한다
- 빌드 또는 테스트 실패를 즉시 발견할 수 있다
- 팀이 지속적으로 프로세스를 개선할 수 있도록 한다
- 빌드가 실패했을 때 “누구 탓인가?”를 묻지 않는다
- 대신 다음을 질문한다:
- "왜 실패했는가?"
- "어떻게 하면 재발을 방지할 수 있는가?"
- 모든 변경을 항상 릴리즈 가능한 상태로 유지
- 트렁크 기반 개발(trunk-based development) 사용
- 자동화된 파이프라인을 통해 배포
- 가능한 많은 프로세스를 자동화
- 다운타임 제거
- 테스트 단위 수준의 세밀한 릴리즈 수행
- 소스 코드 저장소
- 애플리케이션을 빌드하는 빌드 서버
- 빌드와 테스트를 자동화하는 통합 또는 오케스트레이션 서버
- 바이너리 및 아티팩트 저장소
- 자동 구성 및 자동 배포 도구
- 모든 변경 사항을 배포 가능한 상태로 유지
- SDLC 전체를 자동으로 이동
- 프로덕션 배포는 수동 승인 가능
- Continuous Delivery의 확장
- 자동 테스트 통과 시 즉시 프로덕션으로 배포
- 인간의 승인 없이 자동 배포 진행
| 구분 | Continuous Delivery | Continuous Deployment |
|---|---|---|
| 프로덕션 배포 | 수동 승인 가능 | 완전 자동화 |
| 목적 | 항상 배포 가능한 상태 유지 | 모든 변경을 자동 배포 |
| 위험 감수도 | 중간 | 높음 |
- Martin Fowler — Continuous Delivery
- Jez Humble & David Farley — Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation