82. 무중단 배포 (Zero Downtime Deployment) 전략 3가지
⚠️ 이 문서는 웹 서비스의 버전이 v1.0에서 v2.0으로 업데이트될 때, 과거처럼 새벽 2시에 "시스템 점검 중입니다"라는 끔찍한 에러 화면을 띄워 고객의 결제를 끊어버리는 아마추어 같은 짓을 막고, **대낮에 수만 명의 고객이 물건을 사고 있는 와중에도 서버 100대가 물 흐르듯 조용히 새 버전으로 갈아입어 고객이 단 1초의 멈춤(Downtime)도 느끼지 못하게 만드는 클라우드 아키텍처의 마법, 무중단 배포 3대 전술(롤링, 블루-그린, 카나리)**을 다룹니다.
핵심 인사이트 (3줄 요약)
- 본질: 서버를 끄고 새 코드를 밀어 넣는 방식이 아니라, "새 버전의 서버(컨테이너)를 띄워두고, 로드밸런서(문지기)의 방향을 구버전에서 신버전으로 절묘하게 꺾어치기" 하는 네트워크 라우팅 예술이다.
- 가치: 1년 365일 24시간 장사를 멈추지 않는 아마존, 넷플릭스가 하루에도 수천 번씩 배포를 쏘아댈 수 있는 비결이다. 배포의 두려움을 0%로 만들어 개발자들이 하루에도 10번씩 코드를 고치고 릴리스(Agile)하게 만든다.
- 기술 체계: 도미노처럼 1대씩 끄고 켜는 가장 저렴한 롤링(Rolling), 쌍둥이 서버를 똑같이 띄워두고 0.1초 만에 스위치를 확 꺾어버리는 갑부들의 방식 블루-그린(Blue/Green), 그리고 1%의 고객만 새 서버에 슬쩍 밀어 넣어 독가스를 테스트하는 극한의 안전망 **카나리(Canary)**로 나뉜다.
Ⅰ. 롤링 배포 (Rolling Update): 점진적 도미노 교체
가장 싸고 기본적이지만, 중간에 과거와 미래가 뒤섞이는 혼돈이 발생한다.
- 작동 원리 (순차적 끄고 켜기):
- 10대의 서버가 v1.0으로 돌고 있다.
- 로드밸런서가 1번 서버로 가는 트래픽의 입구를 꽉 닫는다. (손님은 나머지 9대 서버로만 감)
- 1번 서버의 v1.0을 내리고, v2.0(새 코드)을 띄운다. 서버가 완전히 켜지면(Health Check OK), 로드밸런서가 1번 서버의 문을 다시 열어준다.
- 이제 2번 서버의 문을 닫고 v2.0으로 바꾼다. 이 짓을 10번 반복하여 도미노처럼 차례대로 모두 교체한다. 쿠버네티스(Deployment)의 기본 탑재(Default) 배포 방식이다.
- 장점과 딜레마 (호환성의 저주):
- 장점: 10대의 서버 기계(리소스)만 있으면 추가 돈 한 푼 안 들고 무중단이 가능하다 (가성비 끝판왕).
- 단점 1 (버전의 혼재): 배포가 50% 진행된 10분 동안, 어떤 고객은 1번 서버(v2.0) 화면을 보고, 새로고침한 어떤 고객은 10번 서버(v1.0) 화면을 보는 기괴한 시간 여행(불일치)을 겪는다.
- 단점 2 (DB 하위 호환성): v1.0 코드와 v2.0 코드가 완전히 똑같은 하나의 데이터베이스(DB) 스키마를 바라보고 있어야 하므로, DB 컬럼을 함부로 지우거나 이름을 바꾸면 절반의 서버가 에러를 뿜으며 대형 사고가 난다.
📢 섹션 요약 비유: 달리는 기차(서비스)의 바퀴 10개를 교체해야 합니다. 롤링 배포는 기차를 세우지 않고, 한 번에 바퀴 1개씩만 공중으로 살짝 들어 올려 헌 바퀴(v1.0)를 빼고 새 바퀴(v2.0)를 끼우는 묘기입니다. 기차는 남은 9개의 바퀴로 힘겹게 계속 달리므로 멈추진 않지만(무중단), 교체 도중에는 구형 바퀴와 신형 바퀴가 섞여서 달리는 약간의 덜컹거림(버전 혼재)을 감수해야 하는 짠돌이 공법입니다.
Ⅱ. 블루/그린 배포 (Blue/Green Deployment): 광속 스위칭
돈으로 허공에 쌍둥이 별을 지어놓고 0.1초 만에 텔레포트 시킨다.
- 작동 원리 (거울 세계의 창조):
- 현재 손님들이 바글거리는 파란색 서버(Blue, v1.0) 10대를 절대 건드리지 않는다.
- AWS 허공(클라우드)에 완벽히 똑같은 덩치의 녹색 서버(Green, v2.0) 10대를 통째로 새로 띄운다. (이 순간 서버 20대 분량의 월세가 팍팍 나간다.)
- 개발팀만 몰래 녹색 서버의 뒷구멍 주소로 들어가 결제 버튼이 잘 눌리는지 1시간 동안 완벽히 내부 테스트(QA)를 한다.
- 확신이 서면, 앞단의 로드밸런서 스위치(Route 53 DNS 등)를 잡고, 파란색 서버로 가던 1만 명의 손님 트래픽을 '단 0.1초 만에' 녹색 서버 쪽으로 콱! 꺾어버린다.
- 장점과 롤백(Rollback)의 예술:
- 장점: 손님들은 새로고침 하는 0.1초 찰나에 전원이 동시에 v2.0 화면으로 넘어간다(버전 혼재 완전 차단).
- 롤백의 기적: 만약 녹색 서버(v2.0)로 손님이 넘어갔는데 심각한 버그로 서버가 터져나간다. 개발팀은 소스코드를 다시 짤 필요가 없다. 아직 허공에 안 끄고 놔뒀던 파란색 서버(v1.0)로 로드밸런서 스위치를 다시 0.1초 만에 꺾어버리면 끝이다. 1초 만에 어제 상태로 완벽히 시간 여행(초광속 롤백)을 하는 기적의 방어막이다.
📢 섹션 요약 비유: 달리는 기차의 바퀴를 바꾸는 게 위험하다고요? 갑부(블루그린)는 옆 선로에 완벽하게 세팅된 최신형 기차(Green)를 한 대 똑같이 달리게 띄워놓습니다. 그리고 구형 기차(Blue)와 신형 기차 사이에 구름다리를 놓고, 기관사가 "지금!" 하고 소리치면 1만 명의 승객이 1초 만에 신형 기차로 싹 다 건너뛰는(스위치 라우팅) 미친 짓입니다. 신형 기차가 덜컹거리면(버그)? 승객들은 1초 만에 다시 옆에서 같이 달리던 구형 기차로 쏙 건너뛰어 목숨을 구하는 100% 안전 보장 공법입니다. (대신 기차 2대 값이 듭니다.)
Ⅲ. 카나리 배포 (Canary Release): 독가스 감별사
겁쟁이들을 위한 궁극의 방패. 1%만 밀어 넣어 보고 간을 본다.
- 카나리아 새의 전설:
- 옛날 광부들은 탄광 깊은 곳에 유독 가스가 있는지 알기 위해, 사람보다 가스에 10배 예민한 '카나리아' 새를 새장에 넣어 먼저 들여보냈다. 새가 죽으면 광부들은 도망쳐 목숨을 구했다.
- 작동 원리 (극단적인 점진적 유입):
- 10대의 v1.0 서버 틈새에, 딱 1대의 v2.0(새 버전) 서버를 슬쩍 띄워 끼워 넣는다.
- 로드밸런서(Ingress 등)에 무시무시한 라우팅 가중치(Weight) 룰을 건다. "지금 들어오는 1만 명 중 99%는 옛날 서버로 보내고, 무작위로 뽑힌 불쌍한 1%의 손님(카나리아)만 v2.0 서버로 밀어 넣어라!"
- 관망과 점진적 스케일 업:
- 데브옵스 팀은 모니터(Datadog, 엑스레이)를 켜고 이 1%의 고객들이 결제하다가 500 에러를 맞고 죽는지(새가 죽는지) 3시간 동안 팝콘을 먹으며 지켜본다.
- 새가 안 죽고 잘 돌아가면 밸브를 열어 트래픽을 5% $\rightarrow$ 10% $\rightarrow$ 50% $\rightarrow$ 100%로 서서히 늘리며, 옛날 서버 10대는 천천히 폐기해 버린다.
- 전 세계 수십억 명을 상대하는 구글, 페이스북 같은 빅테크 기업들이 어떤 끔찍한 버그에도 전면 장애를 맞지 않는 궁극적이고도 가장 느리면서 안전한 배포 방식이다.
📢 섹션 요약 비유: 새로운 김치찌개 레시피(v2.0)를 개발했습니다. 식당의 100개 테이블 손님에게 이 찌개를 몽땅 뿌려버리는 것(일반 배포)은 미친 짓입니다(다 환불해 달라고 난리 남). 사장님은 구석에 앉은 딱 1팀의 테이블(1% 트래픽)에만 새 레시피의 찌개를 몰래 내어줍니다(카나리 배포). 사장님은 멀리서 그 테이블 손님 표정이 일그러지는지 관찰합니다. 손님이 "오 맛있네!"라고 하면, 그때부터 5개, 10개 테이블로 새 찌개 배급을 늘려가는 절대 망하지 않는 식당 운영 철칙입니다.