Realtime Deployment

실시간 연결 운영 조건

WebSocket은 한 번 연결된 뒤 오래 유지되므로 일반 HTTP 배포보다 라우팅, 인증, 확장, 장애 관측 조건을 더 명확히 잡아야 한다.

Load Balancer

Sticky session

같은 socket id가 연결된 인스턴스로 다시 도착해야 join room, disconnect, ack 상태가 흔들리지 않는다.

Scale-out

Redis adapter

인스턴스가 여러 개일 때 room 이벤트와 broadcast를 Pub/Sub으로 공유해 메시지 누락을 줄인다.

Handshake

JWT 검증

초기 연결 시 토큰을 검증하고 사용자 ID, 권한, 프로젝트 접근권을 socket context에 붙인다.

Transport

TLS / WSS

HTTPS 페이지에서는 wss:// 연결을 사용해야 브라우저 mixed content 차단과 토큰 노출 위험을 피한다.

요청 경로

Socket room 상태 수렴

Client wss://api.example.com/socket.io
LB sticky cookie 또는 IP hash
Gateway A/B handleConnection, room join
Redis Pub/Sub broadcast fan-out
Observer logs, metrics, reconnect rate

증상

재연결 반복

LB timeout, idle timeout, pingInterval 설정을 먼저 확인한다.

증상

room 메시지 누락

Redis adapter 연결과 namespace별 room join 로그를 같이 본다.

증상

401 handshake

토큰 전달 위치, 만료 시간, CORS origin, cookie sameSite를 점검한다.

증상

mixed content

프론트가 HTTPS라면 socket endpoint도 wss://로 노출해야 한다.