WEBBOOK CHAPTER

NestJS 11, 시작부터 런칭까지: 34장. WebSocket은 빠른 알림이고 원장이 아니다

34장. WebSocket은 빠른 알림이고 원장이 아니다

연결 handshake의 token을 issuer·audience까지 검증하고 tenant·dispatch room 구독 권한을 매번 확인한다. socket id나 room 이름을 authorization으로 쓰지 않는다. 고객은 자기 요청, 기사는 현재 배정, 운영자는 승인된 site만 본다. 위치 이벤트는 precision·보존·동의 정책을 적용한다.

client는 마지막 event cursor를 저장하고 reconnect 뒤 REST 또는 replay endpoint로 누락을 채운다. WebSocket event가 유실되어도 DB StatusEvent가 원장이다. 느린 client에는 buffer limit과 disconnect 정책을 두며 무제한 메모리를 쓰지 않는다. heartbeat interval과 ALB idle timeout을 맞춘다.

여러 pod에서는 Redis adapter 같은 공유 transport가 필요하지만 adapter가 내려가면 어떤 기능이 degrade되는지 정한다. 실습은 pod 재시작, Redis 단절, duplicate event, 순서 뒤바뀜, client 30초 offline을 재현한다. 최종 화면이 DB 상태와 같고 다른 tenant event가 한 건도 없어야 한다.