graphql에는 query, mutation과 더불어 subscription 기능을 제공한다.
subscription은 특정 이벤트(create, delete, update...)가 발생했을 때 알람을 주는 기능이다. 전형적인 요청-응답 방식이 아닌 푸쉬 방식이다.
https://velog.io/@cadenzah/graphql-node-08-subscription
subscription서버를 구현하기는 어렵다. server를 일단 분리해야 하기 때문이다.
prisma에서는 subscription 기능을 자체적으로 제공하며, 필터링 방법도 매우 좋기 때문에 사용하기에 편리하다.
나에게 보내진 Message에 한해서 알람을 받는 기능을 만든다.
type Subscription {
newMessage(roomId: String!): Message
}
Subscription: {
newMessage: {
subscribe: (_, args) => {
const { roomId } = args;
return prisma.$subscribe
.message({
AND: [
{ mutation_in: "CREATED" },
{
node: { room: { id: roomId } },
},
],
}).node();
},
resolve: (payload) => payload,
},
},
subscription은 자바스크립트 객체의 subscribe 필드의 값으로서 제공됩니다.
(subscribe, resolve..)