NestJS · GraphQL Subscription

서브스크립션의 연결·권한·발행 경로

GraphQL 서브스크립션은 실시간 이벤트를 붙이는 기능이 아니라, 연결 인증과 topic 권한, event publish, scale-out adapter까지 설계해야 하는 장기 연결 모델이다.

01

연결 인증

handshake에서 token을 검증하고 subscription context에 사용자 정보를 넣는다.

02

구독 검증

사용자가 특정 room, document, project topic을 구독할 권한이 있는지 확인한다.

03

이벤트 발행

Mutation이나 domain event가 topic으로 payload를 publish한다.

04

전달 확장

서버 인스턴스가 여러 개면 Redis 같은 pub/sub adapter로 이벤트를 공유한다.

Handshake
연결 시작 HTTP 요청과 다른 인증 경로를 가짐
토큰 만료 처리 필요
Filter
구독자 제한 payload를 받을 사용자를 topic과 권한으로 필터링
데이터 노출
PubSub
이벤트 브로커 메모리 pubsub은 단일 인스턴스에 한정
운영에서는 외부 브로커 검토
Backpressure
부하 제어 느린 클라이언트와 과도한 이벤트를 제한
연결 수 metric 필요

권한 · 확장 · 해제 점검

권한 구독 시작과 이벤트 수신 둘 다 권한을 확인한다.
확장 다중 인스턴스에서 같은 이벤트가 누락되지 않는다.
해제 연결 종료 시 구독 상태가 정리된다.
관측 연결 수, 발행 실패, 전송 지연을 모니터링한다.