WebSocket Lifecycle

WebSocket 연결 수명과 배포 제약

WebSocket은 연결 유지가 핵심이라 인증, 재연결, heartbeat, 서버리스 제약, 스케일 아웃 경로를 HTTP 요청과 다르게 설계해야 합니다.

01

Upgrade 요청

HTTP 요청에서 WebSocket으로 전환하며 origin과 인증 토큰을 확인합니다.

handshake
02

세션 등록

사용자 ID, room, 권한, 연결 ID를 서버 메모리나 별도 저장소에 매핑합니다.

session
03

메시지 처리

클라이언트 메시지를 검증하고 broadcast, direct, ack 정책에 따라 전달합니다.

message
04

Heartbeat

ping/pong 또는 주기 메시지로 끊어진 연결을 빠르게 감지합니다.

liveness
05

재연결

네트워크 끊김 뒤 exponential backoff와 상태 복구 절차를 둡니다.

reconnect
Single server
가장 단순한 연결 관리 작은 규모에서는 쉽지만 장애와 배포 때 모든 연결이 끊길 수 있습니다.
초기 단계
Scaled server
여러 인스턴스 운영 sticky session 또는 Redis pub/sub 같은 메시지 브로커가 필요합니다.
room 동기화
Serverless
긴 연결과 제약 충돌 일반 serverless 함수는 지속 연결에 맞지 않아 별도 실시간 인프라가 필요할 수 있습니다.
플랫폼 제한 확인

실시간 기능 점검

인증 갱신 긴 연결 중 토큰 만료와 권한 변경을 어떻게 반영할지 정합니다.
메시지 검증 클라이언트가 보내는 모든 payload는 서버에서 스키마와 권한을 확인합니다.
복구 UX 재연결 중 메시지 손실, 중복 전송, 화면 상태 불일치를 사용자에게 숨기지 않습니다.