노드.js는 비동기 이벤트 드리븐 구조 덕분에 높은 성능을 제공하며, REST API와 GraphQL을 동시에 구축하기에 적합한 환경입니다. 이번 포스트에서는 노드.js와 Express.js를 사용하여 REST API와 GraphQL을 동시에 구축하는 방법을 소개하겠습니다.
프로젝트 설정
먼저, 새로운 노드.js 프로젝트를 생성하고 필요한 패키지를 설치합니다.
mkdir node-api-graphql
cd node-api-graphql
npm init -y
npm install express express-graphql graphql body-parser
위 명령어로 express, express-graphql, graphql, body-parser 패키지를 설치합니다. 그 다음, index.js 파일을 생성하여 기본적인 서버 설정을 합니다.
기본 서버 구축
아래 코드를 index.js 파일에 추가합니다.
const express = require('express');
const bodyParser = require('body-parser');
const { graphqlHTTP } = require('express-graphql');
const { buildSchema } = require('graphql');
const app = express();
const PORT = 4000;
// REST API를 위한 더미 데이터
let users = [
{ id: 1, name: 'Alice' },
{ id: 2, name: 'Bob' },
];
// GraphQL 스키마 정의
const schema = buildSchema(
type User {
id: Int
name: String
}
type Query {
getUser(id: Int!): User
getAllUsers: [User]
}
type Mutation {
createUser(name: String!): User
}
);
// GraphQL 리졸버
const root = {
getUser: ({ id }) => users.find(user => user.id = id),
getAllUsers: () => users,
createUser: ({ name }) => {
const newUser = { id: users.length + 1, name };
users.push(newUser);
return newUser;
},
};
// REST API 구현
app.get('/api/users', (req, res) => {
res.json(users);
});
app.get('/api/users/:id', (req, res) => {
const user = users.find(u => u.id = parseInt(req.params.id));
if (user) {
res.json(user);
} else {
res.status(404).send('User not found');
}
});
app.post('/api/users', bodyParser.json(), (req, res) => {
const { name } = req.body;
const newUser = { id: users.length + 1, name };
users.push(newUser);
res.status(201).json(newUser);
});
// GraphQL 엔드포인트
app.use('/graphql', graphqlHTTP({
schema: schema,
rootValue: root,
graphiql: true,
}));
app.listen(PORT, () => {
console.log(서버가 http://localhost:${PORT}에서 실행 중입니다.);
});
위 코드에서는 기본적인 REST API와 GraphQL API를 모두 설정했습니다. REST API는 /api/users 엔드포인트에서 사용자 목록을 반환하고, 특정 ID의 사용자를 반환하며, 새 사용자를 추가하는 POST 요청을 처리합니다. GraphQL은 /graphql 엔드포인트에서 쿼리와 뮤테이션을 통해 사용자 정보를 요청하고 추가할 수 있습니다.
REST API와 GraphQL 사용하기
서버를 실행하려면 아래 명령어를 실행합니다.
node index.js
이제 브라우저에서 http://localhost:4000/api/users를 입력하면 사용자의 목록을 JSON 형식으로 받을 수 있습니다. 특정 사용자를 조회하려면 http://localhost:4000/api/users/1과 같은 URL을 사용합니다.
GraphQL API를 테스트하려면 브라우저에서 http://localhost:4000/graphql에 접속하여 GraphiQL 인터페이스를 사용할 수 있습니다.
예를 들어, 모든 사용자 정보를 조회하는 쿼리는 다음과 같습니다.
{
getAllUsers {
id
name
}
}
사용자를 생성하는 뮤테이션 예시는 다음과 같습니다.
mutation {
createUser(name: "Charlie") {
id
name
}
}
이와 같이 REST API와 GraphQL을 동시에 구현함으로써 프론트엔드 개발자가 필요한 데이터를 보다 유연하게 요청할 수 있고, 기존의 REST API를 활용할 수 있는 장점이 있습니다.
마무리
이번 포스팅에서는 노드.js를 이용하여 REST API와 GraphQL을 동시에 구축하는 방법을 살펴보았습니다. 두 가지 API 방식의 장점을 모두 활용할 수 있는 기회를 제공하는 이 접근 방식은 다양한 상황에서 유용하게 활용될 수 있습니다. RESTful API와 GraphQL의 조화를 통해 더 나은 백엔드 서비스를 구현해보세요.