84. 블루/그린 배포 (Blue/Green Deployment) - 광속 스위칭과 무중단 아키텍처
⚠️ 이 문서는 서버 업데이트 도중 신버전(v2.0)과 구버전(v1.0) 화면이 짬뽕으로 섞여 고객을 멘붕에 빠뜨리는 '롤링 배포'의 지저분한 한계를 완벽하게 박살 내기 위해, **돈을 아끼지 않고 클라우드 허공에 100% 똑같은 거울 세계 쌍둥이 서버(Green)를 통째로 띄워놓은 뒤, 문지기(로드밸런서)의 방향을 단 0.1초 만에 확 꺾어버려 수만 명의 고객을 한 방에 미래(v2.0)로 텔레포트시키는 갑부들의 궁극적 무중단 배포 전술인 '블루/그린 배포'**를 다룹니다.
핵심 인사이트 (3줄 요약)
- 본질: 두 개의 완벽히 격리된 환경(Blue, Green)을 활용한다. 현재 장사 중인 서버(Blue)는 건드리지 않고, 텅 빈 옆 건물(Green)에 새 코드를 다 깔고 요리 준비를 마친 뒤, 손님들이 들어오는 정문 간판(라우팅)만 옆 건물로 1초 만에 스위칭(전환)해버리는 공간 마법이다.
- 가치: 배포 중간에 버전이 뒤섞이는 일(Inconsistency)이 절대 없다(0%). 또한 치명적 버그가 터졌을 때 서버를 다시 끄고 켤 필요 없이 간판만 다시 구형 건물(Blue)로 1초 만에 꺾으면 되므로 **'초광속 무피해 롤백(Rollback)'**을 보장하는 우주 최강의 방패막이다.
- 기술 체계 (치명적 한계): 배포하는 그 10분 남짓한 시간 동안 서버 자원(클라우드 인스턴스 비용)이 **정확히 2배로 폭발적 소모(100대 $\rightarrow$ 200대)**되므로 자금력이 뒷받침되어야 하며, 두 건물이 동시에 하나의 데이터베이스(DB)를 바라볼 때 발생하는 DB 스키마 하위 호환성 및 트랜잭션 유실 문제를 극복하는 것이 가장 뼈아픈 숙제다.
Ⅰ. 롤링 배포의 딜레마와 블루/그린의 도래
찔끔찔끔 바꾸지 마라. 새로운 세상(Green)을 완벽히 창조한 뒤 문을 열어라.
- 버전 혼재의 악몽 (롤링의 한계):
- 롤링 배포(Rolling)는 바퀴를 하나씩 갈아 끼운다. 100대 중 50대가 교체된 시점, 고객이 장바구니에 물건을 담을 땐 v2.0 서버를 타고, 결제 버튼을 누르는 순간 재수 없게 뒷단의 v1.0 서버로 라우팅 되면?
- 코드가 안 맞아서 장바구니 데이터가 허공에 증발하고 고객은 쌍욕을 박으며 500 에러 창을 본다. 프론트엔드/백엔드 덩어리 앱(Monolithic)일수록 이 혼재 현상은 치명적 독이 된다.
- 블루(Blue)와 그린(Green)의 2개 우주 창조:
- Blue 환경: 현재 1만 명의 고객이 접속해서 결제 중인 v1.0 서버 100대 묶음이다. (절대 건드리지 않고 신성불가침 영역으로 둔다.)
- Green 환경: 클라우드 허공에 AWS EC2(또는 K8s 파드) 100대를 새로 결제해서 펑 띄운다. 여기에 v2.0 새 코드를 쫙 배포한다. 고객 트래픽은 0(Zero)이다.
- 격리된 QA (사전 내부 테스트):
- Green 서버가 100% 떴다. 하지만 손님은 아직 한 명도 없다.
- 이때 사내 개발팀과 QA 테스트 로봇들만 'Green 전용 비밀 뒷문(Test URL)'으로 슬쩍 들어간다. 결제도 해보고 장바구니도 담아본다. 고객은 전혀 모른 채 운영망과 완벽히 동일한 인프라에서 최후의 실전 테스트를 1시간 동안 안전하게 수행한다.
📢 섹션 요약 비유: 맥도날드(Blue)가 장사 중입니다. 롤링 배포는 손님들이 햄버거를 먹고 있는데 주방 아줌마 한 명씩 불러내어 유니폼을 갈아입히는 산만한 짓입니다. 블루/그린 배포는 돈을 쳐발라서 아예 옆 공터에 맥도날드 2호점(Green) 건물을 똑같이 지어버립니다. 2호점 주방에 빨간 유니폼 입은 알바들을 세팅하고, 사장님이 들어가서 햄버거(QA 테스트)를 먹어봅니다. 완벽하다 싶으면, 바깥 도로의 네비게이션 표지판(로드밸런서) 방향을 1초 만에 2호점 쪽으로 휙 꺾어버려서, 뒤따라오던 차들이 아무 혼란 없이 스무스하게 2호점으로 빨려 들어가 햄버거를 사게 만드는 위대한 공간 분리 건축술입니다.
Ⅱ. 트래픽 스위칭과 빛의 롤백 (Rollback) 마법
배포가 망했을 때 소스코드를 컴파일하느라 땀 빼는 자는 3류다.
- 대망의 스위칭 (Traffic Routing):
- 사내 QA팀의 "OK!" 사인이 떨어졌다.
- 데브옵스 엔지니어는 앞단에 있는 로드밸런서(AWS ALB, Route 53 DNS, 또는 K8s Service)의 설정 창을 연다.
- 타겟 그룹(Target Group)의 포인터를
Blue(10.0.0.1)에서Green(10.0.0.2)으로 변경하고 [Apply] 버튼을 꽝 누른다. - 단 0.1초 만에 밀려들던 트래픽의 물줄기가 꺾이며, 모든 고객은 새로고침 한 번에 화면이 v2.0으로 싹 바뀐다. 구형 화면과 신형 화면이 뒤섞이는 기분 나쁜 골짜기(버전 혼재)는 단 1초도 존재하지 않는다.
- 초광속 생존술 (무피해 롤백):
- 트래픽을 Green으로 넘긴 지 5분 뒤, 사내 테스트 때 못 잡았던 "결제 시 100원이 덜 깎이는 치명적 버그"가 현장에서 터져 난리가 났다.
- 롤링 배포였다면? 소스코드를 v1.0으로
git revert치고 도커 이미지를 구워서 다시 1대씩 서버를 내리고 올리느라 30분 동안 회사는 수십억의 손해를 본다. - 블루/그린은 다르다. 아까 버려진 파란색(Blue) 서버 100대 묶음의 전원을 아직 안 끄고 살려뒀다(Wait).
- 엔지니어가 1초 만에 로드밸런서의 포인터를 다시
Green $\rightarrow$ Blue로 휙 꺾어버린다. 끝이다. 고객은 1초 전 버그를 봤다가 F5를 누르니 멀쩡했던 어제 화면(v1.0)으로 완벽하게 되돌아오는 시간 여행(광속 롤백)을 경험하며 회사 생명이 유지된다.
📢 섹션 요약 비유: 기차 선로 전환기입니다. 기차(트래픽)가 구형 선로(Blue)로 달리고 있습니다. 신형 선로(Green)를 다 깔아놨습니다. 기관사가 레버를 탁! 당기는 1초의 찰나에 기차는 매끄럽게 신형 선로로 방향을 틀어 질주합니다. 그런데 신형 선로 앞에 바위(치명적 버그)가 굴러떨어진 걸 발견했습니다! 기관사는 식은땀을 흘리며 소스코드(선로)를 곡괭이로 파내서 고칠 시간이 없습니다. 1초 만에 레버를 팍! 반대로 당겨 다시 방금 전 구형 선로(Blue)로 기차를 되돌려 넣어 10만 명 승객의 목숨(매출)을 지체 없이 살려내는 궁극의 보험(롤백) 스위치입니다.
Ⅲ. 치명적 맹점 2가지 (돈과 DB 트랜잭션의 늪)
빛이 강할수록 그림자도 짙다. 갑부의 전술엔 막대한 세금이 따른다.
- 클라우드 요금 폭탄 (2x Resource Cost):
- 블루/그린의 가장 크고 명확한 단점이다. 스위칭을 앞둔 배포 기간(약 1시간~하루) 동안, 클러스터 허공에는 Blue 100대 + Green 100대 = 총 200대의 서버가 징징거리며 돌아간다.
- 만약 10,000대의 서버를 돌리는 넷플릭스라면, 이 한 번의 꿀 같은 배포를 위해 허공에 10,000대의 서버 월세를 순식간에 2배로 태워야 하는 무지막지한 클라우드 요금 폭탄(비용 2배)을 맞게 된다. (돈 없는 스타트업이 침만 흘리다 롤링 배포를 돌리는 이유다.)
- 최악의 적: 데이터베이스 (Stateful) 동기화의 딜레마:
- 웹 서버(Stateless) 100대는 휙 꺾으면 그만이지만, 뒷단에 무거운 데이터베이스(DB)는 Blue와 Green 두 군데로 복사해 둘 수 없다. (두 집 살림하면 회원가입 데이터가 반으로 갈라져 망함.)
- 결국 Blue(v1.0) 웹 서버와 Green(v2.0) 웹 서버가 똑같은 하나의 중앙 DB의 빨대를 동시에 꽂고 바라봐야 한다.
- 대참사 시나리오: 트래픽을 Blue에서 Green으로 꺾는 0.1초의 찰나에, 어떤 고객 A가 Blue 쪽에 '장바구니 담기(INSERT)'를 누르고 로딩이 도는 상태였다. 그런데 트래픽 밸브가 Green으로 팍 잠겨버려서, A의 장바구니 DB 트랜잭션이 허공에 붕 뜨고 짤려버려 돈만 빠져나가고 물건은 없는 결제 사고가 터진다.
- 해결책 (Connection Draining): 스위치를 팍 꺾을 때, Blue 쪽 밸브를 아주 서서히 잠근다. "새 손님은 Green으로 가고, 이미 Blue에 들어와 결제 중이던 손님은 결제(세션) 끝날 때까지 3분 정도 기다려 주마!"라는 우아한 종료(Graceful Shutdown) 세팅을 거쳐야만 무결점의 블루/그린이 완성된다.
📢 섹션 요약 비유: 맥도날드 2호점(Green) 꼼수는 완벽해 보이지만 2가지 출혈이 있습니다. 첫째, 1호점과 2호점을 며칠 동안 동시에 임대하느라 월세(클라우드 비용)가 두 배로 깨집니다. 둘째, 손님 방향을 2호점으로 확 꺾으라며 1호점 문을 쾅 잠가버리면, 1호점에서 햄버거 한 입 베어 물고(DB 트랜잭션 도중) 서 있던 불쌍한 손님이 문에 갇혀 질식사(데이터 유실)합니다. 진정한 매니저는 1호점 정문 셔터는 내리되(신규 유입 차단), 이미 들어와 씹고 있는 손님들이 햄버거를 다 삼키고 뒷문으로 빠져나갈 3분의 시간(Graceful Shutdown)을 자비롭게 허락한 뒤에야 1호점 불을 끄는 세심한 지능범이어야 합니다.