피드로 돌아가기
Dev.toBackend
원문 읽기
Redis Pub/Sub 기반 Multi-Worker WebSocket 수평 확장 아키텍처 설계
FastAPI WebSockets: Async Connections, Scaling, The Multi-Worker Nightmare (2026)
AI 요약
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 정체 방지