LogoEurekaCodes
Web developmentWebsocket웹소켓

동작 방식

[서버/구성] 엣지/프록시 계층 AWS Documentation / Nginx NGINX·로드밸런서가 HTTP/1.

[서버/구성]

  • 엣지/프록시 계층 AWS Documentation / Nginx
    • NGINX·로드밸런서가 HTTP/1.1 Upgrade를 처리
    • Connection: upgrade, Upgrade: websocket 헤더를 전달
    • HTTPS라면 TLS 종료 지점(ALB/NGINX 모두 지원)
  1. WebSocket 애플리케이션 서버 Ably Realtime
  • 노드·파이썬·고 등으로 구현
  • 수평 확장을 위해 상태 공유가 필요(예: 세션/구독 정보)
  • 일반적으로 Redis Pub/Sub이나 메시지 브로커로 채널을 팬아웃
  1. 세션/스티키 LearnKube
  • 연결이 장수(LB 레벨에서 재분배 어려움) 하므로, 초기 연결 분산 후에는 스티키 세션 또는 외부 상태 저장소가 필수
  • K8s/일반 LB는 장기 연결 편중이 발생할 수 있음
  1. 백엔드 확장 Platformatic Blog
  • K8s에서 노드/파드 증감 시 커넥션 재분배가 즉시 일어나지 않으므로 수용 가능한 커넥션 카운트/Pod 오토스케일 기준을 별도 설계
  • 실전 가이드가 다수 공유됨

[배포 패턴(선택)]

  • 리버스 프록시(NGINX) 앞단 Nginx / NGINX Documentation
    • 프록시가 업그레이드 헤더를 그대로 전달해야 함(일반 설정 가이드/공식 문서 참고)
    • TLS("wss://")는 프록시에서 종료해도 OK
  1. 클라우드 로드밸런서(ALB 등) AWS Documentation / +1
  • AWS Application Load Balancer는 WebSocket 네이티브 지원
  • 다만 HTTP→WebSocket으로 업그레이드된 이후에는 일부 리스너 라우팅/보안 정책이 달라질 수 있음 (문서 주의)
  1. Kubernetes(Ingress/Service) LearnKube / Kubernetes
  • 장기 커넥션 특성상 불균형 분산 가능·스케일링 전략 필요(스티키/커넥션 한도/수평 확장 기준)
  • 최근 kubectl 스트리밍이 WebSocket 기본으로 전환되는 등 K8s 생태계에서 WS 활용이 보편화
  1. 서버리스/엣지(Cloudflare Workers 등) Cloudflare Docs / +1
  • Cloudflare는 Workers에서 WebSocket 서버/프록시를 지원
  • 네트워크 레벨의 WebSocket 프록시도 설정 없이 지원
  • 엣지에서 실시간 핸들링이 가능