무중단 배포의 본질: Blue-Green 스위칭 아키텍처와 섀도우(Shadow) 트래픽 격리 구조
장애 대응을 하다가 밤을 꼬박 새운 어제, 원인은 의외로 사소한 아키텍처 설계 미스였습니다. 저와 같은 실수를 반복하지 않으시길 바라며 이 글을 씁니다.
과거 웹 서버 호스팅 시절에는 코드를 배포하기 위해 야심한 새벽에 점검 페이지를 띄워두고 FTP로 변경된 바이너리 파일을 직접 덮어쓰는 무식한 다운타임 시간이 필수적이었습니다. 하지만 모든 인터넷 서비스가 글로벌 실시간 24시간 연중무휴를 지향하게 된 오늘날에는 1초의 서비스 단절도 용납되지 않으며, 엔지니어들은 이 모순을 타파하기 위해 거대한 로드밸런싱 인프라 위에서 무중단 배포(Zero Downtime Deployment) 파이프라인의 극의를 이룩했습니다. 가장 파괴적이고 확실한 기술적 롤백 우위를 자랑하는 방식은 블루-그린(Blue-Green) 배포 트랜지션 구조입니다. 현재 프로덕션 환경의 실서버 군을 블루(Blue) 그룹으로 명명한다면, 완벽히 동일한 물리적, 논리적 공간 군집을 옆에 하나 더 쌍둥이처럼 복제 생성하여 이를 그린(Green) 그룹이라 지정합니다. 개발팀은 신규 버전의 어플리케이션 코드를 실제 유저 트래픽이 닫혀 있는 그린 그룹에만 밀어 넣습니다.
그린 그룹 내부에 배치된 모든 마이크로서비스 컨테이너들이 정상적으로 부팅 스크립트(Health Check)를 완료하고 구동 대기 상태에 도달하면, 최상단의 네트워크 로드 밸런서 혹은 DNS 가중치 테이블의 연결 포인터를 기습적으로 블루 네트워크 망에서 그린 네트워크 망 스위치로 순식간에 플리핑(Flipping) 해버립니다. 이 절차를 통해 사용자들은 어느 순간 아무 트랜잭션의 끊김 없이 화면이 업데이트되는 현상을 경험하게 됩니다. 만약 신규 그린 버전에서 치명적인 메모리 누수 오류나 데이터 붕괴 버그가 발동된다면, 엔지니어들은 단순히 로드 밸런서 다이얼을 다시 살려 둔 낡은 블루 그룹으로 돌려 놓음으로써 단 2초 만에 완벽한 무결성 롤백을 이룩할 수 있습니다. 이것은 오직 돈과 인프라의 여유(서버 2배 임대 비용)가 허락하는 자본주의의 정점에 선 배포 무결성 모델입니다.
여기서 한 발짝 더 나아가 최상위 빅테크 기업 인프라스트럭처들은 사용자 트래픽의 실제 부하를 완벽하게 시뮬레이션해 버그를 추적하는 섀도우 라우팅(Shadow Routing 또는 Traffic Mirroring) 전략을 채택하기도 합니다. 서비스 매시 기술인 Istio 등의 Envoy 프록시 사이드카 패턴을 통하여, 클라이언트의 오리지널 HTTP 호출이 현재의 메인 서버 환경으로 흘러갈 때 이 패킷들을 네트워크 단에서 기계적으로 복제(Clone)하여 비공개 격리 환경의 베타 테스트 백엔드 서버로 밀어 넣습니다. 섀도우 서버는 실제 유저 트래픽을 있는 힘껏 정통으로 맞아보며 코드를 실행하지만, 데이터베이스 쓰기를 막고 응답 결과물을 즉각 폐기함으로써 사용자 경험에는 전혀 개입하지 않은 채 백엔드의 성능 과부하 여부를 소리소문없이 테스트해 냅니다. 이 경탄스러운 구조 덕분에 라이브 서버는 절대 셧다운 되지 않습니다.