NestJS · WebSocket

WebSocket 애플리케이션의 연결 수명 관리

WebSocket 기능은 메시지를 보내는 코드보다, 연결 인증·room 권한·재연결·scale-out broadcast를 관리하는 장기 세션 운영이 중요하다.

01

연결

handshake에서 사용자를 식별하고 연결 컨텍스트를 구성한다.

02

구독

room join 전에 리소스 권한과 참여 조건을 확인한다.

03

메시지

payload를 DTO처럼 검증하고 도메인 이벤트나 broadcast로 연결한다.

04

해제

disconnect에서 presence, lock, room membership을 정리한다.

Gateway
실시간 입구 @WebSocketGateway와 SubscribeMessage로 이벤트 처리
HTTP controller와 수명 다름
Handshake
연결 인증 처음 연결 때 token이나 cookie를 검증
중간 만료 정책 필요
Room
전송 범위 같은 문서나 채팅방 참여자에게만 event 전달
권한 없는 join 차단
Redis adapter
수평 확장 여러 인스턴스 사이 room event를 공유
브로커 장애 대응

권한 · 재연결 · 확장 점검

권한 join과 publish 모두 리소스 권한을 확인한다.
재연결 끊긴 클라이언트가 상태를 복구할 방법이 있다.
확장 인스턴스가 여러 개여도 broadcast가 누락되지 않는다.
관측 연결 수, 메시지 실패, 지연을 metric으로 본다.