프로젝트
[인스타그램 클론코딩] #3.28~#3.29 newMessage Subscription
jhkang-dev
2020. 9. 27. 17:44
안녕하세요 강정호입니다.
오늘은 newMessage Subscription API 개발을 해보겠습니다.
Graphql Subscription(구독) 이란?
특정 이벤트가 발생했을 때 서버가 클라이언트에게 데이터를 전송해주는 Graphql 기능입니다.
클라이언트는 구독을 설정하여 서버와의 연결을 지속하고, 특정 이벤트 발생시에 서버에서 클라이언트로 데이터를 푸쉬하게 합니다.
(참고 : velog.io/@cadenzah/graphql-node-08-subscription)
(참고2 : www.howtographql.com/graphql-js/7-subscriptions/)
newMessage.graphql
type Subscription {
newMessage(roomId: String!): Message!
}
newMessage를 구독하고 이벤트가 발생할 때마다 신규로 생성된 Message 객체를 푸쉬 받기 위한 것.
newMessage.js
import { prisma } from "../../../../generated/prisma-client";
export default {
Subscription: {
newMessage: {
subscribe: (parent, args, {request, isAuthenticated}, info) => {
const { roomId } = args;
//Message를 Subscription 하게 되면 매개변수들이 필요하다
// mutation : CREATED, DELETED, UPDATED 작업 중 어떤 이벤트가 발생했을 때 푸쉬할 지
// node : 이벤트 조건 설정. Room id에 해당하는 것에서 Message가 생성되었을 때.
return prisma.$subscribe.message({
AND: [
{mutation_in: "CREATED"},
{
node: {
room: {id: roomId}
}
}
]
}).node();
},
resolve: payload => payload
}
}
}
아래의 MessageSubscriptionPayload 함수의 매개변수를 확인할 수 있다. 실제로 Message 구독에 필요한 조건은 mutation과 node여서 2개의 매개변수만 입력하여 개발하였다.