[typescript] 타입스크립트를 활용한 GraphQL-js 서버에서의 예외 처리 및 오류 관리 방법

GraphQL-js를 사용하여 타입스크립트로 서버를 구축할 때 예외 처리 및 오류 관리에 대한 이해가 중요합니다. 이 글에서는 GraphQL-js 서버에서 예외 처리를 하는 방법과 오류 관리를 하는 방법에 대해 알아보겠습니다.

1. 예외 처리

GraphQL-js 서버에서 예외 처리를 위해서는 GraphQLError 클래스를 활용할 수 있습니다. 이 클래스는 GraphQL 요청 중 발생한 오류를 나타냅니다.

예를 들어, 사용자가 요청한 데이터가 존재하지 않을 때 발생하는 오류를 처리하는 예제를 살펴보겠습니다.

import { GraphQLError } from 'graphql';

function resolveUser(parent, args) {
  const user = getUserFromDatabase(args.id);
  if (!user) {
    throw new GraphQLError('사용자를 찾을 수 없습니다.', null, null, null, [args.id]);
  }
  return user;
}

위의 예제에서는 getUserFromDatabase 함수에서 사용자를 찾지 못했을 때 GraphQLError를 활용하여 오류를 생성하고 있습니다. 이를 통해 클라이언트에게 명확한 오류 메시지를 전달할 수 있습니다.

2. 오류 관리

오류를 관리하기 위해서는 GraphQL 서버에서 오류를 적절히 처리하는 미들웨어를 작성해야 합니다. 이를 위해 expressexpress-graphql을 함께 사용하는 예제를 살펴보겠습니다.

import express from 'express';
import graphqlHTTP from 'express-graphql';
import { buildSchema } from 'graphql';

const app = express();

const schema = buildSchema(`
  type Query {
    user(id: Int): User
  }

  type User {
    id: Int
    name: String
  }
`);

const root = {
  user: (args) => {
    const user = getUserFromDatabase(args.id);
    if (!user) {
      throw new Error('사용자를 찾을 수 없습니다.');
    }
    return user;
  },
};

app.use(
  '/graphql',
  graphqlHTTP({
    schema,
    rootValue: root,
    graphiql: true,
    customFormatErrorFn: (error) => ({
      message: error.message,
      locations: error.locations,
      path: error.path,
    }),
  })
);

app.listen(4000, () => {
  console.log('Running a GraphQL API server at http://localhost:4000/graphql');
});

위의 예제에서는 customFormatErrorFn을 사용하여 오류가 발생했을 때 클라이언트에게 전달되는 오류 메시지를 포맷팅하고 있습니다.

결론

GraphQL-js 서버에서 예외 처리와 오류 관리는 안정적인 서비스를 제공하기 위해 매우 중요합니다. GraphQLError 클래스를 활용하여 명확한 오류 메시지를 생성하고, 오류를 적절히 관리하기 위해 미들웨어를 구성하는 것이 좋습니다.

참고 문헌: