85. 카나리 배포 (Canary Release) - 극단적 롤아웃과 리스크의 소멸

⚠️ 이 문서는 신규 버전(v2.0) 서버를 띄울 때 서버 100대를 확 갈아버렸다가 전국 1,000만 고객에게 동시다발적 에러를 뿜게 만들어 회사가 뉴스에 나오는 대참사를 막기 위해, **옛날 탄광의 광부들이 독가스 유무를 알기 위해 연약한 '카나리아 새'를 먼저 들여보냈던 것처럼, 오직 전체 트래픽의 1% 불쌍한 고객들만 슬쩍 v2.0 서버로 밀어 넣어 결제 장애(독가스)가 터지는지 팝콘 먹으며 지켜본 뒤 10%, 100%로 밸브를 서서히 여는 실리콘밸리 빅테크들의 가장 쫄보 같지만 가장 강력한 배포 전술인 '카나리 배포(Canary Deployment)'**를 다룹니다.

핵심 인사이트 (3줄 요약)

  1. 본질: 사내 테스터(QA) 10명이 클릭해보는 것으로는 완벽한 버그를 절대 잡을 수 없다. 가장 완벽한 테스터는 바로 '진짜 돈을 쓰는 리얼 고객'이다. 카나리는 이 진짜 고객 중 1%를 내 배타 테스터 마루타로 몰래 써먹는 네트워크 트래픽 쪼개기 예술이다.
  2. 가치: 장애의 타격(Blast Radius)을 극단적으로 최소화한다. 결제 버그가 터져도 전체 고객의 99%는 평온하게 구버전(v1.0)으로 돈을 내고 있으므로 회사 매출은 타격이 없다. 1%에서 500 에러(독가스)가 감지되는 순간 1초 만에 밸브를 닫아버리는 무피해 롤백(Rollback)이 꽃이다.
  3. 기술 체계: 이 마법은 단순히 파드 몇 개 더 띄운다고 되지 않는다. 로드밸런서나 쿠버네티스의 Ingress, Istio(서비스 메시) 같은 똑똑한 L7 라우팅 엔진이 앞단에 떡 하니 버티고 서서 가중치 기반 라우팅(Weight Routing)이나 HTTP 헤더 분석으로 트래픽을 현미경처럼 갈라쳐 줘야만 가능하다.

Ⅰ. 사내 QA의 한계와 카나리아 새의 투입

테스트 서버에서 잘 돌던 놈이 운영 서버에만 나가면 터지는 징크스.

  1. 블루/그린(Blue/Green) 배포의 맹점:
    • 어제 배운 블루/그린 배포는 완벽해 보였다. 개발자들이 Green(신규) 서버 뒷구멍으로 들어가 1시간 동안 장바구니를 담아보고 완벽하다며 100% 트래픽을 팍 스위칭했다.
    • 그런데 스위치를 꺾자마자 서버가 폭파되었다. 개발자 10명의 클릭은 버텼지만, "실제 운영망의 예측 불가능한 브라우저, 기상천외한 사용자 행동 패턴, 캐시 미스"가 쏟아지자 코드가 견디지 못하고 죽어버린 것이다 (현장 데이터의 부재).
  2. 카나리 새(Canary Bird)의 출격 (점진적 라우팅):
    • 그래서 구글이나 페이스북은 사내 테스트를 불신한다.
    • v1.0 서버 100대가 도는 옆에, v2.0(새 코드) 서버 파드 딱 1대만 살포시 띄운다.
    • 그리고 앞단의 Nginx Ingress나 Istio 설정 창에서 룰을 건다. "지금부터 들어오는 외부 손님 100명 중, 무작위로 주사위를 굴려서 99명은 v1.0으로 보내고 딱 1명만 v2.0 서버로 던져라! (가중치 99:1 라우팅)"
  3. 독가스 탐지와 관망:
    • 데브옵스 엔지니어는 팔짱을 끼고 모니터링 대시보드(Datadog, Prometheus) 화면에 띄워둔 **'v2.0 서버의 5xx 에러율 그래프(새의 심박수)'**만 뚫어져라 쳐다본다.
    • 이 1%의 실제 유저들이 새 서버에서 미친 짓을 하며 1시간 동안 온갖 결제 버튼을 다 누르고 다닌다. 만약 500 에러 그래프가 팍 튀어 오르면(독가스 감지/새가 죽음)?
    • 스위치를 돌려 1%의 유입 밸브마저 즉시 꽉 잠가버려(Rollback) 100% v1.0으로 복귀한다. 희생자는 1%에 불과하여 회사는 뉴스를 타지 않고 생존한다.

📢 섹션 요약 비유: 제약 회사가 신약(v2.0)을 만들었습니다. 임상 시험(사내 테스트)은 통과했지만, 전 국민 1,000만 명(트래픽 스위칭)에게 한 번에 주사를 놔버렸다가 부작용이 터지면 나라는 멸망합니다(블루그린의 한계). 그래서 카나리 배포는 아주 조심스럽게 무작위로 뽑은 A 마을 주민 100명(1% 트래픽)에게만 며칠간 약을 먹여봅니다. 주민들이 구토(500 에러)를 하는지 매의 눈으로 모니터링하다가 100명 다 멀쩡하면 B 도시(10%), 나중엔 전국(100%)으로 주사 보급 밸브를 서서히 열어가는, 가장 보수적이고 빈틈없는 안전 주사 기법입니다.


