초기 설정
빈 프로젝트 생성
서버 구축을 위한 디렉토리 생성
$ mkdir apollo-server-test
$ cd apollo-server-test
yarn berry 설정
yarn berry를 사용하기 위해 yarn set version
명령어를 통해 berry로 변경해준다.
$ yarn set version berry
변경 후 제대로 변경이 됐는지 확인해본다.
$ yarn -v
3.2.1
Apollo Server 구축
의존성 모듈 설치
graphql 서버를 구축하기 위해, 본 글에서는 apollo-server
를 사용한다. yarn berry를 사용하여, apollo-server와 graphql를 설치한다.
$ yarn init
$ yarn add apollo-server graphql
zero-installs 설정
yarn berry의 장점 중 하나인 zero-install 설정을 한다. 설정이라고 해봤자, .gitignore에 .yarn/.cache를 포함하면 됨
.gitignore
.yarn/*
!.yarn/patches
!.yarn/plugins
!.yarn/releases
!.yarn/sdks
!.yarn/versions
!.yarn/cache
만약, zero-installs
를 사용하기 싫다면, 아래 "더보기"를 확인해주세요.
.gitignore 설정을 아래와 같이 하여, .cache 파일이 git repository에 올라가지 않도록한다.
.yarn/*
!.yarn/patches
!.yarn/releases
!.yarn/plugins
!.yarn/sdks
!.yarn/versions
.pnp.*
GrqphQL 스키마 정의
간단한 graphql 스키마를 작성한다. 예제로 사용자에 대한 정보를 반환할 수 있는 User
타입을 생성한다.
const { ApolloServer, gql } = require('apollo-server');
// 타입 정의
const typeDefs = gql`
type User {
id: Int
name: String
age: Int
}
type Query {
user(id: Int!): User
}
`;
Resolver 정의
resolver를 정의하기 전에 테스트를 위한 테스트 데이터를 생성한다.
// 테스트 데이터
const users = [
{
id: 1,
name: '철수',
age: 25,
},
{
id: 2,
name: '영희',
age: 23,
},
{
id: 3,
name: '길동',
age: 30,
},
];
client에서 요청을 보냈을때, 실제 동작을 수행할 비지니스 로직을 작성하여, Resolver
를 추가한다.
// resolver 정의
const resolvers = {
Query: {
user: (parent, args, context, info) => {
console.log(args);
return users.find(user => user.id === args.id);
},
},
};
정의한 타입과 resolver, 그리고 옵션들과 함께 ApolloServer를 생성한다.
// apollo server 생성
const server = new ApolloServer({
typeDefs,
resolvers,
csrfPrevention: true,
});
server.listen().then(({ url }) => {
console.log(`🚀 Server ready at ${url}`);
});
아래 명령어를 사용하여, Apollo Server를 실행한다.
$ node src/index.js
좀 더 편리하게 package.json의 scripts를 추가하면 편리하다.
위와 같이 설정을 했으면,{ ... "scripts": { "dev": "node src/index.js" }, ... }
yarn dev
를 사용하여 실행할 수 있다.
http://localhost:4000
으로 접속하면 아래와 같은 화면이 나오는데, "Query your server"를 누르면 GraphQL 쿼리를 작성하여 만든 GraphQL API를 테스트해볼 수 있다. (API를 호출해볼 수 있는 https://studio.apollographql.com/sandbox/explorer 사이트로 리다이렉트 해줌)
Apollo GraphQL에서 API를 테스트 해볼 수 있는 UI까지 제공해주기 때문에, curl 없이 손 쉽게 GraphQL API를 호출해 볼 수 있다.
쿼리와 body에 data를 작성하고, API를 호출해보면 아래와 같이 Response 값이 온다.
query ExampleQuery($userId: Int!) {
user(id: $userId) {
id
name
age
}
}
{
"userId": 2
}
만약, name 과 age 값만 필요하다면, 아래와 같이 id 를 빼고 API를 호출하면 된다.
query ExampleQuery($userId: Int!) {
user(id: $userId) {
name
age
}
}
Reference
'Backend > GraphQL' 카테고리의 다른 글
typegraphql + typeorm + postgres을 사용하여 monorepo apollo server 구축 (0) | 2022.08.28 |
---|---|
apollo server와 knex를 이용하여 postgresql 연동하기 (with monorepo, typescript) (0) | 2022.08.26 |