프린세스 다이어리

[GraphQL] 4. apollo-server 설치, 기본 실행 코드 설명 본문

GraphQL

[GraphQL] 4. apollo-server 설치, 기본 실행 코드 설명

개발공주 2021. 11. 22. 19:36
728x90

얄팍한 코딩 GraphQL 강의

1. apollo-server 설치

npm i apollo-server
// index.js

const database = require('./database');
const { ApolloServer, gql } = require('apollo-server');

const typeDefs = gql`
  type Query {
    teams: [Team]
  }
  type Team {
    id: Int
    manager: String
    office: String
    extension_number: String
    mascot: String
    cleaning_duty: String
    project: String
  }
`;
const resolvers = {
  Query: {
    teams: () => database.teams,
  },
};
const server = new ApolloServer({ typeDefs, resolvers });
server.listen().then(({ url }) => {
  console.log(`🚀  Server ready at ${url}`);
});

 

2. 코드 설명

 

(1) apollo-server 생성

apollo-server 모듈에서 가져온 ApolloServer 클래스는 typeDefs, resolvers를 인자로 받아서 생성자로 서버를 생성한다.

const server = new ApolloServer({ typeDefs, resolvers });

 

(2) server 실행

생성한 서버를 .listen() 명령어로 실행을 해 준다. 

server.listen().then(({ url }) => {
  console.log(`🚀  Server ready at ${url}`);
});

 

(3) typeDefs와 resolvers 정의

 

typeDefs

const typeDefs = gql`
  type Query {
    teams: [Team]
  }
  type Team {
    id: Int
    manager: String
    office: String
    extension_number: String
    mascot: String
    cleaning_duty: String
    project: String
  }
`;

- GraphQL 명세에서 사용될 데이터, 요청의 타입 지정.

- gql(template literal tag)로 생성됨

예를 들어 Team이라는 데이터가 어떤 항목으로 구성되어 있는지, 그리고 이를 요청할 Query에도 어떤 식으로 요청이 들어가는지 등의 데이터 구조가 선언돼 있다고 보면 된다. 

 

  type Query {
    teams: [Team]
  }

더 자세히 보면 Query는 query의 루트 타입을 나타낸다. Query 라는 타입 안에 어떤 요청이 들어오고 그것으로 어떤 형식의 데이터들이 반환될지가 지정되어 있는 것이다. [Team]이라는 형태로 반환한다는 것은 Team이라는 타입이 배열의 형태로 여러개 반환된다는 의미다. team은 즉 Team의 형태로 구성된 데이터들의 묶음이다.

 

  type Team {
    id: Int
    manager: String
    office: String
    extension_number: String
    mascot: String
    cleaning_duty: String
    project: String
  }

 

Team에는 각 항목들마다 정수, 문자열 등의 자료형이 지정되어 있다. 

 

resolver

const resolvers = {
  Query: {
    teams: () => database.teams,
  },
};

- 서비스의 액션들을 함수로 지정

- 요청에 따라 데이터를 반환, 입력, 수정, 삭제

 

Query에서 이루어지는 실질적인 작업들이 정의되어 있다. Query의 teams 항목은 화살표 함수 형식으로 데이터베이스의 teams 항목을 반환하는 함수임을 알 수 있다. 실제 프로젝트에서는 MySQL 조회 코드 등이 들어간다.

 

728x90
Comments