🔙뒤로가기

GraphQL에서의 에러 처리는 특히 중요한 주제이다. GraphQL은 HTTP 상태 코드를 사용하지 않고, 항상 200 OK 상태 코드를 반환한다. 대신, 에러가 발생하면 응답 본문에 errors 필드를 포함하여 에러 정보를 전달한다.

{
  "errors": [
    {
      "message": "A GraphQL error occurred.",
      // ...more fields...
    }
  ],
  "data": {
    // ...query result...
  }
}

이렇게 하면 클라이언트는 정상적인 쿼리 결과와 에러를 동시에 받을 수 있게 된다. 에러가 발생한 필드만 무시하고, 나머지 필드는 정상적으로 사용할 수 있기 때문이다.

GraphQL 서버에서는 예외가 발생하면 해당 예외를 캡쳐하고, 에러 메시지를 생성하여 응답에 포함시킨다. 어떤 예외를 어떻게 처리할지는 서버의 구현에 따라 다르지만, 일반적으로는 미리 정의된 에러 타입에 따라 다른 에러 메시지를 반환한다.

예를 들어, 사용자가 요청한 리소스가 없는 경우 **NotFoundException**을 발생시키고, 이를 "Resource not found"라는 메시지로 변환할 수 있다. 마찬가지로, 인증되지 않은 요청에 대해서는 **AuthenticationException**을 발생시키고, 이를 "Authentication required"라는 메시지로 변환할 수 있다.

에러 처리를 더 세밀하게 하려면 GraphQL 스펙의 에러 포맷을 확장할 수도 있다. 예를 들어, 에러 코드나 에러 유형을 추가하여 클라이언트가 에러를 더 쉽게 처리할 수 있도록 할 수 있다.

{
  "errors": [
    {
      "message": "A GraphQL error occurred.",
      "code": "RESOURCE_NOT_FOUND",
      "type": "ClientError"
      // ...more fields...
    }
  ],
  "data": {
    // ...query result...
  }
}

이런 식으로, GraphQL 서버에서는 각 에러 상황에 따라 적절한 에러 메시지와 추가 정보를 제공하여 클라이언트가 에러를 쉽게 이해하고 처리할 수 있게 해야 한다.