Computer Science/GraphQL

GraphQL subscription

nayoon030303 2022. 1. 31. 11:32

Subscription 이란?

subscription 은 주로 실시간 애플리케이션을 구현하기 위해서 사용됩니다. 

기본적으로 Query처럼 데이터를 조회하기 위해서 사용됩니다. 

 

Query, Mutation : Server/Client 모델

Subscription: Pub/Sub 모델

 

Server/Client 모델에서 최신 데이터를 가져오기 위해서는 어떻게 해야 할까요?

계속해서 호출을 해야 할 것입니다. 

그러면 서버와 클라이언트 모두 낭비와 부담이 될 것입니다. 

 

Pub/Sub 모델을 따르는 Graphql Subscription 은 서버에서 발생하는 데이터의 변화를 클라이언트에서 좀 더 효과적으로 인지 할 수 있도록 해 줍니다.

 

 

Graphql에서의 Subscription 구조

 

 

Subscription 타입 정의

쿼리는 Query, 뮤테이션은 Mutation, 섭스크립션은 Subscription을 통해서 스키라를 정의합니다. 

const typeDefs = gql'
	type Subscription {
    messageChanged: String
  }
';

Subscription 리졸버 구현

Subscription은 subscribe 속성을 갖는 객체를 필요로 합니다. 

pubsub객체의 asyncIterator() 메서드에 messageChanged라는 이벤트 명을 넘겨주면,

이 subscription은 messageChanged라는 이벤트가 발생할 때마다 반응합니다.

const resolvers = {
	Subscription: {
    messageAdded: {
      subscribe: () => pubsub.asyncIterator("messageAdded"),
   },
}

이벤트 발생

일반적으로 이벤트는 서버에서 데이터 변경이 일어날 때 발생하므로 Mutation이 호출될 때 발생시키는 것이 일반적입니다.

const resolvers = {
	Subscription: {
    messageAdded: {
      subscribe: () => pubsub.asyncIterator("messageAdded"),
   },
   Mutation:{
   	const newMessage = await this.appService.setMessage(msg);
    this.pubSub.publish('messageChanged', { messageChanged: newMessage });
    return newMessage;
   }
}

 

다음번에는 NestJs에서 Subscription을 사용하는 방법과 

특정 조건을 갖는 구독자만 data를 받을 수 있는 방법에 대해서 알아보겠습니다.