GraphQL Schema, resolver 마치 프로처럼!!! 정의하는 방법

  1. 우선 필요한 묘듈인 merge-graphql-schemasgraphql-tools, path를 설치한다.

  2. schema.js 파일을 하나 생성한다.

    // schema.js 코드 내용
    import {
      fileLoader,
      mergeResolvers,
      mergeTypes
    } from "merge-graphql-schemas";
    import path from "path";
    import { makeExecutableSchema } from "graphql-tools";
    
    const allTypes = fileLoader(path.join(__dirname, "/api/**/*.graphql"));
    // api 폴더 안에 모든 폴더에 모든 graphql 파일을 불러온다.
    
    const allResolvers = fileLoader(path.join(__dirname, "/api/**/*.js"));
    // api 폴더 안에 모든 폴더에 모든 js(resolver) 파일을 불러온다.
    
    const schema = makeExecutableSchema({
      typeDefs: mergeTypes(allTypes),
      resolvers: mergeResolvers(allResolvers)
    });
    // schema 변수에 typeDefs, resolvers를 정의하여 담아주고 그것을 export 해준다.
    
    export default schema;
  3. api 폴더를 생성한다.

  4. api 폴더 안에 Greetings 폴더를 생성한다.

  5. Greetings 폴더 안에 sayHello.js, sayHello.graphql 파일을 생성한다.

    // sayHello.js 파일
    export default {
      Query: {
        sayHello: () => "Hello!"
      }
    };
    // sayHello.graphql 파일
    type Query{
      sayHello: String!
    }
    • 두 파일은 schema.js 파일을 통해 schema 변수에 정의되어 export가 된다.
  6. server 코드를 수정한다.

    // index.js 파일
    import { GraphQLServer } from "graphql-yogo";
    import schema from "./schema"; // export한 schema를 가져온다.
    
    const server = new GraphQLServer({ schema });
    // GraphQLServer의 type과 resolver를 정의하는 방법은
    // typeDefs, resolvers를 각각 정의하는 방법과 schema로 한번에 정의하는 방법이 있다.
    
    server.start({ port: 4000 }, () => console.log("💻 Graphql Server Running"));