Ⅱ. 트래픽 분할의 예술 (Weight vs Header)

무작위로 뽑을 것인가, 콕 집어서 보낼 것인가.

  1. 가중치 기반 라우팅 (Weight-based Traffic Split):
    • 가장 대중적인 카나리 방식이다.
    • 쿠버네티스의 Ingress Nginx 컨트롤러 같은 녀석이 canary-weight: 5 (5%) 라는 텍스트 한 줄만 먹이면, 알아서 들어오는 IP들을 랜덤으로 섞어서 정확히 5%의 트래픽만 신규 파드 쪽으로 꺾어준다. (운 좋은 5% 고객은 자기가 마루타인지 모른 채 새 디자인 화면을 쓴다.)
  2. HTTP 헤더 기반 타겟팅 라우팅 (Header-based Routing):
    • 랜덤으로 돌렸다가 VVIP 고객이 재수 없게 걸려 에러를 보면 큰일 난다. 이럴 때 쓴다.
    • 로드밸런서가 문 앞에서 브라우저가 던지는 HTTP 헤더를 까본다.
    • 룰 1: if (Header [User-Agent] == 'Android' && Header [User-Group] == 'Beta-Tester')
    • 오직 쿠키나 헤더에 '나 베타 테스터 앱 깔았음'이라는 징표가 있는 안드로이드 폰 고객만 족집게처럼 핀셋으로 뽑아서 신규 v2.0 서버로 던진다. 나머지 99.9% 일반 고객은 무조건 v1.0으로 보낸다. (A/B 테스트 플랫폼과 완벽하게 똑같은 원리로 동작한다.)

📢 섹션 요약 비유: 백화점 정문에서 100명의 손님이 들어올 때, 눈을 감고 제비뽑기를 해서 5명만 강제로 새로 연 신관(v2.0) 건물로 등 떠미는 것이 '가중치 기반 랜덤 카나리'입니다. 반대로 정문 가드가 손님들의 목에 걸린 이름표(HTTP 헤더)를 일일이 스캔한 뒤, 'VIP 손님'이나 '직원 가족'이라는 목걸이를 건 특별한 사람만 콕 집어서 신관 VIP 라운지로 조용히 안내하고 일반인은 전부 구관(v1.0)으로 보내는 타겟팅 기법이 '헤더 기반 카나리'입니다.


Ⅲ. 수동 배포의 몰락과 프로그레시브 딜리버리 (Argo Rollouts)

모니터를 보며 10% 밸브를 손으로 돌리는 것도 결국 인간의 노가다다.

  1. 데브옵스의 철야 감시 한계:
    • 1% 카나리를 열어놓고 1시간 동안 엔지니어가 모니터 화면(새가 죽는지)을 뚫어져라 쳐다보고 있다. 괜찮은 것 같아서 10%로 밸브를 손으로 올린다. 또 1시간 구경한다.
    • 넷플릭스처럼 하루에 수십 번 배포하는 회사에선 사람이 모니터링하다 미쳐버린다.
  2. Argo Rollouts와 프로그레시브 딜리버리 (Progressive Delivery):
    • 카나리 배포 자체를 AI 로봇(Argo Rollouts 등)에게 통째로 외주 줘버린 궁극의 자동화 사상이다.
    • 개발자는 Rollout.yaml 파일에 이렇게 시나리오를 적어놓고 집에 자러 간다. [1단계: 1% 트래픽으로 30분 대기 -> 에러율 0.01% 미만이면 2단계: 10%로 밸브 열고 1시간 대기 -> ... -> 100% 오픈]
    • 봇이 시나리오대로 알아서 밸브를 찔끔찔끔 연다(점진적 배포).
    • 이 봇의 가장 소름 돋는 점은 프로메테우스(모니터링) 뇌와 연동되어 있다는 것이다. 밸브를 10%로 여는 순간 파드의 500 에러율 수치가 치솟는 걸 봇이 기계적으로 감지하면, 엔지니어를 깨우지도 않고 로봇 스스로 1초 만에 밸브를 0%로 잠가버리고 옛날 파드로 100% 롤백(Auto-Rollback)해 버린다.
    • 배포, 모니터링, 장애 시 후퇴라는 모든 인간의 판단 개입을 0%로 날려버린 클라우드 네이티브의 최종 진화형태다.

📢 섹션 요약 비유: 카나리 배포의 진화입니다. 옛날엔 관리자가 댐의 수문(트래픽 밸브)을 1% 열고 1시간 동안 강물이 넘치는지 망원경으로 덜덜 떨며 구경하다 10%로 수동으로 손잡이를 돌렸습니다. '프로그레시브 딜리버리(Argo Rollouts)'는 이 수문에 인공지능 모터를 달아버린 것입니다. 사장님은 "물 높이가 안전하면 1시간마다 수문을 10%씩 알아서 열어"라고 세팅만 해둡니다. AI 수문은 강물에 꽂힌 수위 센서(모니터링)를 실시간으로 읽으며 조금씩 문을 열다가, 홍수 징조(에러)가 감지되는 그 0.1초의 찰나에 스스로 비상 셔터를 쾅! 닫아버려(자동 롤백) 마을 전체를 완벽하게 구출해 내는 100% 무인 지능형 재난 방어 시스템입니다.