NestJS · Realtime

WebSocket 게이트웨이의 연결 수명

NestJS WebSocket은 HTTP controller의 실시간 버전이 아니라, 연결 생성, 인증, room 구독, 메시지 fan-out, 연결 해제를 계속 관리하는 장기 세션 구조다.

01

핸드셰이크

클라이언트 연결 시 토큰이나 쿠키로 사용자 신원을 확인한다.

02

구독 등록

사용자가 들어갈 room을 권한 검증 후 join 처리한다.

03

메시지 처리

들어온 이벤트 payload를 검증하고 서버 상태 변경 또는 broadcast를 수행한다.

04

연결 종료

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

Gateway
실시간 endpoint @WebSocketGateway와 SubscribeMessage로 이벤트 처리
HTTP guard와 동작 방식 다름
Handshake auth
연결 신원 연결 초기에 사용자와 권한 범위를 결정
토큰 만료 처리 필요
Room
대상 그룹 문서 id, 채팅방 id, 프로젝트 id로 fan-out 범위 제한
권한 없는 join 차단
Adapter
수평 확장 Redis adapter 등으로 인스턴스 간 메시지 전달
sticky session 여부 확인

payload · 권한 · 재연결 점검

payload 메시지 body도 DTO처럼 검증한다.
권한 room join과 메시지 발행 모두 리소스 권한을 확인한다.
재연결 네트워크 끊김 후 클라이언트가 상태를 복구할 수 있다.
확장 인스턴스가 여러 개일 때 같은 room broadcast가 동작한다.