Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Query
- linux
- html
- kakao
- javascript
- JavaStritp
- vanila js
- 자바스크립트의 역사
- 모던 자바스크립트
- typescript
- 프로그래머스
- ROT13
- graphql
- js
- 코딩태스트
- tr명령어
- Bandit
- 실패율
- typeorm
- nestjs
- 카카오
- RestAPI
- await
- node
- 코딩테스트
- REST API
- 백준
- mutation
- 피보나치 수
- 자바스크립트
Archives
- Today
- Total
꿀 떨어지는 코딩 양봉장
GraphQL subscription 본문
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를 받을 수 있는 방법에 대해서 알아보겠습니다.
'Computer Science > GraphQL' 카테고리의 다른 글
Graphql + DataLoader를 이용한 N+1문제 해결 (0) | 2021.10.24 |
---|---|
GraphQL 핵심 요소 (0) | 2021.07.24 |
GraphQL이란? (0) | 2021.07.20 |