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를 받을 수 있는 방법에 대해서 알아보겠습니다.