동작 방식
[서버/구성] 엣지/프록시 계층 AWS Documentation / Nginx NGINX·로드밸런서가 HTTP/1.
[서버/구성]
- 엣지/프록시 계층
AWS Documentation/Nginx- NGINX·로드밸런서가 HTTP/1.1 Upgrade를 처리
- Connection: upgrade, Upgrade: websocket 헤더를 전달
- HTTPS라면 TLS 종료 지점(ALB/NGINX 모두 지원)
- WebSocket 애플리케이션 서버
Ably Realtime
- 노드·파이썬·고 등으로 구현
- 수평 확장을 위해 상태 공유가 필요(예: 세션/구독 정보)
- 일반적으로 Redis Pub/Sub이나 메시지 브로커로 채널을 팬아웃
- 세션/스티키
LearnKube
- 연결이 장수(LB 레벨에서 재분배 어려움) 하므로, 초기 연결 분산 후에는 스티키 세션 또는 외부 상태 저장소가 필수
- K8s/일반 LB는 장기 연결 편중이 발생할 수 있음
- 백엔드 확장
Platformatic Blog
- K8s에서 노드/파드 증감 시 커넥션 재분배가 즉시 일어나지 않으므로 수용 가능한 커넥션 카운트/Pod 오토스케일 기준을 별도 설계
- 실전 가이드가 다수 공유됨
[배포 패턴(선택)]
- 리버스 프록시(NGINX) 앞단
Nginx/NGINX Documentation- 프록시가 업그레이드 헤더를 그대로 전달해야 함(일반 설정 가이드/공식 문서 참고)
- TLS("wss://")는 프록시에서 종료해도 OK
- 클라우드 로드밸런서(ALB 등)
AWS Documentation/+1
- AWS Application Load Balancer는 WebSocket 네이티브 지원
- 다만 HTTP→WebSocket으로 업그레이드된 이후에는 일부 리스너 라우팅/보안 정책이 달라질 수 있음 (문서 주의)
- Kubernetes(Ingress/Service)
LearnKube/Kubernetes
- 장기 커넥션 특성상 불균형 분산 가능·스케일링 전략 필요(스티키/커넥션 한도/수평 확장 기준)
- 최근 kubectl 스트리밍이 WebSocket 기본으로 전환되는 등 K8s 생태계에서 WS 활용이 보편화
- 서버리스/엣지(Cloudflare Workers 등)
Cloudflare Docs/+1
- Cloudflare는 Workers에서 WebSocket 서버/프록시를 지원
- 네트워크 레벨의 WebSocket 프록시도 설정 없이 지원
- 엣지에서 실시간 핸들링이 가능