💡 핵심 인사이트
카나리 배포는 무중단 배포 전략의 꽃으로, 새로운 V2.0 버전의 코드를 서버에 올릴 때 한 번에 100% 쏟아붓지 않고, 광부들이 가스 누출을 확인하기 위해 카나리아 새를 데려가듯 전체 트래픽(고객)의 단 5%만 신버전으로 몰래 흘려보내어 치명적인 버그가 없는지 살살 간을 보는(점진적) 배포 방식입니다.
Ⅰ. 카나리아(Canary) 새의 어원과 위험 회피
과거 광부들이 깊은 석탄 광산에 들어갈 때 일산화탄소(독가스) 중독으로 떼죽음을 당하곤 했습니다. 이를 막기 위해 가스에 매우 민감해 조금만 마셔도 죽어버리는 노란색 '카나리아' 새를 새장에 넣어 가장 맨 앞에 들고 들어갔습니다. 카나리아가 죽으면 광부들은 즉시 뒤도 안 돌아보고 갱도를 탈출(롤백)하여 목숨을 건졌습니다.
소프트웨어 배포도 똑같습니다. 개발팀 컴퓨터에서 아무리 완벽하게 돌아갔던 코드도 전 세계 100만 명이 접속하는 라이브 서버에 올리면 예상치 못한 독가스(메모리 누수 버그 등)가 터집니다. 이때 100만 명을 한꺼번에 죽이지 않고 소수의 5만 명(카나리아)만 먼저 신버전에 넣어 희생(?)을 최소화하는 전략입니다.
Ⅱ. 카나리 배포의 동작 원리 (트래픽 쪼개기)
앞단에 있는 문지기 라우터(로드밸런서, 쿠버네티스 Ingress)의 트래픽 조절 능력이 핵심입니다.
- 신버전(V2) 서버 투입: 유저 100%가 구버전(V1) 서버를 쓰고 있습니다. 엔지니어가 신버전(V2) 서버를 몇 대만 쓱 띄워놓습니다.
- 라우터 설정 (5% 라우팅): 라우터에게 지시합니다. "지금부터 들어오는 고객 100명 중 랜덤으로 5명만 V2 서버로 보내고, 95명은 기존 안전한 V1 서버로 냅둬."
- 관찰 (모니터링): 5%의 유저들이 신버전 V2를 사용합니다. SRE 모니터링 팀이 에러율(HTTP 500), CPU 사용량, 레이턴시 그래프를 뚫어지게 관찰합니다.
- 가스(버그) 누출 💥: V2 서버의 에러율이 치솟으며 고객 클레임이 들어옵니다! (카나리아 사망). 엔지니어는 1초 만에 라우터 스위치를 돌려 V2로 가는 5% 트래픽을 차단하고 100% V1으로 즉각 롤백합니다. 95%의 대다수 고객은 오류가 난 줄도 모르게 지나갑니다.
- 평온 (정상): 1시간이 지나도 V2 서버가 아무 문제 없이 잘 돌아갑니다.
- 점진적 100% 확장: "오케이 안전하다." 트래픽을 5% ➔ 20% ➔ 50% ➔ 마침내 100%로 스르륵 올려주어 부드럽게 전체 서버 업데이트(배포)를 완수합니다. V1 구버전 서버는 폐기됩니다.
Ⅲ. 블루-그린 배포(Blue/Green)와의 차이점
둘 다 무중단 배포를 위한 훌륭한 전략이지만 투입 자본과 배포의 과감성에 차이가 큽니다.
- 블루-그린 배포:
- 구버전 10대, 신버전 10대를 100% 빵빵하게 똑같이 준비합니다. (돈이 2배로 듭니다).
- 스위치를 누르면 트래픽이 0%에서 100%로 한 방에(All or Nothing) 신버전으로 확 꺾입니다. 속도는 빠르지만, 만약 신버전에 버그가 있으면 100%의 고객이 일시적으로 모두 장애를 맞게 됩니다.
- 카나리 배포:
- 기존 서버 인프라에 신버전 서버를 1대씩 야금야금(5%, 10%) 추가하며 간을 봅니다.
- 버그의 충격을 극소수의 유저로 제한하여 가장 방어적이고 안전하지만, 100% 배포가 완료될 때까지 엔지니어가 차트를 계속 쳐다보며 조절해야 하므로 시간이 꽤 걸립니다. (최근엔 ArgoCD 같은 툴이 이를 자동화함).
📢 섹션 요약 비유: 카나리 배포는 목욕탕에 들어갈 때 **'발가락부터 물 온도 간 보기'**입니다. 블루-그린 배포가 "앗 뜨거워!" 할 수도 있지만 일단 다이빙부터 하고 보는 상남자식 입수라면, 카나리 배포는 발가락 하나(트래픽 5%)만 탕에 쓱 넣어보고, 앗 뜨거우면 바로 빼고(롤백), 괜찮으면 서서히 무릎(20%), 허리(50%)까지 물에 담가 마침내 목욕재계를 안전하게 마치는 극도로 조심스러운 배포 기법입니다.