Subscription

Subscription은 HTTP 요청이 아니라 열린 이벤트 채널이다

클라이언트는 WebSocket을 열어 관심 이벤트를 구독하고, 서버는 PubSub에 발행된 이벤트를 해당 구독자에게 밀어준다.

1Connect

클라이언트가 WebSocket 연결을 열고 인증 정보를 보낸다.

2Subscribe

관심 필드와 변수로 이벤트 스트림을 등록한다.

3Publish

mutation 또는 service가 domain event를 PubSub에 발행한다.

4Filter

구독 변수, 권한, tenant 조건으로 받을 대상을 가른다.

5Push

열린 채널로 payload를 전송하고 UI가 갱신된다.

Resolver와 Service의 역할

위치맡길 책임
Subscription

이벤트 이름, 필터, 반환 타입을 GraphQL 계약으로 노출한다.

Service

데이터 변경 후 어떤 이벤트를 발행할지 결정한다.

PubSub/Broker

단일 서버는 PubSub, 분산 환경은 Redis/Kafka 같은 브로커로 전달한다.

운영에서 반드시 보는 기준

권한

연결 시점과 이벤트 수신 시점의 권한을 모두 확인한다.

스케일

메모리 PubSub은 인스턴스가 늘면 이벤트가 흩어진다.

정리

연결 종료 시 구독과 리소스를 정리해 누수를 막는다.