같은 글자, 다른 약속 두 개
CD는 의도적으로 여러 뜻을 품은 용어야. 똑같은 두 글자가 전혀 다른 두 가지를 뜻하지. 대부분 팀이 생각하는 것보다 이 차이가 훨씬 중요해.
- Continuous Delivery — CI를 통과한 모든 커밋이 자동으로 패키징되고 버전 관리되며 배포할 준비를 마쳐. 하지만 사람이 버튼을 누르거나 릴리스 티켓을 승인해야만 프로덕션 환경에 닿아.
- Continuous Deployment — CI를 통과한 모든 커밋이 자동으로 프로덕션에 배포돼. 사람의 개입은 없어. 파이프라인 자체가 배포 버튼인 셈이야.
둘 다 기저에 작동하는 CI가 필요해. Delivery는 쉬운 약속이야: 지금 출시하고 싶으면 이 커밋을 출시할 수 있어. Deployment는 어려운 약속이지: 지금 이 커밋을 출시하고 있어. 테스트 스위트와 롤백 계획이 그 결정을 맡길 만큼 충분히 좋아.
어느 쪽을 진짜 원해?
Deployment가 화려해 보이지만, 대부분 팀은 정직하게 그걸 해내지 못해. Delivery가 현실적인 목표야. 테스트 커버리지, 관측 가능성, 롤백 스토리가 성숙해질 때까지는 말이야. 잘못 고르는 것, 즉 파이프라인은 사실 Delivery인데 Deployment라고 주장하는 것이 바로 장애를 부르는 길이지.