한 파일에 모든 typeDefs, query, mutation을 모아두면 코드가 매우 길어지고 복잡해지므로 기능별로 폴더를 나눠서 관리해야한다.
그리고 이렇게 뿔뿔이 흩어진 모든 typeDefs, query, mutation을 merge해서 하나의 schema로 합쳐서 사용할 수 있는데,,
바로 graphql-tools 을 통해서 가능하다
client.js 파일에서 Prisma Client를 호스팅한다.
import { PrismaClient } from "@prisma/client";
const client = new PrismaClient();
export default client;
먼저 기능별로 폴더를 만든 후에 typeDefs, query, mutation을 나눠서 파일로 저장한다.
이 때 파일명은 다음과 같이 설정하는 것이 효율적이다 ➡️ 폴더명.종류.js
⭐️ 이 때 각 파일에서 반드시export default를 해줘야한다!
다 나눴으면 다시 하나의 schema로 합쳐서 쓸 수 있도록 해보자
npm install @graphql-tools/schema
npm install @graphql-tools/load-files
npm install @graphql-tools/merge
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;
server.js에서는 다음과 같이 import해서 사용할 수 있다.
import schema from "./schema";
const server = new ApolloServer({
schema,
});