피드로 돌아가기
FastAPI WebSockets: Async Connections, Scaling, The Multi-Worker Nightmare (2026)
Dev.toDev.to
Backend

Redis Pub/Sub 기반 Multi-Worker WebSocket 수평 확장 아키텍처 설계

FastAPI WebSockets: Async Connections, Scaling, The Multi-Worker Nightmare (2026)

Kaushikcoderpy2026년 5월 10일8intermediate

Context

FastAPI의 WebSocket은 단일 워커 환경에서 단순하게 동작하나, Multi-Worker 배포 시 프로세스 간 상태 공유 불가로 인한 메시지 전송 누락 발생. HTTP의 Stateless 특성과 달리 WebSocket의 Stateful TCP 연결 관리 부재로 인한 Resource Leak 및 Event Loop 블로킹 위험 존재.

Technical Solution

  • Redis Pub/Sub를 활용한 분산 메시지 버스 구축으로 워커 간 상태 동기화 문제 해결
  • 각 워커가 글로벌 채널을 구독하여 Redis 수신 메시지를 로컬 연결 클라이언트에게 브로드캐스트하는 구조 설계
  • Browser-based WebSocket의 Custom Header 제한을 극복하기 위해 HttpOnly Cookie 또는 First-Message Authentication 패턴 채택
  • try/except/finally 블록을 통한 강제 종료 및 네트워크 단절 시의 WebSocketDisconnect 예외 처리로 Phantom Connection 방지
  • asyncio.create_task를 이용한 Redis 리스너의 백그라운드 실행으로 메시지 수신과 API 요청 처리의 비동기적 병렬화 구현

1. WebSocket 연결 시 반드시 try/except/finally 구조를 적용하여 Resource Leak 방지 여부 확인

2. 브라우저 환경의 인증 제한을 고려해 Query Parameter 대신 HttpOnly Cookie나 First-Message Auth 도입 검토

3. Multi-Worker 배포 시 Redis Pub/Sub와 같은 메시지 브로커를 통한 메시지 전파 구조 설계

4. WebSocket 핸들러 내에서 Blocking Operation을 제거하여 Event Loop 정체 방지

원문 읽기