[nodejs] REST API를 GraphQL로 변환하는 방법

기업은 데이터 소스에 대한 요청을 처리하기 위해 REST(Representational State Transfer) API를 사용합니다. 그러나 최근에는 GraphQL이 REST API를 대체할 수 있는 강력한 대안으로 부상하고 있습니다. GraphQL은 클라이언트가 필요한 데이터를 정확히 요청할 수 있도록 해주는 강력한 쿼리 언어입니다.

이번 블로그에서는 Node.js에서 REST API를 GraphQL로 변환하는 방법을 알아보겠습니다.

1. GraphQL 서버 생성

먼저, expressexpress-graphql 패키지를 사용하여 GraphQL 서버를 생성합니다.

const express = require('express');
const { graphqlHTTP } = require('express-graphql');
const { buildSchema } = require('graphql');

// 스키마 정의
const schema = buildSchema(`
  type Query {
    hello: String
  }
`);

// Resolver 함수 정의
const root = {
  hello: () => 'Hello, world!'
};

// Express 앱 생성
const app = express();

// GraphQL 미들웨어 설정
app.use('/graphql', graphqlHTTP({
  schema: schema,
  rootValue: root,
  graphiql: true
}));

// 서버 시작
app.listen(4000, () => {
  console.log('GraphQL 서버가 http://localhost:4000/graphql 에서 실행 중입니다.');
});

위 코드는 GraphQL 서버를 생성하고 /graphql 엔드포인트를 통해 쿼리를 수행할 수 있도록 설정합니다.

2. REST API 연결

기존의 REST API와의 연결은 axiosnode-fetch와 같은 패키지를 사용하여 수행할 수 있습니다. 예를 들어, 다음은 REST API로부터 데이터를 가져와 GraphQL 서버에서 반환하는 예시입니다.

const fetch = require('node-fetch');

const root = {
  getRemoteData: async () => {
    const response = await fetch('https://api.example.com/data');
    const data = await response.json();
    return data;
  }
};

위 코드는 getRemoteData 리졸버 함수를 정의하고, 이 함수를 사용하여 외부 REST API로부터 데이터를 가져와 반환합니다.

3. 데이터 처리

가져온 데이터를 GraphQL 서버에서 처리하고 반환할 수 있도록 리졸버 함수를 적절히 작성해야 합니다. 이때, 데이터의 형식과 GraphQL 스키마를 맞춰주는 작업이 필요합니다.

결론

Node.js를 사용하여 REST API를 GraphQL로 변환하는 것은 간단하지만 유용한 방법입니다. GraphQL은 요청한 데이터의 정확한 형태를 가져오기 위해 필요한 쿼리만 수행할 수 있도록 하는데, 이러한 특징을 이용하여 API 요청을 간소화하고 웹 애플리케이션의 성능을 향상시킬 수 있습니다.

제안 및 의견이 있으시다면 말씀해주세요!