프로젝트 소개
API를 개발하는데 두 가지 방법이 있다. Restful API를 개발하는 방법과 Graphql API를 개발하는 방법이다. 이번 프로젝트에서는 Graphql를 이용하여 API를 개발하는 실습을 진행한다. Graphql에 관한 자세한 설명보다는 여러 상황에서 API를 개발하는 실습에 관하여 설명하겠다. 데이터 베이스는 MongoDB를 사용한다. Graphql, MongoDB, Mongoose에 관한 기초적인 내용은 알고 있는 상태라고 가정하고 설명하며 상세한 설명은 생략하도록 하겠다.
애플리케이션 설정
Graphql API는 다양한 언어를 이용하여 개발할 수 있는데, 여기서는 Node.js를 이용하여 개발한다. 또한 Node.js를 이용할 때에도 다양한 패키지를 사용할 수 있는데, 여기서는 apollo-server를 이용하여 개발한다. apollo-server는 Graphql 서버를 다양한 기능과 함께 제공한다. 우선 apollo-server, graphql, mongoose, dotenv를 설치한다.
npm i apollo-server graphql mongoose graphql dotenv
package.json의 scripts는 다음과 같이 설정한다.
"scripts": {
"start": "node app.js",
"dev": "nodemon app.js"
},
우선 가장 간단한 예제를 위한 세팅을 진행한다.
App.js
const { ApolloServer } = require('apollo-server');
const typeDefs = require('./graphql/schema');
const resolvers = require('./graphql/resolvers');
const server = new ApolloServer({
typeDefs,
resolvers,
playground: true
});
server.listen().then(({ url }) => {
console.log(`🚀 Server ready at ${url}`);
});
ApolloServer는 typeDefs, resolvers, playground 속성을 가진 객체를 인자로 받는다. typeDefs에는 쿼리의 형태를 정의하고, resolver에는 쿼리에 해당하는 데이터를 가져오는 로직을 정의한다. playground는 작성한 쿼리를 테스트하는 클라이언트이다.
schema/index.js
const { gql } = require('apollo-server');
const typeDefs = gql`
type Query {
books: [Book]
}
type Book{
title:String
author: String
}
`;
module.exports = typeDefs;
schema/index.js에서는 Query와 쿼리로 접근하는 데이터의 형태를 정의한다. Query에는 쿼리의 형태를 정의하는데, 여기서는 Book 타입의 데이터 리스트를 반환하는 books라는 쿼리는 정의하였다. Book 타입의 데이터는 title과 author라는 String 값을 가지도록 정의하였다.
resolvers/index.js
const resolvers = {
Query: {
books: () => [
{
title:'Title 1',
author : 'Author 1'
},
{
title:'Title 2',
author : 'Author 2'
}
],
}
module.exports = resolvers;
resolver에서는 books라는 쿼리를 실행했을 때 Book 타입에 맞는 데이터 리스트를 반환하도록 로직을 작성하였다.
애플리케이션 시작
간단한 예제를 위한 세팅은 마쳤으므로 다음을 입력하여 애플리케이션을 실행한다.
npm run dev
정상적으로 서버를 실행하였으면 localhost:4000에 접속하여 playground를 확인한다.
앞서 작성한 books 쿼리가 정상적으로 작동하는지 확인하기 위해 다음과 같이 쿼리를 작성하고 실행 버튼을 클릭한다.
query{
books{
title
author
}
}
이는 books라는 쿼리를 실행할 것이며 title과 author값을 모두 읽고 싶다는 뜻이다. 결과는 다음과 같다.
여기까지 애플리케이션 설정을 진행하였고 다음 글에서는 MongoDB에 저장한 데이터를 불러오는 쿼리를 작성하겠다.
전체 소스파일
github.com/Jongbeom2/mongodb-graphql-tutorial
'개인 개발 프로젝트 > Graphql, MongoDB 실습' 카테고리의 다른 글
[Graphql, MongoDB 실습] 6. 1:N 관계 (0) | 2020.08.08 |
---|---|
[Graphql, MongoDB 실습] 5. Graphql Mutation with Transaction (0) | 2020.08.06 |
[Graphql, MongoDB 실습] 4. Graphql Mutation (0) | 2020.08.05 |
[Graphql, MongoDB 실습] 3. Graphql 기본 쿼리 예제 (0) | 2020.08.05 |
[Graphql, MongoDB 실습] 2. MongoDB 연동 (0) | 2020.08.05 |