배포 전략 — 재생성 · 롤링 · 블루그린 · 카나리
서버 6대에 v2를 내보내는 네 방법을 같은 무대에서 실행해, 다운타임·공존 시간·롤백 속도·폭발 반경이 어떻게 다른지 서빙 대수와 트래픽 비율로 보여준다.
1 / 12v1이 도는 서버 6대에 v2를 내보내는 네 가지 방법 — 볼 것은 세 가지: 다운타임이 있는가, 문제를 얼마나 일찍 아는가, 되돌리는 데 얼마나 걸리는가.
재생성롤링블루그린카나리
v1v1v1v1v1v1
서비스 중 6 / 6대 · v2 트래픽 0%
단계 목록 · 키보드 ←/→ 이동, Space 재생
배포 전략은 세 질문의 답이다 — 다운타임을 허용하는가, 문제를 얼마나 일찍(얼마나 적은 사용자로) 발견하는가, 되돌리는 데 몇 초가 걸리는가.
왜 헷갈리는가
블루그린과 카나리가 특히 섞인다. 블루그린은 '전체를 한 번에 전환하되 되돌릴 스위치를 쥐는' 전략이고, 카나리는 '일부 트래픽으로 먼저 검증하는' 전략이다 — 전환의 폭이 다르고, 그래서 위험의 모양이 다르다.
애니메이션이 보여주는 것
재생성은 서빙 0대의 구간이 정면으로 보인다 — 다운타임을 명시적으로 지불하는 유일한 전략. 롤링은 한 대씩 바꿔 서빙이 항상 유지되지만 v1·v2 공존 구간이 길다 — 그래서 하위 호환이 전제 조건이 된다.
블루그린은 그린 무리를 통째로 준비해 스위치를 젖힌다 — 전환 0초, 롤백 0초(구 무리를 남겨 두는 동안). 대신 자원 2벌에, 문제가 있으면 전원이 겪는다. 카나리는 10%에게만 먼저 — 계기판(오류율·지연)이 판단하고, 화면처럼 오류 급등 시 트래픽을 v1로 자동 회귀시킨다.
선택 기준과 도구
현업의 기본 조합은 이렇다.
- 내부 도구·점검창 허용: 재생성 — 단순함이 정의다.
- 일반 서비스의 기본값: 롤링 — 쿠버네티스 Deployment의 default. maxUnavailable/maxSurge로 속도와 여유를 조절.
- 전환·롤백이 초 단위여야 하는 결제·거래 시스템: 블루그린 — DB 마이그레이션이 얽히면 expand-contract(스키마 먼저 확장, 코드 배포, 나중 축소)로 푼다.
- 사용자 대면 대규모 서비스: 카나리 + 메트릭 자동 판정(Argo Rollouts·Flagger·Spinnaker). '배포(코드 내보내기)'와 '릴리스(트래픽 주기)'의 분리가 본질 — 피처 플래그는 같은 발상을 코드 레벨로 내린 것.
- 네 전략 공통의 전제: v1·v2 공존 가능(API·스키마·메시지 하위 호환). 진짜 어려운 것은 서버 교체가 아니라 DB 스키마다.
기억할 것
- 재생성=다운타임 지불, 롤링=무중단 기본값, 블루그린=즉시 스위치, 카나리=폭발 반경 최소화.
- 블루그린 vs 카나리: 전환의 폭(전체 vs 일부)이 다르다 — 위험의 모양이 다르다.
- 카나리의 본질은 배포와 릴리스의 분리 — 메트릭이 릴리스를 결정한다.
- 모든 무중단 전략의 전제는 v1·v2 공존 — 어려운 건 코드가 아니라 DB 스키마다.