티스토리 뷰

안녕하세요 강정호입니다.

 

오늘은 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개의 매개변수만 입력하여 개발하였다.

 

 

 

댓글