[GraphQL] graphql-tools

jw·2022년 11월 24일
0

GraphQL

목록 보기
3/4
post-thumbnail

❔파일 최적화가 필요한 이유

한 파일에 모든 typeDefs, query, mutation을 모아두면 코드가 매우 길어지고 복잡해지므로 기능별로 폴더를 나눠서 관리해야한다.

그리고 이렇게 뿔뿔이 흩어진 모든 typeDefs, query, mutation을 merge해서 하나의 schema로 합쳐서 사용할 수 있는데,,

바로 graphql-tools 을 통해서 가능하다

Divide

Client 호스팅

client.js 파일에서 Prisma Client를 호스팅한다.

import { PrismaClient } from "@prisma/client";

const client = new PrismaClient();

export default client;

기능별

먼저 기능별로 폴더를 만든 후에 typeDefs, query, mutation을 나눠서 파일로 저장한다.
이 때 파일명은 다음과 같이 설정하는 것이 효율적이다 ➡️ 폴더명.종류.js
⭐️ 이 때 각 파일에서 반드시export default를 해줘야한다!

Conquer

다 나눴으면 다시 하나의 schema로 합쳐서 쓸 수 있도록 해보자

graphql-tools 설치

npm install @graphql-tools/schema

npm install @graphql-tools/load-files

npm install @graphql-tools/merge

schema.js

schema.js 파일을 만들고 여기서 merge를 진행한다.
주석 참고!

import { loadFiles, loadFilesSync } from "@graphql-tools/load-files";
import { mergeResolvers, mergeTypeDefs } from "@graphql-tools/merge";
import { makeExecutableSchema } from "graphql-tools";

//_____파일 로드_____//
const loadedTypes = loadFilesSync(`${__dirname}/**/*.typeDefs.js`);
//typeDefs.js로 끝나는 모든 파일 가져와서 loadedTypes으로 정의
const loadedResolvers = loadFilesSync(`${__dirname}/**/*.{queries,mutations}.js`);
//queries.js 또는 mutations.js로 끝나는 모든 파일 가져와서 loadedResolvers로 정의

//_____파일 merge_____//
const typeDefs = mergeTypeDefs(loadedTypes);
const resolvers = mergeResolvers(loadedResolvers);

//_____두 개 다 합친 스키마 생성_____//
const schema = makeExecutableSchema({ typeDefs, resolvers });
export default schema;

import

server.js에서는 다음과 같이 import해서 사용할 수 있다.

import schema from "./schema";

const server = new ApolloServer({
  schema,
});
profile
다시태어나고싶어요

0개의 댓글