
제한된 인프라와 시간 속에서 WebSocket 없이 SSE와 Redis Pub/Sub으로 돌파한 감동의 라이브 아키텍처 도전기
우아한형제들 크리에이티브AI파트너팀 소속 포토그래퍼가 단 3주의 데드라인 속에서 3,000명 대규모 실시간 행사용 게임을 개발한 비하인드 스토리입니다. WebSocket 부재라는 거대한 제약을 단방향 SSE 통신과 Redis Pub/Sub을 활용한 분산 상태 동기화로 우아하게 풀어낸 아키텍처 설계 과정을 다룹니다. 특히 리허설 당일 발견된 노후 송출 기기의 그래픽 처리 병목 상황에서, 라이브 서비스의 생존을 위해 과감한 타협안을 수립해 낸 시니어 관점의 현장 대응 방식이 깊은 인사이트를 줍니다.
AI를 코딩 보조 이상으로 격상시켜 설계 파트너로 활용해 보려는 시니어 및 주니어 개발자, 그리고 제한된 기한과 리소스로 최대의 실시간 안정성을 뽑아내야 하는 서비스 기획자들에게 일독을 추천합니다.
사내 창립 기념 전사 행사에서 수천 명의 구성원이 동시에 접속하여 실시간으로 즐길 수 있는 라이브 게임을 3주라는 짧은 기간 안에 안정적으로 구축해야 하는 과제가 주어졌습니다. 또한, 당시 사내 배포 플랫폼의 제약으로 실시간 양방향 통신에 흔히 사용되는 WebSocket을 채택할 수 없는 환경이었습니다.
실시간 통신을 위해 WebSocket 대신 단방향 데이터 전송인 SSE(Server-Sent Events)와 REST POST 요청을 결합하여 통신 모델을 최소화하였으며, 다중 Pod 간의 게임 상태 동기화를 위해 Redis Pub/Sub 구조를 가동했습니다. 또한 AI에게 예상 실패 시나리오를 질문하여 무작위 요청 지연을 반영하고, 실제 유저의 비정상적 행동 패턴을 모방한 가상 봇들을 Kubernetes Job으로 실행해 가며 서버의 내구성을 부하 테스트로 입증했습니다.
행사 당일 백엔드 서버 다운 없이 1,700명 이상의 동시 접속자를 안정적으로 감당하며 전반적인 통신 연동을 완수했습니다. 다만, 행사장의 노후된 송출용 Windows 노트북의 성능 부족으로 인해 WebGL/Canvas 2D로 구성된 실시간 전광판 렌더링 화면 전환에서 최대 1분 이상의 지연이 발생하는 성능적 난조를 겪었습니다.
Trade-off
송출 기기의 예상치 못한 사양 한계에 직면하여 현장에서 실시간 집계 연출을 포기하고 하드코딩된 값으로 전광판을 순차적으로 채우는 기술적 타협을 선택했습니다. 또한 단방향 전송 아키텍처 특성상 후반부에 접속이 단절된 사용자들을 완벽하게 추적하고 실시간 유입률 변화에 대처하는 제어 능력은 완벽하게 실현하지 못했습니다.
서버가 지속적으로 수립된 단방향 HTTP 연결을 통해 클라이언트에게 데이터를 실시간으로 전달할 수 있는 웹 푸시 기술입니다. 폴링에 비해 서버 부하가 낮고 아키텍처가 단순합니다.
Redis의 발행/구독(Publish/Subscribe) 기능으로, 하나의 Pod가 메시지를 특정 채널로 퍼블리시하면 해당 채널을 구독하는 모든 Pod에 메시지를 전파하는 구조입니다.
기능 코딩을 수행하는 세션과 개념 판단 및 설계 검토를 수행하는 세션을 서로 다른 계정이나 모델로 완전 격리하여 피드백 바이어스를 차단하는 AI 연동 방법론입니다.




