Nodejs - graphql,apollo 사용법(1)

any1ok·2021년 9월 19일
1

GraphQL 이란?

Node.js를 이용해, 데이터베이스에 접근하는 나만의 명령어를 만들고 (Query, Mutation, TypeDefs, resolvers )
CRUD 요청, 응답을 더 효과적으로 처리할 수 있게 해주는 API 이다.

GraphQL 을 왜쓸까?

rest api 의 한계점이 분명히 존재하기 때문이다
rest api 는 원하는 데이터보다 쓸데없이 더많은 데이터를 가져와야만 하기도하고(over-fetching)
특정 데이터를 요청하기위해 여러번의 요청을 해야하는상황이 나오기도 한다(under-fetching)

자 이제 graphql 을 써보자
먼저 rest api의 get에 해당하는 query 를 사용해보도록 하자

GraphQL, ApolloServer 설치

npm i graphql apollo-server

// graphql : 그래프큐엘을 사용하기 위한 패키지

// apollo-server : 아폴로 서버를 사용하기 위한 패키지

아폴로 서버를 require 해주고

const { ApolloServer, gql } = require("apollo-server");

GraphQL 스키마 를 만들어보자.

const typeDefs = gql`
  // Book type을 설정해주고
  type Book {
    id : Int
    title: String
    author: String
  }
  // 우리가 쓸 쿼리문의 books 는 Book 타입을 배열로 보내주는 형식 이다! 라고 말해줌
  type Query {
    books: [Book]
  }
`;

데이터 세트 만들만들어보자.

const books = [
    {
      id: 1,
      title: 'The Awakening',
      author: 'Kate Chopin',
    },
    {
      id: 2,
      title: 'City of Glass',
      author: 'Paul Auster',
    },
  ];

Resolvers 도 만들고

const resolvers = {
    Query: {
      books: () => books,
    },
    
  };

Apollo-GraphQL 서버 만들면

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

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

실행시켜보면~

localhost:4000

잘 된다.

전체코드

var express = require("express");
var bodyParser = require("body-parser");
var app = express();

const { ApolloServer, gql } = require("apollo-server");


const typeDefs = gql`

  type Book {
    id : Int
    title: String
    author: String
  }
  
  type Query {
    books: [Book]
  }
`;

const books = [
    {
      id: 1,
      title: 'The Awakening',
      author: 'Kate Chopin',
    },
    {
      id: 2,
      title: 'City of Glass',
      author: 'Paul Auster',
    },
  ];

const resolvers = {
    Query: {
      books: () => books,
    },
    
  };

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



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

  
app.get("/", function (req, res) {
    res.send("Hello graphql----");
  });

app.listen(3000, function () {
    console.log("App started");
});
profile
백엔드 개발자

0개의 댓글