

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 를 사용하여 GraphQL 실행 복잡성, 쿼리 깊이 및 내부 검사 구성 AWS AppSync
<a name="configuration-limits"></a>

AWS AppSync 를 사용하면 내부 검사 기능을 활성화 또는 비활성화하고 단일 쿼리에서 중첩 수준 및 해석기의 양으로 제한을 설정할 수 있습니다.

## 내부 검사 기능 사용
<a name="configuration-limits-introspection"></a>

**작은 정보**  
GraphQL의 내부 검사에 대한 자세한 내용은 [GraphQL 재단 웹 사이트](https://graphql.org/learn/introspection/)의 이 문서를 참조하십시오.

기본적으로 GraphQL에서는 내부 검사를 사용하여 스키마 자체를 쿼리하여 스키마의 유형, 필드, 쿼리, 변형, 구독 등을 검색할 수 있습니다. 이는 GraphQL 서비스가 데이터를 구성하고 처리하는 방법을 학습하는 데 중요한 기능입니다. 그러나 내부 검사 시에는 다음과 같은 고려해야 할 사항이 있습니다. 내부 검사를 비활성화하면 도움이 되는 사용 사례가 있을 수 있습니다. 예를 들어 필드 이름이 민감하거나 숨겨질 수 있는 경우 또는 전체 API 스키마를 소비자에게 문서화하지 않도록 설정하는 경우가 이에 해당합니다. 이러한 경우 내부 검사를 통해 스키마 데이터를 게시하면 프라이빗 데이터가 의도적으로 유출될 수 있습니다.

이러한 일이 발생하지 않도록 내부 검사를 비활성화할 수 있습니다. 이렇게 하면 권한이 없는 당사자가 스키마의 내부 검사 필드를 사용하는 것을 방지할 수 있습니다. 하지만 개발팀이 서비스의 데이터가 처리되는 방식을 익히는 데 내부 검사가 유용하다는 점이 중요합니다. 내부적으로는 내부 검사를 활성화한 상태로 유지하면서 프로덕션 코드에서는 추가 보안 계층으로 사용하지 않도록 설정하는 것이 유용할 수 있습니다. 이를 처리하는 또 다른 방법은에서 AWS AppSync 제공하는 권한 부여 방법을 추가하는 것입니다. 자세한 내용은 [ 권한 부여](https://docs.aws.amazon.com/appsync/latest/devguide/security-authz.html)를 참조하세요.

AWS AppSync 를 사용하면 API 수준에서 내부 검사를 활성화하거나 비활성화할 수 있습니다. 내부 검사를 활성화 또는 비활성화하려면 다음을 따르십시오.

1. 에 로그인 AWS Management Console 하고 [AppSync 콘솔](https://console.aws.amazon.com/appsync/)을 엽니다.

1. **API** 페이지에서 GraphQL API의 이름을 선택합니다.

1. API 홈페이지의 탐색 창에서 **설정** 을 선택합니다.

1. **API 구성**에서 **편집**을 선택합니다.

1. **내부 검사 쿼리**에서 다음 작업을 수행합니다.

   1. **내부 검사 쿼리 활성화**를 켜거나 끕니다.

1. **저장**을 선택합니다.

내부 검사를 활성화하면(기본 동작) 내부 검사 시스템이 정상적으로 작동합니다. 예를 들어 아래 이미지는 스키마에서 사용 가능한 모든 유형을 처리하는 `__schema` 필드를 보여줍니다.

![\[GraphQL schema explorer showing query structure with types and name fields.\]](http://docs.aws.amazon.com/ko_kr/appsync/latest/devguide/images/introspection-enabled.png)


이 기능을 비활성화하면 응답에 검증 오류가 대신 표시됩니다.

![\[GraphQL query editor showing a validation error for undefined 'types' field in '_Schema'.\]](http://docs.aws.amazon.com/ko_kr/appsync/latest/devguide/images/introspection-disabled.png)


## 쿼리 깊이 제한 구성
<a name="configuration-limits-depth"></a>

작업 중에 API가 작동하는 방식을 더 세밀하게 제어해야 하는 경우가 있을 수 있습니다. 이러한 제어 중 하나는 쿼리가 처리할 수 있는 중첩 수준의 양에 제한을 추가하는 것입니다. 기본적으로 쿼리는 중첩 수준을 무제한으로 처리할 수 있습니다. 쿼리를 지정된 양의 중첩 수준으로 제한하면 프로젝트의 성능과 유연성에 영향을 미칠 수 있습니다. 다음 쿼리를 실행합니다.

```
query MyQuery {
  L1: nextLayer {
    L2: nextLayer {
      L3: nextLayer {
        L4: value
      }
    }
  }
}
```

프로젝트에서 `L1` 또는 `L2`에 대한 쿼리를 특정 목적으로 제한하도록 요청할 수도 있습니다. 기본적으로 `L1`부터 `L4`까지의 전체 쿼리는 이를 제어할 수 있는 방법 없이 처리됩니다. 제한을 설정하면 쿼리가 지정된 수준 이상의 항목에 액세스하는 것을 방지할 수 있습니다.

쿼리 깊이 제한을 추가하려면 다음 작업을 수행합니다.

1. 에 로그인 AWS Management Console 하고 [AppSync 콘솔](https://console.aws.amazon.com/appsync/)을 엽니다.

1. **API** 페이지에서 GraphQL API의 이름을 선택합니다.

1. API 홈페이지의 탐색 창에서 **설정** 을 선택합니다.

1. **API 구성**에서 **편집**을 선택합니다.

1. **쿼리 깊이**에서 다음 작업을 수행합니다.

   1. **쿼리 깊이 활성화**를 켜거나 끕니다.

   1. **최대 깊이**에서 깊이 제한을 설정합니다. 이 값은 `1`부터 `75` 사이일 수 있습니다.

1. **저장**을 선택합니다.

제한이 설정된 경우 상한을 넘으면 `QueryDepthLimitReached` 오류가 발생합니다. 예를 들어 아래 이미지는 `2`의 깊이 제한이 적용된 쿼리가 세 번째(`L3`) 및 네 번째(`L4`) 수준의 제한을 초과하는 모습을 보여줍니다.

![\[Query structure with nested layers L1, L2, L3, and L4, showing depth limit exceeded.\]](http://docs.aws.amazon.com/ko_kr/appsync/latest/devguide/images/query-depth-limit.jpg)


참고로 스키마에서 필드를 여전히 Null 허용 또는 Null 허용 불가로 표시할 수 있습니다. Null 허용 불가 필드에 `QueryDepthLimitReached` 오류가 발생하면 해당 오류는 Null 허용 첫 번째 상위 필드에 발생합니다.

## 해석기 수 제한 구성
<a name="configuration-limits-resolver-count"></a>

각 쿼리가 처리할 수 있는 해석기 수도 제어할 수 있습니다. 쿼리 깊이와 마찬가지로 이 양에도 제한을 설정할 수 있습니다. 세 개의 해석기가 포함된 다음 쿼리를 예로 들어 보겠습니다.

```
query MyQuery {
  resolver1: resolver
  resolver2: resolver
  resolver3: resolver
}
```

기본적으로 각 쿼리는 최대 10,000개의 해석기를 처리할 수 있습니다. 위 예시에서는 `resolver1`, `resolver2`, `resolver3`이 처리됩니다. 하지만 프로젝트에서는 각 쿼리를 총 하나 또는 두 개의 해석기를 처리하도록 제한을 요청할 수도 있습니다. 제한을 설정하면 첫 번째(`resolver1`) 또는 두 번째(`resolver2`) 해석기처럼 특정 수를 초과하는 해석기를 처리하지 않도록 쿼리에 지시할 수 있습니다.

해석기 수 제한을 추가하려면 다음 작업을 수행합니다.

1. 에 로그인 AWS Management Console 하고 [AppSync 콘솔](https://console.aws.amazon.com/appsync/)을 엽니다.

1. **API** 페이지에서 GraphQL API의 이름을 선택합니다.

1. API 홈페이지의 탐색 창에서 **설정** 을 선택합니다.

1. **API 구성**에서 **편집**을 선택합니다.

1. **해석기 수 제한**에서 다음 작업을 수행합니다.

   1. **해석기 수 활성화**를 켭니다.

   1. **최대 해석기 수**에서 개수 제한을 설정합니다. 이 값은 `1`부터 `10000` 사이일 수 있습니다.

1. **저장**을 선택합니다.

쿼리 깊이 제한과 마찬가지로 구성된 해석기 제한을 초과하면 추가 해석기에서 `ResolverExecutionLimitReached` 오류가 발생하여 쿼리가 종료됩니다. 아래 이미지에서 해석기 수 제한이 *2*인 쿼리가 세 개의 해석기를 처리하려고 합니다. 제한 때문에 세 번째 해석기에서 오류가 발생하고 실행되지 않습니다.

![\[Query with three resolvers, showing error on third resolver due to execution limit reached.\]](http://docs.aws.amazon.com/ko_kr/appsync/latest/devguide/images/resolver-count-limit.jpg)
