💎

GraphQL Subscription

GraphQL 스키마 기반 실시간 이벤트

GraphQL Subscription은 Query/Mutation과 함께 GraphQL의 세 번째 작업 타입입니다. 내부적으로 WebSocket을 transport로 사용하며, GraphQL 스키마에 정의된 타입 시스템을 통해 어떤 이벤트를 구독할지, 어떤 필드를 받을지를 선언적으로 지정할 수 있습니다.

구조 다이어그램

🌐
클라이언트
subscription {
  messageAdded {
    id
    text
  }
}
① subscription 쿼리
WebSocket
④ 데이터 push
🖥️
GraphQL 서버
② 구독 등록
③ Mutation 발생
✏️
Mutation
데이터 변경 트리거
흐름 설명
  1. 클라이언트가 subscription 쿼리 전송 (WebSocket 연결)
  2. 서버가 해당 이벤트에 대한 구독 등록
  3. 다른 클라이언트/시스템에서 Mutation으로 데이터 변경
  4. 서버가 구독 중인 클라이언트에 GraphQL 형식으로 push

동작 흐름

1

클라이언트가 subscription 쿼리를 서버에 전송 (WebSocket 연결)

2

서버가 해당 이벤트에 대한 구독 등록

3

서버 측에서 데이터 변경(Mutation) 발생

4

서버가 구독 중인 클라이언트에 GraphQL 형식으로 데이터 push

장점

  • 타입 안전한 실시간 통신
  • 필요한 필드만 선택적 구독
  • 기존 GraphQL 스키마와 통합
  • Query/Mutation과 일관된 개발 경험

단점

  • WebSocket 위에 추가 추상화 계층
  • 서버 구현 복잡도 높음
  • N+1 구독 문제 가능
  • 스케일링 시 Pub/Sub 백엔드 필요

사용 사례

실시간 댓글/알림 주문 상태 추적 협업 도구 실시간 동기화 GitHub의 GraphQL API