[typescript] 타입스크립트와 GraphQL-js를 활용한 에러 핸들링 방법

GraphQL-js는 GraphQL을 JavaScript나 TypeScript에서 쉽게 구현할 수 있도록 지원하는 라이브러리입니다. 이번 글에서는 타입스크립트와 GraphQL-js를 사용하여 서버 측에서 에러를 핸들링하는 방법에 대해 알아보겠습니다.

1. 에러 타입 정의

먼저, 타입스크립트를 사용하여 GraphQL에서 발생할 수 있는 에러를 정의합니다. 에러 타입은 ErrorType이라는 이름으로 정의하고, 에러 코드와 메시지를 포함합니다.

예를 들어, 다음과 같이 에러 타입을 정의할 수 있습니다.

type ErrorType = {
  code: string;
  message: string;
};

2. 에러 핸들링 함수 작성

다음으로, 실제로 발생하는 에러를 핸들링하는 함수를 작성합니다. 이 함수는 GraphQL resolver에서 발생한 에러를 받아서 적절한 에러 타입으로 변환하고, 클라이언트에 전달합니다.

예를 들어, 다음과 같이 에러 핸들링 함수를 작성할 수 있습니다.

function handleErrors(error: any): ErrorType {
  // 실제로 발생한 에러를 기반으로 적절한 에러 타입을 반환하는 로직을 작성
  if (error instanceof ValidationError) {
    return { code: 'VALIDATION_ERROR', message: '입력이 유효하지 않습니다.' };
  } else if (error instanceof AuthenticationError) {
    return { code: 'AUTHENTICATION_ERROR', message: '인증에 실패했습니다.' };
  } else {
    return { code: 'INTERNAL_SERVER_ERROR', message: '서버 내부 에러가 발생했습니다.' };
  }
}

3. Resolver에서 에러 핸들링하기

마지막으로, GraphQL resolver에서 발생한 에러를 위에서 작성한 핸들링 함수를 사용하여 처리합니다. 이를 통해 클라이언트에게 적절한 에러 코드와 메시지를 전달할 수 있습니다.

예를 들어, GraphQL resolver에서 에러를 핸들링하는 방법은 다음과 같습니다.

const resolver = {
  Query: {
    exampleQuery: async (_, args, context) => {
      try {
        // Resolver 로직 작성
      } catch (error) {
        const handledError = handleErrors(error);
        throw new UserInputError(handledError.message, { code: handledError.code });
      }
    },
  },
};

이렇게 타입스크립트와 GraphQL-js를 사용하여 서버 측에서 에러를 핸들링할 수 있습니다. 이를 통해 클라이언트에게 보다 명확한 에러 정보를 제공할 수 있고, 안정적인 서버를 구축할 수 있습니다.