

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

# AWS AppSync 해석기 매핑 템플릿 유틸리티 참조
<a name="resolver-util-reference"></a>

**참고**  
이제 우리는 주로 APPSYNC\$1JS 런타임과 해당 문서를 지원합니다. [여기](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-js-version.html)에서 APPSYNC\$1JS 런타임과 해당 안내서를 사용해 보세요.

AWS AppSync는 GraphQL 해석기 내에서 데이터 소스와의 상호 작용을 간소화하는 데 사용할 수 있는 유틸리티 세트를 정의합니다. 이러한 유틸리티 중 일부는 ID 또는 타임스탬프 생성과 같이 모든 데이터 소스에서 일반적으로 사용됩니다. 다른 유틸리티는 데이터 소스 유형에 따라 다릅니다. 다음 유틸리티를 사용할 수 있습니다.
+  [ \$1util의 유틸리티 도우미 ](https://docs.aws.amazon.com/appsync/latest/devguide/utility-helpers-in-util.html) - \$1util 변수에는 데이터 작업에 도움이 되는 일반 유틸리티 메서드가 포함되어 있습니다. 달리 지정하지 않는 한, 모든 유틸리티는 UTF-8 문자 집합을 사용합니다.
+ [ AppSync 지침 ](https://docs.aws.amazon.com/appsync/latest/devguide/aws-appsync-directives.html) - AppSync는 개발자의 생산성을 높이기 위해 VTL 작성 시 지시문을 표시합니다.
+  [ \$1util.time의 시간 도우미 ](https://docs.aws.amazon.com/appsync/latest/devguide/time-helpers-in-util-time.html) - \$1util.time 변수에는 타임스탬프를 생성하고, 날짜 및 시간 형식 간에 변환하고, 날짜 및 시간 문자열을 구문 분석하는 데 도움이 되는 날짜 및 시간 메서드가 포함되어 있습니다. 날짜 및 시간 형식 구문은 [DateTimeFormatter](https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html)를 기반으로 하며, 여기서 자세한 설명을 참조할 수 있습니다.
+ [ \$1util.list의 목록 도우미 ](https://docs.aws.amazon.com/appsync/latest/devguide/list-helpers-in-util-list.html) - \$1util.list에는 사용 사례 필터링을 위해 목록에서 항목을 제거하거나 유지하는 등과 같은 일반적인 목록 작업에 유용한 메서드가 포함되어 있습니다.
+  [ \$1util.map의 맵 도우미 ](https://docs.aws.amazon.com/appsync/latest/devguide/utility-helpers-in-map.html) - \$1util.map에는 사용 사례 필터링을 위해 맵에서 항목을 제거하거나 유지하는 등과 같은 일반적인 맵 작업에 유용한 메서드가 포함되어 있습니다.
+  [ \$1util.dynamodb의 DynamoDB 도우미 ](https://docs.aws.amazon.com/appsync/latest/devguide/dynamodb-helpers-in-util-dynamodb.html) - \$1util.dynamodb에는 Amazon DynamoDB에 데이터 쓰기 및 읽기를 더 용이하게 하는 도우미 메서드가 포함되어 있습니다(예: 자동 유형 매핑 및 형식 지정).
+  [ \$1util.rds의 Amazon RDS 도우미 ](https://docs.aws.amazon.com/appsync/latest/devguide/rds-helpers-in-util-rds.html) - \$1util.rds에는 결과 출력에서 불필요한 데이터를 제거하여 RDS 작업의 형식을 지정하는 도우미 메서드가 포함되어 있습니다.
+  [ \$1util.http의 HTTP 도우미 ](https://docs.aws.amazon.com/appsync/latest/devguide/http-helpers-in-utils-http.html) - \$1util.http 유틸리티는 HTTP 요청 파라미터를 관리하고 응답 헤더를 추가하는 데 사용할 수 있는 도우미 메서드를 제공합니다.
+  [ \$1util.xml의 XML 도우미 ](https://docs.aws.amazon.com/appsync/latest/devguide/xml-helpers-in-utils-xml.html) - \$1util.xml에는 XML 응답을 JSON 또는 딕셔너리로 쉽게 변환할 수 있도록 하는 도우미 메서드가 포함되어 있습니다.
+  [ \$1util.transform의 변환 도우미 ](https://docs.aws.amazon.com/appsync/latest/devguide/transformation-helpers-in-utils-transform.html) - \$1util.transform에는 DynamoDB 필터 작업 등 데이터 소스에 대해 복잡한 작업을 더 쉽게 수행할 수 있는 도우미 메서드가 포함되어 있습니다.
+  [ \$1util.math의 수학 도우미](https://docs.aws.amazon.com/appsync/latest/devguide/math-helpers-in-util-math.html) - \$1util.math에는 일반적인 수학 작업에 도움이 되는 방법이 포함되어 있습니다.
+  [ \$1util.str의 문자열 도우미](https://docs.aws.amazon.com/appsync/latest/devguide/str-helpers-in-util-str.html) - \$1util.str에는 일반적인 문자열 작업에 도움이 되는 메서드가 포함되어 있습니다.
+  [ 확장 ](https://docs.aws.amazon.com/appsync/latest/devguide/extensions.html) - \$1extensions에는 해석기 내에서 추가 작업을 수행할 수 있는 일련의 메서드가 있습니다.

# \$1util의 유틸리티 도우미
<a name="utility-helpers-in-util"></a>

**참고**  
이제 우리는 주로 APPSYNC\$1JS 런타임과 해당 문서를 지원합니다. [여기](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-js-version.html)에서 APPSYNC\$1JS 런타임과 해당 안내서를 사용해 보세요.

`$util` 변수에는 데이터 작업에 도움이 되는 일반 유틸리티 메서드가 포함되어 있습니다. 달리 지정하지 않는 한, 모든 유틸리티는 UTF-8 문자 집합을 사용합니다.

## JSON 구문 분석 유틸리티
<a name="utility-helpers-in-json-parsing"></a>

### JSON 구문 분석 유틸리티 목록
<a name="utility-helpers-in-json-parsing-list"></a>

** **`$util.parseJson(String) : Object`** **  
‘문자열화된’ JSON을 가져와서 결과의 객체 표현을 반환합니다.

** **`$util.toJson(Object) : String`** **  
객체를 받아 해당 객체의 ‘문자열화된’ JSON 표현을 반환합니다.

## 인코딩 유틸리티
<a name="utility-helpers-in-encoding"></a>

### 인코딩 유틸리티 목록
<a name="utility-helpers-in-encoding-list"></a>

** **`$util.urlEncode(String) : String`** **  
입력 문자열을 `application/x-www-form-urlencoded` 인코딩 문자열로 반환합니다.

** **`$util.urlDecode(String) : String`** **  
`application/x-www-form-urlencoded` 인코딩 문자열을 인코딩되지 않은 형식으로 다시 디코딩합니다.

** **`$util.base64Encode( byte[] ) : String`** **  
입력을 base64 인코딩 문자열로 인코딩합니다.

** **`$util.base64Decode(String) : byte[]`** **  
데이터를 base64 인코딩 문자열에서 디코딩합니다.

## ID 생성 유틸리티
<a name="utility-helpers-in-id-gen"></a>

### ID 생성 유틸리티
<a name="utility-helpers-in-id-gen-list"></a>

** **`$util.autoId() : String`** **  
임의로 생성된 128비트 UUID를 반환합니다.

****`$util.autoUlid() : String`****  
무작위로 생성된 128비트 ULID(Universally Unique Lexicographically Sortable Identifier)를 반환합니다.

****`$util.autoKsuid() : String`****  
길이가 27인 문자열로 인코딩된 무작위로 생성된 128비트 KSUID(K-Sortable Unique Identifier) base62를 반환합니다.

## 오류 유틸리티
<a name="utility-helpers-in-error"></a>

### 오류 유틸리티 목록
<a name="utility-helpers-in-error-list"></a>

** `$util.error(String)` **  
사용자 지정 오류를 발생시킵니다. 요청 또는 응답 매핑 템플릿에서 사용하여 요청 또는 호출 결과와 관련된 오류를 감지할 수 있습니다.

** `$util.error(String, String)` **  
사용자 지정 오류를 발생시킵니다. 요청 또는 응답 매핑 템플릿에서 사용하여 요청 또는 호출 결과와 관련된 오류를 감지할 수 있습니다. `errorType`도 지정할 수 있습니다.

** `$util.error(String, String, Object)` **  
사용자 지정 오류를 발생시킵니다. 요청 또는 응답 매핑 템플릿에서 사용하여 요청 또는 호출 결과와 관련된 오류를 감지할 수 있습니다. `errorType` 및 `data` 필드를 지정할 수도 있습니다. GraphQL 응답에서 `data` 값은 `error` 내 해당 `errors` 블록에 추가됩니다.  
참고: `data`는 쿼리 선택 세트를 기반으로 필터링됩니다.

** `$util.error(String, String, Object, Object)` **  
사용자 지정 오류를 발생시킵니다. 이 필드는 요청 또는 응답 매핑 템플릿에서 템플릿이 요청 또는 호출 결과와 관련된 오류를 감지하는 경우 사용할 수 있습니다. 또한 `errorType`, `data` 및 `errorInfo` 필드를 지정할 수 있습니다. GraphQL 응답에서 `data` 값은 `error` 내 해당 `errors` 블록에 추가됩니다.  
참고: `data`는 쿼리 선택 세트를 기반으로 필터링됩니다. GraphQL 응답에서 `errorInfo` 값은 `error` 내 해당 `errors` 블록에 추가됩니다.  
`errorInfo`는 쿼리 선택 세트를 기반으로 필터링되지 **않습니다**.

** `$util.appendError(String)` **  
사용자 지정 오류를 추가합니다. 이 필드는 요청 또는 응답 매핑 템플릿에서 템플릿이 요청 또는 호출 결과와 관련된 오류를 감지하는 경우 사용할 수 있습니다. `$util.error(String)`와 달리 템플릿 평가가 중단되지 않기 때문에 데이터를 호출자에게 반환할 수 있습니다.

** `$util.appendError(String, String)` **  
사용자 지정 오류를 추가합니다. 이 필드는 요청 또는 응답 매핑 템플릿에서 템플릿이 요청 또는 호출 결과와 관련된 오류를 감지하는 경우 사용할 수 있습니다. 또한 `errorType`을 지정할 수 있습니다. `$util.error(String, String)`와 달리 템플릿 평가가 중단되지 않기 때문에 데이터를 호출자에게 반환할 수 있습니다.

** `$util.appendError(String, String, Object)` **  
사용자 지정 오류를 추가합니다. 이 필드는 요청 또는 응답 매핑 템플릿에서 템플릿이 요청 또는 호출 결과와 관련된 오류를 감지하는 경우 사용할 수 있습니다. 또한 `errorType`과 `data` 필드를 지정할 수 있습니다. `$util.error(String, String, Object)`와 달리 템플릿 평가가 중단되지 않기 때문에 데이터를 호출자에게 반환할 수 있습니다. GraphQL 응답에서 `data` 값은 `error` 내 해당 `errors` 블록에 추가됩니다.  
참고: `data`는 쿼리 선택 세트를 기반으로 필터링됩니다.

** `$util.appendError(String, String, Object, Object)` **  
사용자 지정 오류를 추가합니다. 이 필드는 요청 또는 응답 매핑 템플릿에서 템플릿이 요청 또는 호출 결과와 관련된 오류를 감지하는 경우 사용할 수 있습니다. 또한 `errorType`, `data` 및 `errorInfo` 필드를 지정할 수 있습니다. `$util.error(String, String, Object, Object)`와 달리 템플릿 평가가 중단되지 않기 때문에 데이터를 호출자에게 반환할 수 있습니다. GraphQL 응답에서 `data` 값은 `error` 내 해당 `errors` 블록에 추가됩니다.  
참고: `data`는 쿼리 선택 세트를 기반으로 필터링됩니다. GraphQL 응답에서 `errorInfo` 값은 `error` 내 해당 `errors` 블록에 추가됩니다.  
`errorInfo`는 쿼리 선택 세트를 기반으로 필터링되지 **않습니다**.

## 조건 검증 유틸리티
<a name="utility-helpers-in-condition"></a>

### 조건 검증 유틸리티 목록
<a name="utility-helpers-in-condition-list"></a>

** `$util.validate(Boolean, String) : void` **  
조건이 false이면 지정된 메시지와 함께 CustomTemplateException이 발생합니다.

** `$util.validate(Boolean, String, String) : void` **  
조건이 false이면 지정된 메시지 및 오류 유형과 함께 CustomTemplateException이 발생합니다.

** `$util.validate(Boolean, String, String, Object) : void` **  
조건이 false이면 지정된 메시지 및 오류 유형 그리고 응답에서 반환할 데이터와 함께 CustomTemplateException이 발생합니다.

## Null 동작 유틸리티
<a name="utility-helpers-in-null-behavior"></a>

### Null 동작 유틸리티 목록
<a name="utility-helpers-in-null-behavior-list"></a>

** `$util.isNull(Object) : Boolean` **  
제공되는 객체가 null이면 true를 반환합니다.

** `$util.isNullOrEmpty(String) : Boolean` **  
제공되는 데이터가 null이거나 빈 문자열이면 true를 반환합니다. 그렇지 않을 경우 false를 반환합니다.

** `$util.isNullOrBlank(String) : Boolean` **  
제공되는 데이터가 null이거나 빈 문자열이면 true를 반환합니다. 그렇지 않을 경우 false를 반환합니다.

** `$util.defaultIfNull(Object, Object) : Object` **  
첫 번째 객체가 null이 아니면 첫 번째 객체를 반환합니다. 그렇지 않은 경우 두 번째 객체를 ‘기본 객체’로 반환합니다.

** `$util.defaultIfNullOrEmpty(String, String) : String` **  
첫 번째 문자열이 null이 아니거나 비어 있지 않으면 첫 번째 문자열을 반환합니다. 그렇지 않은 경우 두 번째 문자열을 ‘기본 문자열’로 반환합니다.

** `$util.defaultIfNullOrBlank(String, String) : String` **  
첫 번째 문자열이 null이 아니거나 공백이 아니면 첫 번째 문자열을 반환합니다. 그렇지 않은 경우 두 번째 문자열을 ‘기본 문자열’로 반환합니다.

## 패턴 매칭 유틸리티
<a name="utility-helpers-in-pattern-matching"></a>

### 유형 및 패턴 매칭 유틸리티 목록
<a name="utility-helpers-in-type-pattern-matching-list"></a>

** `$util.typeOf(Object) : String` **  
객체 유형을 설명하는 문자열을 반환합니다. 지원되는 유형 식별은 ‘Null’, ‘숫자’, ‘문자열’, ‘맵’, ‘목록’, ‘부울’입니다. 유형을 식별할 수 없는 경우 반환 유형은 ‘객체’입니다.

** `$util.matches(String, String) : Boolean` **  
첫 번째 인수의 지정된 패턴이 두 번째 인수에서 제공되는 데이터와 일치하는 경우 true를 반환합니다. 패턴은 `$util.matches("a*b", "aaaaab")` 등과 같은 정규식이어야 합니다. 이 기능은 [Pattern](https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html)을 기반으로 하며, 여기서 자세한 설명을 참조할 수 있습니다.

** `$util.authType() : String` **  
요청에 사용되는 다중 인증 유형을 설명하는 문자열을 반환하고 'IAM 권한 부여', '사용자 풀 권한 부여', 'Open ID Connect 권한 부여' 또는 'API 키 인증'을 반환합니다.

## 객체 검증 유틸리티
<a name="utility-helpers-in-object-validation"></a>

### 객체 검증 유틸리티 목록
<a name="utility-helpers-in-object-validation-list"></a>

** `$util.isString(Object) : Boolean` **  
객체가 문자열인 경우 true를 반환합니다.

** `$util.isNumber(Object) : Boolean` **  
객체가 숫자인 경우 true를 반환합니다.

** `$util.isBoolean(Object) : Boolean` **  
객체가 부울인 경우 true를 반환합니다.

** `$util.isList(Object) : Boolean` **  
객체가 목록인 경우 true를 반환합니다.

** `$util.isMap(Object) : Boolean` **  
객체가 맵인 경우 true를 반환합니다.

## CloudWatch 로깅 유틸리티
<a name="utility-helpers-in-logging"></a>

### CloudWatch 로깅 유틸리티 목록
<a name="utility-helpers-in-cloudwatch-logs"></a>

**`$util.log.info(Object) : Void`**  
API에서 로그 수준 `ALL`, `INFO` 또는 `DEBUG`로 요청 수준 및 필드 수준 CloudWatch 로깅이 활성화된 경우 제공된 객체의 문자열 표현을 요청된 로그 스트림에 기록합니다.

**`$util.log.info(String, Object...) : Void`**  
API에서 로그 수준 `ALL`로 요청 수준 및 필드 수준 CloudWatch 로깅이 활성화된 경우 제공된 객체의 문자열 표현을 요청된 로그 스트림에 기록합니다. 이 유틸리티는 첫 번째 입력 형식 문자열에서 '\$1\$1'로 표시된 모든 변수를 제공된 객체의 문자열 표현으로 순서대로 바꿉니다.

**`$util.log.debug(Object) : Void`**  
API에서 로그 수준 `ALL` 또는 `DEBUG`로 요청 수준 및 필드 수준 CloudWatch 로깅이 활성화된 경우 제공된 객체의 문자열 표현을 요청된 로그 스트림에 기록합니다.

**`$util.log.debug(String, Object...) : Void`**  
API에서 로그 수준 `DEBUG` 또는 로그 수준 `ALL`로 필드 수준 CloudWatch 로깅이 활성화된 경우 제공된 객체의 문자열 표현을 요청된 로그 스트림에 기록합니다. 이 유틸리티는 첫 번째 입력 형식 문자열에서 '\$1\$1'로 표시된 모든 변수를 제공된 객체의 문자열 표현으로 순서대로 바꿉니다.

**`$util.log.error(Object) : Void`**  
API에서 로그 수준(`ALL`, `INFO`, `DEBUG` 등)으로 필드 수준 CloudWatch 로깅이 활성화된 경우 제공된 객체의 문자열 표현을 요청된 로그 스트림에 기록합니다.

**`$util.log.error(String, Object...) : Void`**  
API에서 로그 수준 `ERROR` 또는 로그 수준 `ALL`로 필드 수준 CloudWatch 로깅이 활성화된 경우 제공된 객체의 문자열 표현을 요청된 로그 스트림에 기록합니다. 이 유틸리티는 첫 번째 입력 형식 문자열에서 '\$1\$1'로 표시된 모든 변수를 제공된 객체의 문자열 표현으로 순서대로 바꿉니다.

## 반환 값 동작 유틸리티
<a name="utility-helpers-in-return-behavior"></a>

### 반환 값 동작 유틸리티 목록
<a name="utility-helpers-in-behavior-list"></a>

****`$util.qr()`** 및 `$util.quiet()` **  
반환된 값을 제한하면서 VTL 문을 실행합니다. 이는 맵에 항목 추가와 같이 임시 자리 표시자를 사용하지 않고 메서드를 실행하고자 하는 경우 유용합니다. 예제:  

```
#set ($myMap = {})
#set($discard = $myMap.put("id", "first value"))
```
Becomes:  

```
#set ($myMap = {})
$util.qr($myMap.put("id", "first value"))
```  
** `$util.escapeJavaScript(String) : String` **  
입력 문자열을 JavaScript 의 이스케이프된 문자열로 반환합니다.  
** `$util.urlEncode(String) : String` **  
입력 문자열을 `application/x-www-form-urlencoded` 인코딩 문자열로 반환합니다.  
** `$util.urlDecode(String) : String` **  
`application/x-www-form-urlencoded` 인코딩 문자열을 인코딩되지 않은 형식으로 다시 디코딩합니다.  
** `$util.base64Encode( byte[] ) : String` **  
입력을 base64 인코딩 문자열로 인코딩합니다.  
** `$util.base64Decode(String) : byte[]` **  
데이터를 base64 인코딩 문자열에서 디코딩합니다.  
** `$util.parseJson(String) : Object` **  
‘문자열화된’ JSON을 가져와서 결과의 객체 표현을 반환합니다.  
** `$util.toJson(Object) : String` **  
객체를 받아 해당 객체의 ‘문자열화된’ JSON 표현을 반환합니다.  
** `$util.autoId() : String` **  
임의로 생성된 128비트 UUID를 반환합니다.  
****`$util.autoUlid() : String`****  
무작위로 생성된 128비트 ULID(Universally Unique Lexicographically Sortable Identifier)를 반환합니다.  
****`$util.autoKsuid() : String`****  
길이가 27인 문자열로 인코딩된 무작위로 생성된 128비트 KSUID(K-Sortable Unique Identifier) base62를 반환합니다.  
** `$util.unauthorized()` **  
해석 중인 필드에 대해 `Unauthorized`를 발생시킵니다. 요청 또는 응답 매핑 템플릿에서 이를 사용하여 호출자가 필드를 확인하도록 허용할지 여부를 결정합니다.  
** `$util.error(String)` **  
사용자 지정 오류를 발생시킵니다. 요청 또는 응답 매핑 템플릿에서 사용하여 요청 또는 호출 결과와 관련된 오류를 감지할 수 있습니다.  
** `$util.error(String, String)` **  
사용자 지정 오류를 발생시킵니다. 요청 또는 응답 매핑 템플릿에서 사용하여 요청 또는 호출 결과와 관련된 오류를 감지할 수 있습니다. `errorType`도 지정할 수 있습니다.  
** `$util.error(String, String, Object)` **  
사용자 지정 오류를 발생시킵니다. 요청 또는 응답 매핑 템플릿에서 사용하여 요청 또는 호출 결과와 관련된 오류를 감지할 수 있습니다. `errorType` 및 `data` 필드를 지정할 수도 있습니다. GraphQL 응답에서 `data` 값은 `error` 내 해당 `errors` 블록에 추가됩니다. **참고**: `data`는 쿼리 선택 세트를 기반으로 필터링됩니다.  
** `$util.error(String, String, Object, Object)` **  
사용자 지정 오류를 발생시킵니다. 이 필드는 요청 또는 응답 매핑 템플릿에서 템플릿이 요청 또는 호출 결과와 관련된 오류를 감지하는 경우 사용할 수 있습니다. 또한 `errorType`, `data` 및 `errorInfo` 필드를 지정할 수 있습니다. GraphQL 응답에서 `data` 값은 `error` 내 해당 `errors` 블록에 추가됩니다. **참고**: `data`는 쿼리 선택 세트를 기반으로 필터링됩니다. GraphQL 응답에서 `errorInfo` 값은 `error` 내 해당 `errors` 블록에 추가됩니다. **참고**: `errorInfo`는 쿼리 선택 세트를 기반으로 필터링되지 **않습니다**.  
** `$util.appendError(String)` **  
사용자 지정 오류를 추가합니다. 이 필드는 요청 또는 응답 매핑 템플릿에서 템플릿이 요청 또는 호출 결과와 관련된 오류를 감지하는 경우 사용할 수 있습니다. `$util.error(String)`와 달리 템플릿 평가가 중단되지 않기 때문에 데이터를 호출자에게 반환할 수 있습니다.  
** `$util.appendError(String, String)` **  
사용자 지정 오류를 추가합니다. 이 필드는 요청 또는 응답 매핑 템플릿에서 템플릿이 요청 또는 호출 결과와 관련된 오류를 감지하는 경우 사용할 수 있습니다. 또한 `errorType`을 지정할 수 있습니다. `$util.error(String, String)`와 달리 템플릿 평가가 중단되지 않기 때문에 데이터를 호출자에게 반환할 수 있습니다.  
** `$util.appendError(String, String, Object)` **  
사용자 지정 오류를 추가합니다. 이 필드는 요청 또는 응답 매핑 템플릿에서 템플릿이 요청 또는 호출 결과와 관련된 오류를 감지하는 경우 사용할 수 있습니다. 또한 `errorType`과 `data` 필드를 지정할 수 있습니다. `$util.error(String, String, Object)`와 달리 템플릿 평가가 중단되지 않기 때문에 데이터를 호출자에게 반환할 수 있습니다. GraphQL 응답에서 `data` 값은 `error` 내 해당 `errors` 블록에 추가됩니다. **참고**: `data`는 쿼리 선택 세트를 기반으로 필터링됩니다.  
** `$util.appendError(String, String, Object, Object)` **  
사용자 지정 오류를 추가합니다. 이 필드는 요청 또는 응답 매핑 템플릿에서 템플릿이 요청 또는 호출 결과와 관련된 오류를 감지하는 경우 사용할 수 있습니다. 또한 `errorType`, `data` 및 `errorInfo` 필드를 지정할 수 있습니다. `$util.error(String, String, Object, Object)`와 달리 템플릿 평가가 중단되지 않기 때문에 데이터를 호출자에게 반환할 수 있습니다. GraphQL 응답에서 `data` 값은 `error` 내 해당 `errors` 블록에 추가됩니다. **참고**: `data`는 쿼리 선택 세트를 기반으로 필터링됩니다. GraphQL 응답에서 `errorInfo` 값은 `error` 내 해당 `errors` 블록에 추가됩니다. **참고**: `errorInfo`는 쿼리 선택 세트를 기반으로 필터링되지 **않습니다**.  
** `$util.validate(Boolean, String) : void` **  
조건이 false이면 지정된 메시지와 함께 CustomTemplateException이 발생합니다.  
** `$util.validate(Boolean, String, String) : void` **  
조건이 false이면 지정된 메시지 및 오류 유형과 함께 CustomTemplateException이 발생합니다.  
** `$util.validate(Boolean, String, String, Object) : void` **  
조건이 false이면 지정된 메시지 및 오류 유형 그리고 응답에서 반환할 데이터와 함께 CustomTemplateException이 발생합니다.  
** `$util.isNull(Object) : Boolean` **  
제공되는 객체가 null이면 true를 반환합니다.  
** `$util.isNullOrEmpty(String) : Boolean` **  
제공되는 데이터가 null이거나 빈 문자열이면 true를 반환합니다. 그렇지 않을 경우 false를 반환합니다.  
** `$util.isNullOrBlank(String) : Boolean` **  
제공되는 데이터가 null이거나 빈 문자열이면 true를 반환합니다. 그렇지 않을 경우 false를 반환합니다.  
** `$util.defaultIfNull(Object, Object) : Object` **  
첫 번째 객체가 null이 아니면 첫 번째 객체를 반환합니다. 그렇지 않은 경우 두 번째 객체를 ‘기본 객체’로 반환합니다.  
** `$util.defaultIfNullOrEmpty(String, String) : String` **  
첫 번째 문자열이 null이 아니거나 비어 있지 않으면 첫 번째 문자열을 반환합니다. 그렇지 않은 경우 두 번째 문자열을 ‘기본 문자열’로 반환합니다.  
** `$util.defaultIfNullOrBlank(String, String) : String` **  
첫 번째 문자열이 null이 아니거나 공백이 아니면 첫 번째 문자열을 반환합니다. 그렇지 않은 경우 두 번째 문자열을 ‘기본 문자열’로 반환합니다.  
** `$util.isString(Object) : Boolean` **  
객체가 문자열인 경우 true를 반환합니다.  
** `$util.isNumber(Object) : Boolean` **  
객체가 숫자인 경우 true를 반환합니다.  
** `$util.isBoolean(Object) : Boolean` **  
객체가 부울인 경우 true를 반환합니다.  
** `$util.isList(Object) : Boolean` **  
객체가 목록인 경우 true를 반환합니다.  
** `$util.isMap(Object) : Boolean` **  
객체가 맵인 경우 true를 반환합니다.  
** `$util.typeOf(Object) : String` **  
객체 유형을 설명하는 문자열을 반환합니다. 지원되는 유형 식별은 ‘Null’, ‘숫자’, ‘문자열’, ‘맵’, ‘목록’, ‘부울’입니다. 유형을 식별할 수 없는 경우 반환 유형은 ‘객체’입니다.  
** `$util.matches(String, String) : Boolean` **  
첫 번째 인수의 지정된 패턴이 두 번째 인수에서 제공되는 데이터와 일치하는 경우 true를 반환합니다. 패턴은 `$util.matches("a*b", "aaaaab")` 등과 같은 정규식이어야 합니다. 이 기능은 [Pattern](https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html)을 기반으로 하며, 여기서 자세한 설명을 참조할 수 있습니다.  
** `$util.authType() : String` **  
요청에 사용되는 다중 인증 유형을 설명하는 문자열을 반환하고 'IAM 권한 부여', '사용자 풀 권한 부여', 'Open ID Connect 권한 부여' 또는 'API 키 인증'을 반환합니다.  
****`$util.log.info(Object) : Void`****  
API에서 로그 수준 `ALL`로 요청 수준 및 필드 수준 CloudWatch 로깅이 활성화된 경우 제공된 객체의 문자열 표현을 요청된 로그 스트림에 기록합니다.  
****`$util.log.info(String, Object...) : Void`****  
API에서 로그 수준 `ALL`로 요청 수준 및 필드 수준 CloudWatch 로깅이 활성화된 경우 제공된 객체의 문자열 표현을 요청된 로그 스트림에 기록합니다. 이 유틸리티는 첫 번째 입력 형식 문자열에서 '\$1\$1'로 표시된 모든 변수를 제공된 객체의 문자열 표현으로 순서대로 바꿉니다.  
****`$util.log.error(Object) : Void`****  
API에서 로그 수준 `ERROR` 또는 로그 수준 `ALL`로 필드 수준 CloudWatch 로깅이 활성화된 경우 제공된 객체의 문자열 표현을 요청된 로그 스트림에 기록합니다.  
****`$util.log.error(String, Object...) : Void`****  
API에서 로그 수준 `ERROR` 또는 로그 수준 `ALL`로 필드 수준 CloudWatch 로깅이 활성화된 경우 제공된 객체의 문자열 표현을 요청된 로그 스트림에 기록합니다. 이 유틸리티는 첫 번째 입력 형식 문자열에서 '\$1\$1'로 표시된 모든 변수를 제공된 객체의 문자열 표현으로 순서대로 바꿉니다.

** `$util.escapeJavaScript(String) : String` **  
입력 문자열을 JavaScript 의 이스케이프된 문자열로 반환합니다.

## 해석기 권한 부여
<a name="utility-helpers-in-resolver-auth"></a>

### 해석기 권한 부여 목록
<a name="utility-helpers-in-resolver-auth-list"></a>

** `$util.unauthorized()` **  
해석 중인 필드에 대해 `Unauthorized`를 발생시킵니다. 요청 또는 응답 매핑 템플릿에서 이를 사용하여 호출자가 필드를 확인하도록 허용할지 여부를 결정합니다.

# AWS AppSync 지시문
<a name="aws-appsync-directives"></a>

**참고**  
이제 우리는 주로 APPSYNC\$1JS 런타임과 해당 문서를 지원합니다. [여기](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-js-version.html)에서 APPSYNC\$1JS 런타임과 해당 안내서를 사용해 보세요.

AWS AppSync는 VTL로 작성할 때 개발자 생산성을 높이기 위해 지시문을 노출합니다.

## 지시문 유틸리티
<a name="utility-helpers-in-directives"></a>

****`#return(Object)`****  
`#return(Object)`를 사용하면 모든 매핑 템플릿에서 조기에 돌아올 수 있습니다. `#return(Object)`는 가장 가까운 범위의 로직 블록에서 반환된다는 점에서 프로그래밍 언어의 *return* 키워드와 유사합니다. 해석기 매핑 템플릿 내에서 `#return(Object)`를 사용하면 해석기에서 반환함을 의미합니다. 또는 함수 매핑 템플릿의 `#return(Object)`를 사용하면 함수에서 반환하고, 파이프라인의 다음 함수 또는 해석기 응답 매핑 템플릿으로 실행합니다.

****`#return`****  
`#return` 지시문은 `#return(Object)`와 동일한 동작을 나타내지만 `null`이 대신 반환됩니다.

# \$1util.time의 시간 도우미
<a name="time-helpers-in-util-time"></a>

**참고**  
이제 우리는 주로 APPSYNC\$1JS 런타임과 해당 문서를 지원합니다. [여기](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-js-version.html)에서 APPSYNC\$1JS 런타임과 해당 안내서를 사용해 보세요.

`$util.time` 변수에는 타임스탬프를 생성하고, 날짜 및 시간 형식 간에 변환하고, 날짜 및 시간 문자열을 구문 분석하는 데 도움이 되는 날짜 및 시간 메서드가 포함되어 있습니다. 날짜 및 시간 형식 구문은 [DateTimeFormatter](https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html)를 기반으로 하며, 여기서 자세한 설명을 참조할 수 있습니다. 아래에서는 몇 가지 예와 사용 가능한 메서드 목록 및 설명을 제공합니다.

## 시간 유틸리티
<a name="utility-helpers-in-time"></a>

### 시간 유틸리티 목록
<a name="utility-helpers-in-time-list"></a>

** `$util.time.nowISO8601() : String` **  
UTC의 문자열 표현을 [ISO8601 형식](https://en.wikipedia.org/wiki/ISO_8601)으로 반환합니다.

** `$util.time.nowEpochSeconds() : long` **  
1970-01-01T00:00:00Z의 epoch부터 지금까지의 시간을 초로 반환합니다.

** `$util.time.nowEpochMilliSeconds() : long` **  
1970-01-01T00:00:00Z의 epoch부터 지금까지의 시간을 밀리초로 반환합니다.

** `$util.time.nowFormatted(String) : String` **  
문자열 입력 유형의 지정된 형식을 사용하여 현재 타임스탬프의 문자열을 UTC로 반환합니다.

** `$util.time.nowFormatted(String, String) : String` **  
문자열 입력 유형의 지정된 형식 및 시간대를 사용하여 시간대의 현재 타임스탬프 문자열을 반환합니다.

** `$util.time.parseFormattedToEpochMilliSeconds(String, String) : Long` **  
형식 및 시간대를 포함한 문자열로 전달된 타임스탬프를 구문 분석하고 에포크 이후 타임스탬프를 밀리초로 반환합니다.

** `$util.time.parseFormattedToEpochMilliSeconds(String, String, String) : Long` **  
형식 및 시간대와 함께 문자열로 전달된 타임스탬프를 구문 분석하고 epoch 이후 타임스탬프를 밀리초로 반환합니다.

** `$util.time.parseISO8601ToEpochMilliSeconds(String) : Long` **  
문자열로 전달된 ISO8601 타임스탬프를 구문 분석하고 epoch 이후 타임스탬프를 밀리초로 반환합니다.

** `$util.time.epochMilliSecondsToSeconds(long) : long` **  
epoch 밀리초 타임스탬프를 epoch 초 타임스탬프로 변환합니다.

** `$util.time.epochMilliSecondsToISO8601(long) : String` **  
epoch 밀리초 타임스탬프를 ISO8601 타임스탬프로 변환합니다.

** `$util.time.epochMilliSecondsToFormatted(long, String) : String` **  
long으로 전달된 epoch 밀리초 타임스탬프를 UTC의 제공된 형식에 따라 형식이 지정된 타임스탬프로 변환합니다.

** `$util.time.epochMilliSecondsToFormatted(long, String, String) : String` **  
long으로 전달된 epoch 밀리초 타임스탬프를 제공된 시간대의 제공된 형식에 따라 형식이 지정된 타임스탬프로 변환합니다.

## 독립 실행형 함수 예제
<a name="standalone-function-examples"></a>

```
$util.time.nowISO8601()                                            : 2018-02-06T19:01:35.749Z
$util.time.nowEpochSeconds()                                       : 1517943695
$util.time.nowEpochMilliSeconds()                                  : 1517943695750
$util.time.nowFormatted("yyyy-MM-dd HH:mm:ssZ")                    : 2018-02-06 19:01:35+0000
$util.time.nowFormatted("yyyy-MM-dd HH:mm:ssZ", "+08:00")          : 2018-02-07 03:01:35+0800
$util.time.nowFormatted("yyyy-MM-dd HH:mm:ssZ", "Australia/Perth") : 2018-02-07 03:01:35+0800
```

## 변환 예제
<a name="conversion-examples"></a>

```
#set( $nowEpochMillis = 1517943695758 )
$util.time.epochMilliSecondsToSeconds($nowEpochMillis)                                     : 1517943695
$util.time.epochMilliSecondsToISO8601($nowEpochMillis)                                     : 2018-02-06T19:01:35.758Z
$util.time.epochMilliSecondsToFormatted($nowEpochMillis, "yyyy-MM-dd HH:mm:ssZ")           : 2018-02-06 19:01:35+0000
$util.time.epochMilliSecondsToFormatted($nowEpochMillis, "yyyy-MM-dd HH:mm:ssZ", "+08:00") : 2018-02-07 03:01:35+0800
```

## 구문 분석 예제
<a name="parsing-examples"></a>

```
$util.time.parseISO8601ToEpochMilliSeconds("2018-02-01T17:21:05.180+08:00")                          : 1517476865180
$util.time.parseFormattedToEpochMilliSeconds("2018-02-02 01:19:22+0800", "yyyy-MM-dd HH:mm:ssZ")     : 1517505562000
$util.time.parseFormattedToEpochMilliSeconds("2018-02-02 01:19:22", "yyyy-MM-dd HH:mm:ss", "+08:00") : 1517505562000
```

## AWS AppSync 정의된 스칼라 사용
<a name="usage-with-aws-scalars"></a>

다음 형식은 `AWSDate`, `AWSDateTime` 및 `AWSTime`과 호환됩니다.

```
$util.time.nowFormatted("yyyy-MM-dd[XXX]", "-07:00:30")               : 2018-07-11-07:00
$util.time.nowFormatted("yyyy-MM-dd'T'HH:mm:ss[XXXXX]", "-07:00:30")  : 2018-07-11T15:14:15-07:00:30
```

# \$1util.list의 목록 도우미
<a name="list-helpers-in-util-list"></a>

**참고**  
이제 우리는 주로 APPSYNC\$1JS 런타임과 해당 문서를 지원합니다. [여기](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-js-version.html)에서 APPSYNC\$1JS 런타임과 해당 안내서를 사용해 보세요.

`$util.list`에는 사용 사례 필터링을 위해 목록에서 항목을 제거하거나 유지하는 등과 같은 일반적인 목록 작업에 유용한 메서드가 포함되어 있습니다.

## 목록 유틸리티
<a name="utility-helpers-in-list-utils"></a>

** `$util.list.copyAndRetainAll(List, List) : List` **  
첫 번째 인수에 제공된 목록의 단순 복사본을 생성하고 두 번째 인수에 지정된 항목(있는 경우)만 유지합니다. 기타 모든 항목은 이 복사본에서 제거됩니다.

** `$util.list.copyAndRemoveAll(List, List) : List` **  
첫 번째 인수에 제공된 목록의 단순 복사본을 생성하고 두 번째 인수에 지정된 항목(있는 경우)만 제거합니다. 기타 모든 항목은 이 복사본에 보유됩니다.

** `$util.list.sortList(List, Boolean, String) : List` **  
첫 번째 인수에 제공된 객체 목록을 정렬합니다. 두 번째 인수가 true인 경우 목록은 내림차순으로 정렬되고, 두 번째 인수가 false인 경우 목록은 오름차순으로 정렬됩니다. 세 번째 인수는 사용자 지정 객체 목록을 정렬하는 데 사용되는 속성의 문자열 이름입니다. 문자열, 정수, 부동 소수점 또는 배수인 경우 세 번째 인수는 임의의 문자열일 수 있습니다. 모든 객체가 같은 클래스에 속하지 않는 경우 원래 목록이 반환됩니다. 최대 1000개의 객체를 포함하는 목록만 지원됩니다. 다음은 이 유틸리티 사용 예제입니다.  

```
 INPUT:      $util.list.sortList([{"description":"youngest", "age":5},{"description":"middle", "age":45}, {"description":"oldest", "age":85}], false, "description")
 OUTPUT:     [{"description":"middle", "age":45}, {"description":"oldest", "age":85}, {"description":"youngest", "age":5}]
```

# \$1util.map의 맵 도우미
<a name="utility-helpers-in-map"></a>

**참고**  
이제 우리는 주로 APPSYNC\$1JS 런타임과 해당 문서를 지원합니다. [여기](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-js-version.html)에서 APPSYNC\$1JS 런타임과 해당 안내서를 사용해 보세요.

 `$util.map`에는 사용 사례 필터링을 위해 맵에서 항목을 제거하거나 유지하는 등과 같은 일반적인 맵 작업에 유용한 메서드가 포함되어 있습니다.

## 맵 유틸리티
<a name="utility-helpers-in-map-list"></a>

** `$util.map.copyAndRetainAllKeys(Map, List) : Map` **  
첫 번째 맵의 단순 복사본을 생성하고 목록에 지정된 키(있는 경우)만 유지합니다. 기타 모든 키는 이 복사본에서 제거됩니다.

** `$util.map.copyAndRemoveAllKeys(Map, List) : Map` **  
첫 번째 맵의 단순 복사본을 생성하고 목록에서 키가 지정된 항목(있는 경우)을 제거합니다. 기타 모든 키는 이 복사본에 보유됩니다.

# \$1util.dynamodb의 DynamoDB 도우미
<a name="dynamodb-helpers-in-util-dynamodb"></a>

**참고**  
이제 우리는 주로 APPSYNC\$1JS 런타임과 해당 문서를 지원합니다. [여기](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-js-version.html)에서 APPSYNC\$1JS 런타임과 해당 안내서를 사용해 보세요.

`$util.dynamodb`에는 Amazon DynamoDB에 데이터 쓰기 및 읽기를 더 용이하게 하는 도우미 메서드가 포함되어 있습니다(예: 자동 유형 매핑 및 형식 지정). 이러한 메서드는 기본 유형 및 목록을 적절한 DynamoDB 입력 형식(`{ "TYPE" : VALUE }` 형식의 `Map`)에 자동으로 매핑하도록 설계되어 있습니다.

예를 들어, 이전에는 DynamoDB에서 새 항목을 생성하는 요청 매핑 템플릿은 다음과 같았습니다.

```
{
    "version" : "2017-02-28",
    "operation" : "PutItem",
    "key": {
        "id" : { "S" : "$util.autoId()" }
    },
    "attributeValues" : {
         "title" : { "S" : $util.toJson($ctx.args.title) },
         "author" : { "S" : $util.toJson($ctx.args.author) },
         "version" : { "N", $util.toJson($ctx.args.version) }
    }
}
```

객체에 필드를 추가하려는 경우 스키마에서 GraphQL 쿼리를 업데이트하고 요청 매핑 템플릿도 업데이트해야 했습니다. 그러나 이제는 스키마에 추가되는 새 필드를 자동으로 선택해 올바른 형식으로 DynamoDB에 추가하도록 요청 매핑 템플릿을 재구성할 수 있습니다.

```
{
    "version" : "2017-02-28",
    "operation" : "PutItem",
    "key": {
        "id" : $util.dynamodb.toDynamoDBJson($util.autoId())
    },
    "attributeValues" : $util.dynamodb.toMapValuesJson($ctx.args)
}
```

이전 예에서는 `$util.dynamodb.toDynamoDBJson(...)` 도우미를 사용하여 생성된 ID를 자동으로 받아 문자열 속성의 DynamoDB 표현으로 변환했습니다. 그런 다음 모든 인수를 받아 DynamoDB 표현으로 변환하고 템플릿의 `attributeValues` 필드에 출력했습니다.

각 도우미에는 객체(예: `$util.dynamodb.toString(...)`)를 반환하는 버전과 객체를 JSON 문자열(예: `$util.dynamodb.toStringJson(...)`)로 반환하는 버전 두 가지가 있습니다. 이전 예에서는 데이터를 JSON 문자열로 반환하는 버전을 사용했습니다. 템플릿에 사용하기 전에 객체를 조작하려는 경우 다음과 같이 대신 객체를 반환하도록 선택할 수 있습니다.

```
{
    "version" : "2017-02-28",
    "operation" : "PutItem",
    "key": {
        "id" : $util.dynamodb.toDynamoDBJson($util.autoId())
    },

    #set( $myFoo = $util.dynamodb.toMapValues($ctx.args) )
    #set( $myFoo.version = $util.dynamodb.toNumber(1) )
    #set( $myFoo.timestamp = $util.dynamodb.toString($util.time.nowISO8601()))

    "attributeValues" : $util.toJson($myFoo)
}
```

이전 예에서는 최종적으로 `version`을 사용하여 템플릿의 `timestamp` 필드에 출력하기 전에 JSON 문자열 대신 맵으로 변환된 인수를 반환한 다음 `attributeValues` 및 `$util.toJson(...)` 필드에 추가합니다.

각 도우미의 JSON 버전은 `$util.toJson(...)`에서 JSON 이외 버전을 래핑하는 것과 동일합니다. 예를 들어 다음 문은 정확하게 동일합니다.

```
$util.toStringJson("Hello, World!")
$util.toJson($util.toString("Hello, World!"))
```

## toDynamoDB
<a name="utility-helpers-in-toDynamoDB"></a>

### toDynamoDB 유틸리티 목록
<a name="utility-helpers-in-toDynamoDB-list"></a>

** `$util.dynamodb.toDynamoDB(Object) : Map` **  
입력 객체를 적절한 DynamoDB 표현으로 변환하는 DynamoDB용 일반 객체 변환 도구입니다. 이 도구는 몇 가지 형식을 표현하는 방법에 대해 독자적인 방식을 가지고 있습니다. 예를 들어 집합(‘SS’, ‘NS’, ‘BS’)보다는 목록(‘L’)을 사용합니다. DynamoDB 속성 값을 설명하는 객체를 반환합니다.  
**문자열 예제**  

```
Input:      $util.dynamodb.toDynamoDB("foo")
Output:     { "S" : "foo" }
```
**숫자 예제**  

```
Input:      $util.dynamodb.toDynamoDB(12345)
Output:     { "N" : 12345 }
```
**부울 예제**  

```
Input:      $util.dynamodb.toDynamoDB(true)
Output:     { "BOOL" : true }
```
**록 예제**  

```
Input:      $util.dynamodb.toDynamoDB([ "foo", 123, { "bar" : "baz" } ])
Output:     {
               "L" : [
                   { "S" : "foo" },
                   { "N" : 123 },
                   {
                       "M" : {
                           "bar" : { "S" : "baz" }
                       }
                   }
               ]
           }
```
**맵 예제**  

```
Input:      $util.dynamodb.toDynamoDB({ "foo": "bar", "baz" : 1234, "beep": [ "boop"] })
Output:     {
               "M" : {
                   "foo"  : { "S" : "bar" },
                   "baz"  : { "N" : 1234 },
                   "beep" : {
                       "L" : [
                           { "S" : "boop" }
                       ]
                   }
               }
           }
```

****`$util.dynamodb.toDynamoDBJson(Object) : String`** **  
`$util.dynamodb.toDynamoDB(Object) : Map`과 동일하지만 DynamoDB 속성 값을 JSON 인코딩 문자열로 반환합니다.

## toString 유틸리티
<a name="utility-helpers-in-toString"></a>

### toString 유틸리티 목록
<a name="utility-helpers-in-toString-list"></a>

****`$util.dynamodb.toString(String) : String`** **  
입력 문자열을 DynamoDB 문자열 형식으로 변환합니다. DynamoDB 속성 값을 설명하는 객체를 반환합니다.  

```
Input:      $util.dynamodb.toString("foo")
Output:     { "S" : "foo" }
```

** `$util.dynamodb.toStringJson(String) : Map` **  
`$util.dynamodb.toString(String) : String`과 동일하지만 DynamoDB 속성 값을 JSON 인코딩 문자열로 반환합니다.

** `$util.dynamodb.toStringSet(List<String>) : Map` **  
문자열이 포함된 목록을 DynamoDB 문자열 집합 형식으로 변환합니다. DynamoDB 속성 값을 설명하는 객체를 반환합니다.  

```
Input:      $util.dynamodb.toStringSet([ "foo", "bar", "baz" ])
Output:     { "SS" : [ "foo", "bar", "baz" ] }
```

** `$util.dynamodb.toStringSetJson(List<String>) : String` **  
`$util.dynamodb.toStringSet(List<String>) : Map`과 동일하지만 DynamoDB 속성 값을 JSON 인코딩 문자열로 반환합니다.

## toNumber 유틸리티
<a name="utility-helpers-in-toNumber"></a>

### toNumber 유틸리티 목록
<a name="utility-helpers-in-toNumber-list"></a>

** `$util.dynamodb.toNumber(Number) : Map` **  
숫자를 DynamoDB 숫자 형식으로 변환합니다. DynamoDB 속성 값을 설명하는 객체를 반환합니다.  

```
Input:      $util.dynamodb.toNumber(12345)
Output:     { "N" : 12345 }
```

** `$util.dynamodb.toNumberJson(Number) : String` **  
`$util.dynamodb.toNumber(Number) : Map`과 동일하지만 DynamoDB 속성 값을 JSON 인코딩 문자열로 반환합니다.

** `$util.dynamodb.toNumberSet(List<Number>) : Map` **  
숫자 목록을 DynamoDB 숫자 집합 형식으로 변환합니다. DynamoDB 속성 값을 설명하는 객체를 반환합니다.  

```
Input:      $util.dynamodb.toNumberSet([ 1, 23, 4.56 ])
Output:     { "NS" : [ 1, 23, 4.56 ] }
```

** `$util.dynamodb.toNumberSetJson(List<Number>) : String` **  
`$util.dynamodb.toNumberSet(List<Number>) : Map`과 동일하지만 DynamoDB 속성 값을 JSON 인코딩 문자열로 반환합니다.

## toBinary 유틸리티
<a name="utility-helpers-in-toBinary"></a>

### toBinary 유틸리티 목록
<a name="utility-helpers-in-toBinary-list"></a>

** `$util.dynamodb.toBinary(String) : Map` **  
base64 문자열로 인코딩된 이진 데이터를 DynamoDB 이진 형식으로 변환합니다. DynamoDB 속성 값을 설명하는 객체를 반환합니다.  

```
Input:      $util.dynamodb.toBinary("foo")
Output:     { "B" : "foo" }
```

** `$util.dynamodb.toBinaryJson(String) : String` **  
`$util.dynamodb.toBinary(String) : Map`과 동일하지만 DynamoDB 속성 값을 JSON 인코딩 문자열로 반환합니다.

** `$util.dynamodb.toBinarySet(List<String>) : Map` **  
base64 문자열로 인코딩된 이진 데이터 목록을 DynamoDB 이진수 집합 형식으로 변환합니다. DynamoDB 속성 값을 설명하는 객체를 반환합니다.  

```
Input:      $util.dynamodb.toBinarySet([ "foo", "bar", "baz" ])
Output:     { "BS" : [ "foo", "bar", "baz" ] }
```

** `$util.dynamodb.toBinarySetJson(List<String>) : String` **  
`$util.dynamodb.toBinarySet(List<String>) : Map`과 동일하지만 DynamoDB 속성 값을 JSON 인코딩 문자열로 반환합니다.

## toBoolean 유틸리티
<a name="utility-helpers-in-toBoolean"></a>

### toBoolean 유틸리티 목록
<a name="utility-helpers-in-toBoolean-list"></a>

** `$util.dynamodb.toBoolean(Boolean) : Map` **  
부울을 적절한 DynamoDB 부울 형식으로 변환합니다. DynamoDB 속성 값을 설명하는 객체를 반환합니다.  

```
Input:      $util.dynamodb.toBoolean(true)
Output:     { "BOOL" : true }
```

** `$util.dynamodb.toBooleanJson(Boolean) : String` **  
`$util.dynamodb.toBoolean(Boolean) : Map`과 동일하지만 DynamoDB 속성 값을 JSON 인코딩 문자열로 반환합니다.

## toNull 유틸리티
<a name="utility-helpers-in-toNull"></a>

### toNull 유틸리티 목록
<a name="utility-helpers-in-toNull-list"></a>

** `$util.dynamodb.toNull() : Map` **  
null을 DynamoDB null 형식으로 반환합니다. DynamoDB 속성 값을 설명하는 객체를 반환합니다.  

```
Input:      $util.dynamodb.toNull()
Output:     { "NULL" : null }
```

** `$util.dynamodb.toNullJson() : String` **  
`$util.dynamodb.toNull() : Map`과 동일하지만 DynamoDB 속성 값을 JSON 인코딩 문자열로 반환합니다.

## toList 유틸리티
<a name="utility-helpers-in-toList"></a>

### toList 유틸리티 목록
<a name="utility-helpers-in-toList-list"></a>

****`$util.dynamodb.toList(List) : Map`** **  
객체 목록을 DynamoDB 목록 형식으로 변환합니다. 목록의 각 항목 역시 적절한 DynamoDB 형식으로 변환됩니다. 이 도구는 몇 가지 중첩 객체를 표현하는 방법에 대해 독자적인 방식을 가지고 있습니다. 예를 들어 집합(‘SS’, ‘NS’, ‘BS’)보다는 목록(‘L’)을 사용합니다. DynamoDB 속성 값을 설명하는 객체를 반환합니다.  

```
Input:      $util.dynamodb.toList([ "foo", 123, { "bar" : "baz" } ])
Output:     {
               "L" : [
                   { "S" : "foo" },
                   { "N" : 123 },
                   {
                       "M" : {
                           "bar" : { "S" : "baz" }
                       }
                   }
               ]
           }
```

** `$util.dynamodb.toListJson(List) : String` **  
`$util.dynamodb.toList(List) : Map`과 동일하지만 DynamoDB 속성 값을 JSON 인코딩 문자열로 반환합니다.

## toMap 유틸리티
<a name="utility-helpers-in-toMap"></a>

### toMap 유틸리티 목록
<a name="utility-helpers-in-toMap-list"></a>

** `$util.dynamodb.toMap(Map) : Map` **  
맵을 DynamoDB 맵 형식으로 변환합니다. 맵의 각 값 역시 적절한 DynamoDB 형식으로 변환됩니다. 이 도구는 몇 가지 중첩 객체를 표현하는 방법에 대해 독자적인 방식을 가지고 있습니다. 예를 들어 집합(‘SS’, ‘NS’, ‘BS’)보다는 목록(‘L’)을 사용합니다. DynamoDB 속성 값을 설명하는 객체를 반환합니다.  

```
Input:      $util.dynamodb.toMap({ "foo": "bar", "baz" : 1234, "beep": [ "boop"] })
Output:     {
               "M" : {
                   "foo"  : { "S" : "bar" },
                   "baz"  : { "N" : 1234 },
                   "beep" : {
                       "L" : [
                           { "S" : "boop" }
                       ]
                   }
               }
           }
```

** `$util.dynamodb.toMapJson(Map) : String` **  
`$util.dynamodb.toMap(Map) : Map`과 동일하지만 DynamoDB 속성 값을 JSON 인코딩 문자열로 반환합니다.

** `$util.dynamodb.toMapValues(Map) : Map` **  
각 값이 적절한 DynamoDB 형식으로 변환된 탭의 사본을 생성합니다. 이 도구는 몇 가지 중첩 객체를 표현하는 방법에 대해 독자적인 방식을 가지고 있습니다. 예를 들어 집합(‘SS’, ‘NS’, ‘BS’)보다는 목록(‘L’)을 사용합니다.  

```
Input:      $util.dynamodb.toMapValues({ "foo": "bar", "baz" : 1234, "beep": [ "boop"] })
Output:     {
               "foo"  : { "S" : "bar" },
               "baz"  : { "N" : 1234 },
               "beep" : {
                   "L" : [
                       { "S" : "boop" }
                   ]
               }
           }
```
이는 전체 속성 값 자체가 아니라 DynamoDB 속성 값의 내용만 반환하기 때문에 `$util.dynamodb.toMap(Map) : Map`과 약간 다릅니다. 예를 들어 다음 문은 정확하게 동일합니다.  

```
$util.dynamodb.toMapValues($map)
$util.dynamodb.toMap($map).get("M")
```

** `$util.dynamodb.toMapValuesJson(Map) : String` **  
`$util.dynamodb.toMapValues(Map) : Map`과 동일하지만 DynamoDB 속성 값을 JSON 인코딩 문자열로 반환합니다.

## S3Object 유틸리티
<a name="utility-helpers-in-S3Object"></a>

### S3Object 유틸리티 목록
<a name="utility-helpers-in-S3Object-list"></a>

** `$util.dynamodb.toS3Object(String key, String bucket, String region) : Map` **  
키, 버킷 및 리전을 DynamoDB S3 객체 표현으로 변환합니다. DynamoDB 속성 값을 설명하는 객체를 반환합니다.  

```
Input:      $util.dynamodb.toS3Object("foo", "bar", region = "baz")
Output:     { "S" : "{ \"s3\" : { \"key\" : \"foo", \"bucket\" : \"bar", \"region\" : \"baz" } }" }
```

** `$util.dynamodb.toS3ObjectJson(String key, String bucket, String region) : String` **  
`$util.dynamodb.toS3Object(String key, String bucket, String region) : Map`과 동일하지만 DynamoDB 속성 값을 JSON 인코딩 문자열로 반환합니다.

** `$util.dynamodb.toS3Object(String key, String bucket, String region, String version) : Map` **  
키, 버킷, 리전 및 선택적 버전을 DynamoDB S3 객체 표현으로 변환합니다. DynamoDB 속성 값을 설명하는 객체를 반환합니다.  

```
Input:      $util.dynamodb.toS3Object("foo", "bar", "baz", "beep")
Output:     { "S" : "{ \"s3\" : { \"key\" : \"foo\", \"bucket\" : \"bar\", \"region\" : \"baz\", \"version\" = \"beep\" } }" }
```

** `$util.dynamodb.toS3ObjectJson(String key, String bucket, String region, String version) : String` **  
`$util.dynamodb.toS3Object(String key, String bucket, String region, String version) : Map`과 동일하지만 DynamoDB 속성 값을 JSON 인코딩 문자열로 반환합니다.

** `$util.dynamodb.fromS3ObjectJson(String) : Map` **  
DynamoDB S3 객체의 문자열 값을 수락하고 키, 버킷, 리전 및 선택적 버전을 포함하는 맵을 반환합니다.  

```
Input:      $util.dynamodb.fromS3ObjectJson({ "S" : "{ \"s3\" : { \"key\" : \"foo\", \"bucket\" : \"bar\", \"region\" : \"baz\", \"version\" = \"beep\" } }" })
Output:     { "key" : "foo", "bucket" : "bar", "region" : "baz", "version" : "beep" }
```

# \$1util.rds의 Amazon RDS 도우미
<a name="rds-helpers-in-util-rds"></a>

**참고**  
이제 우리는 주로 APPSYNC\$1JS 런타임과 해당 문서를 지원합니다. [여기](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-js-version.html)에서 APPSYNC\$1JS 런타임과 해당 안내서를 사용해 보세요.

`$util.rds`에는 결과 출력에서 불필요한 데이터를 제거하여 Amazon RDS 작업의 형식을 지정하는 도우미 메서드가 포함되어 있습니다.

## \$1util.rds 유틸리티 목록
<a name="rds-helpers-in-util-rds-list"></a>

****`$util.rds.toJsonString(String serializedSQLResult): String`****  
문자열화된 원시 Amazon Relational Database Service(RDS) 데이터 API 작업 결과 형식을 보다 간결한 문자열로 변환하여 `String`을 반환합니다. 반환 문자열은 결과 집합의 SQL 레코드의 직렬화된 목록입니다. 모든 레코드는 키-값 페어 모음으로 표시됩니다. 키는 열 이름에 해당합니다.  
입력의 해당 명령문이 변형을 수행하는 SQL 쿼리(예: INSERT, UPDATE, DELETE)인 경우 빈 목록이 반환됩니다. 예를 들어, 쿼리 `select * from Books limit 2`는 Amazon RDS 데이터 작업의 원시 결과를 제공합니다.  

```
{
    "sqlStatementResults": [
        {
            "numberOfRecordsUpdated": 0,
            "records": [
                [
                    {
                        "stringValue": "Mark Twain"
                    },
                    {
                        "stringValue": "Adventures of Huckleberry Finn"
                    },
                    {
                        "stringValue": "978-1948132817"
                    }
                ],
                [
                    {
                        "stringValue": "Jack London"
                    },
                    {
                        "stringValue": "The Call of the Wild"
                    },
                    {
                        "stringValue": "978-1948132275"
                    }
                  ]
            ],
            "columnMetadata": [
                {
                    "isSigned": false,
                    "isCurrency": false,
                    "label": "author",
                    "precision": 200,
                    "typeName": "VARCHAR",
                    "scale": 0,
                    "isAutoIncrement": false,
                    "isCaseSensitive": false,
                    "schemaName": "",
                    "tableName": "Books",
                    "type": 12,
                    "nullable": 0,
                    "arrayBaseColumnType": 0,
                    "name": "author"
                },
                {
                    "isSigned": false,
                    "isCurrency": false,
                    "label": "title",
                    "precision": 200,
                    "typeName": "VARCHAR",
                    "scale": 0,
                    "isAutoIncrement": false,
                    "isCaseSensitive": false,
                    "schemaName": "",
                    "tableName": "Books",
                    "type": 12,
                    "nullable": 0,
                    "arrayBaseColumnType": 0,
                    "name": "title"
                },
                {
                    "isSigned": false,
                    "isCurrency": false,
                    "label": "ISBN-13",
                    "precision": 15,
                    "typeName": "VARCHAR",
                    "scale": 0,
                    "isAutoIncrement": false,
                    "isCaseSensitive": false,
                    "schemaName": "",
                    "tableName": "Books",
                    "type": 12,
                    "nullable": 0,
                    "arrayBaseColumnType": 0,
                    "name": "ISBN-13"
                }
            ]
        }
    ]
}
```
`util.rds.toJsonString`은 다음과 같습니다.  

```
[
  {
    "author": "Mark Twain",
    "title": "Adventures of Huckleberry Finn",
    "ISBN-13": "978-1948132817"
  },
  {
    "author": "Jack London",
    "title": "The Call of the Wild",
    "ISBN-13": "978-1948132275"
  },
]
```

****`$util.rds.toJsonObject(String serializedSQLResult): Object`****  
이는 `util.rds.toJsonString`과 같지만 결과는 JSON `Object`입니다.

# \$1util.http의 HTTP 도우미
<a name="http-helpers-in-utils-http"></a>

**참고**  
이제 우리는 주로 APPSYNC\$1JS 런타임과 해당 문서를 지원합니다. [여기](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-js-version.html)에서 APPSYNC\$1JS 런타임과 해당 안내서를 사용해 보세요.

이 `$util.http` 유틸리티는 HTTP 요청 파라미터를 관리하고 응답 헤더를 추가하는 데 사용할 수 있는 도우미 메서드를 제공합니다.

## \$1util.http 유틸리티 목록
<a name="http-helpers-in-utils-http-list"></a>

** `$util.http.copyHeaders(Map) : Map` **  
다음과 같은 제한된 HTTP 헤더를 제외하고 맵에서 헤더를 복사합니다.  
+ transfer-encoding
+ connection
+ host
+ expect
+ keep-alive
+ upgrade
+ proxy-authenticate
+ proxy-authorization
+ te
+ content-length
이 유틸리티를 사용하여 요청 헤더를 다운스트림 HTTP 엔드포인트로 전달할 수 있습니다.  

```
{
    ...
    "params": {
        ...
        "headers": $util.http.copyHeaders($ctx.request.headers),
        ...
    },
    ...
}
```

**\$1util.http.addResponseHeader(문자열, 객체)**  
응답의 이름(`String`) 및 값(`Object`)이 포함된 단일 사용자 지정 헤더를 추가합니다. 다음과 같은 제한이 적용됩니다.  
+ `copyHeaders(Map)`의 제한된 헤더 목록 외에도 헤더 이름은 다음 중 하나와 일치할 수 없습니다.
  + Access-Control-Allow-Credentials
  + Access-Control-Allow-Origin
  + Access-Control-Expose-Headers
  + Access-Control-Max-Age
  + Access-Control-Allow-Methods
  + Access-Control-Allow-Headers
  + Vary
  + Content-Type
+ 헤더 이름은 `x-amzn-` 또는 `x-amz-` 같은 제한된 접두사로 시작할 수 없습니다.
+ 사용자 지정 응답 헤더의 크기는 4KB를 초과할 수 없습니다. 여기에는 헤더 이름과 값이 포함됩니다.
+ GraphQL 작업당 각 응답 헤더를 한 번씩 정의해야 합니다. 하지만 이름이 같은 사용자 지정 헤더를 여러 번 정의하면 응답에 가장 최근의 정의가 나타납니다. 이름 지정과 상관없이 모든 헤더는 헤더 크기 제한에 포함됩니다.
+ 이름 `(String)` 또는 null 값 `(Object)`가 비어 있거나 제한된 헤더는 무시되고, 작업 `errors` 출력에 추가되는 `ResponseHeaderError` 오류가 발생합니다.

```
export function request(ctx) {
  util.http.addResponseHeader('itemsCount', 7)
  util.http.addResponseHeader('render', ctx.args.render)
  return {}
}
```

****`$util.http.addResponseHeaders(Map)`****  
지정된 이름 맵 `(String)` 및 값 `(Object)`의 응답에 여러 응답 헤더를 추가합니다. `addResponseHeader(String, Object)` 메서드에 나열된 것과 동일한 제한 사항이 이 메서드에도 적용됩니다.  

```
export function request(ctx) {
  const headers = {
    headerInt: 12,
    headerString: 'stringValue',
    headerObject: {
      field1: 7,
      field2: 'string'
    }
  }
  util.http.addResponseHeaders(headers)
  return {}
}
```

# \$1util.xml의 XML 도우미
<a name="xml-helpers-in-utils-xml"></a>

**참고**  
이제 우리는 주로 APPSYNC\$1JS 런타임과 해당 문서를 지원합니다. [여기](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-js-version.html)에서 APPSYNC\$1JS 런타임과 해당 안내서를 사용해 보세요.

`$util.xml`에는 XML 응답을 JSON 또는 사전으로 쉽게 변환할 수 있도록 하는 도우미 메서드가 포함되어 있습니다.

## \$1util.xml 유틸리티 목록
<a name="xml-helpers-in-utils-xml-list"></a>

****`$util.xml.toMap(String) : Map`****  
XML 문자열을 사전으로 변환합니다.  

```
Input:

<?xml version="1.0" encoding="UTF-8"?>
<posts>
<post>
  <id>1</id>
  <title>Getting started with GraphQL</title>
</post>
</posts>

Output (JSON representation):

{
  "posts":{
    "post":{
      "id":1,
      "title":"Getting started with GraphQL"
    }
  }
}


Input:

<?xml version="1.0" encoding="UTF-8"?>
<posts>
<post>
  <id>1</id>
  <title>Getting started with GraphQL</title>
</post>
<post>
  <id>2</id>
  <title>Getting started with AWS AppSync</title>
</post>
</posts>

Output (JSON representation):

{
  "posts":{
    "post":[
        {
          "id":1,
          "title":"Getting started with GraphQL"
        },
        {
          "id":2,
          "title":"Getting started with AWS AppSync"
        }
    ]
  }
}
```

****`$util.xml.toJsonString(String) : String`****  
XML 문자열을 JSON 문자열로 변환합니다. 출력이 문자열인 것을 제외하면 *toMap*과 비슷합니다. 이는 HTTP 객체에서 JSON으로 XML 응답을 직접 변환하고 반환하고자 하는 경우 유용합니다.

****`$util.xml.toJsonString(String, Boolean) : String`****  
XML 문자열을 선택 사항인 부울 파라미터가 포함된 JSON 문자열로 변환하여 JSON으로 인코딩하고자 하는지 판단합니다.

# \$1util.transform의 변환 도우미
<a name="transformation-helpers-in-utils-transform"></a>

**참고**  
이제 우리는 주로 APPSYNC\$1JS 런타임과 해당 문서를 지원합니다. [여기](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-js-version.html)에서 APPSYNC\$1JS 런타임과 해당 안내서를 사용해 보세요.

`$util.transform`에는 Amazon DynamoDB 필터 작업과 같은 데이터 소스에 대해 복잡한 작업을 더 쉽게 수행할 수 있게 해주는 도우미 메서드가 포함되어 있습니다.

## 변환 도우미
<a name="transformation-helpers-conversions"></a>

### 변환 도우미 유틸리티 목록
<a name="transformation-helpers-in-utils-transform-list"></a>

****`$util.transform.toDynamoDBFilterExpression(Map) : Map`****  
입력 문자열을 DynamoDB에 사용할 필터 표현식으로 변환합니다.  

```
Input:

$util.transform.toDynamoDBFilterExpression({
    "title":{
      "contains":"Hello World"
    }
  })

Output:

{
    "expression" : "contains(#title, :title_contains)"
    "expressionNames" : {
        "#title" : "title",
    },
    "expressionValues" : {
        ":title_contains" : { "S" : "Hello World" }
    },
}
```

****`$util.transform.toElasticsearchQueryDSL(Map) : Map`****  
주어진 입력을 이와 동등한 OpenSearch 쿼리 DSL 표현식으로 변환하여 JSON 문자열로 반환합니다.  

```
Input:

$util.transform.toElasticsearchQueryDSL({
    "upvotes":{
        "ne":15,
        "range":[
            10,
            20
        ]
    },
    "title":{
        "eq":"hihihi",
        "wildcard":"h*i"
    }
  })

Output:
{
    "bool":{
      "must":[
          {
            "bool":{
              "must":[
                  {
                    "bool":{
                      "must_not":{
                        "term":{
                          "upvotes":15
                        }
                      }
                    }
                  },
                  {
                    "range":{
                      "upvotes":{
                        "gte":10,
                        "lte":20
                      }
                    }
                  }
              ]
            }
          },
          {
            "bool":{
              "must":[
                  {
                    "term":{
                      "title":"hihihi"
                    }
                  },
                  {
                  "wildcard":{
                      "title":"h*i"
                    }
                  }
              ]
            }
          }
      ]
    }
}
```
기본 연산자는 AND로 가정합니다.

## 변환 도우미 구독 필터
<a name="transformation-helpers-conversions-subscription-filters"></a>

### 변환 도우미 구독 필터 유틸리티 목록
<a name="transformation-helpers-in-utils-transform-list"></a>

****`$util.transform.toSubscriptionFilter(Map) : Map`****  
`Map` 입력 객체를 `SubscriptionFilter` 표현식 객체로 변환합니다. `$util.transform.toSubscriptionFilter` 메서드는 `$extensions.setSubscriptionFilter()` 확장에 대한 입력으로 사용됩니다. 자세한 내용은 [확장](https://docs.aws.amazon.com/appsync/latest/devguide/extensions)을 참조하세요.

****`$util.transform.toSubscriptionFilter(Map, List) : Map`****  
`Map` 입력 객체를 `SubscriptionFilter` 표현식 객체로 변환합니다. `$util.transform.toSubscriptionFilter` 메서드는 `$extensions.setSubscriptionFilter()` 확장에 대한 입력으로 사용됩니다. 자세한 내용은 [확장](https://docs.aws.amazon.com/appsync/latest/devguide/extensions)을 참조하세요.  
첫 번째 인수는 `SubscriptionFilter` 표현식 객체로 변환되는 `Map` 입력 객체입니다. 두 번째 인수는 `SubscriptionFilter` 표현식 객체를 구성하는 동안 첫 번째 `Map` 입력 객체에서 무시되는 필드 이름의 `List`입니다.

****`$util.transform.toSubscriptionFilter(Map, List, Map) : Map`****  
`Map` 입력 객체를 `SubscriptionFilter` 표현식 객체로 변환합니다. `$util.transform.toSubscriptionFilter` 메서드는 `$extensions.setSubscriptionFilter()` 확장에 대한 입력으로 사용됩니다. 자세한 내용은 [확장](https://docs.aws.amazon.com/appsync/latest/devguide/extensions)을 참조하세요.  
첫 번째 인수는 `SubscriptionFilter` 표현식 객체로 변환되는 `Map` 입력 객체, 두 번째 인수는 첫 번째 `Map` 입력 객체에서 무시될 필드 이름의 `List`, 세 번째 인수는 `SubscriptionFilter` 표현식 객체를 구성하는 동안 포함되는 엄격한 규칙의 `Map` 입력 객체입니다. 이러한 엄격한 규칙이 `SubscriptionFilter` 표현식 객체에 포함되므로 최소한 하나의 규칙이 충족되어 구독 필터를 통과할 수 있습니다.

## 구독 필터 인수
<a name="subscription-filter-arguments"></a>

다음 표에서는 다음 유틸리티의 인수를 정의하는 방법을 설명합니다.
+ `$util.transform.toSubscriptionFilter(Map) : Map`
+ `$util.transform.toSubscriptionFilter(Map, List) : Map`
+ `$util.transform.toSubscriptionFilter(Map, List, Map) : Map`

------
#### [ Argument 1: Map ]

인수 1은 다음과 같은 키 값을 가진 `Map` 객체입니다.
+ 필드 이름
+ ‘and’
+ ‘or’

필드 이름을 키로 사용하는 경우 해당 필드 항목의 조건은 `"operator" : "value"` 형식입니다.

다음 예에서는 `Map`에 항목을 추가하는 방법을 보여줍니다.

```
"field_name" : {
                    "operator1" : value             
               }

## We can have multiple conditions for the same field_name: 

"field_name" : {
                    "operator1" : value             
                    "operator2" : value
                    .
                    .
                    .                  
               }
```

필드에 두 개 이상의 조건이 있는 경우 이러한 모든 조건은 OR 연산을 사용하는 것으로 간주됩니다.

입력 `Map`에 ‘and’와 ‘or’를 키로 사용할 수도 있습니다. 즉, 이들 항목 내의 모든 항목은 키에 따라 AND 또는 OR 논리를 사용하여 결합되어야 합니다. 키 값 ‘and’와 ‘or’에는 일련의 조건이 필요합니다.

```
"and" : [
            
            {
                "field_name1" : {
                    "operator1" : value             
                }
             },
             
             {
                "field_name2" : {
                    "operator1" : value             
                }
             },
             .
             .
        ].
```

참고로 ‘and’와 ‘or’는 중첩되지 않습니다. 즉, 다른 ‘and’/‘or’ 블록 내에 ‘and’/‘or’를 중첩할 수 있습니다. 하지만 단순한 필드에서는 작동하지 않습니다.

```
"and" : [
            
            {
                "field_name1" : {
                    "operator" : value             
                }
             },
             
             {
                "or" : [
                            {
                                "field_name2" : {
                                    "operator" : value             
                                }
                            },
                            
                            {
                                "field_name3" : {
                                    "operator" : value             
                                }
                            }
              
                        ].
```

다음 예제에서는 `$util.transform.toSubscriptionFilter(Map) : Map`를 사용하여 인수 1을 입력하는 방법을 보여줍니다.**

**입력**

인수 1: 맵:

```
{
  "percentageUp": {
    "lte": 50,
    "gte": 20
  },
  "and": [
    {
      "title": {
        "ne": "Book1"
      }
    },
    {
      "downvotes": {
        "gt": 2000
      }
    }
  ],
  "or": [
    {
      "author": {
        "eq": "Admin"
      }
    },
    {
      "isPublished": {
        "eq": false
      }
    }
  ]
}
```

**출력**

결과는 `Map` 객체입니다.

```
{
  "filterGroup": [
    {
      "filters": [
        {
          "fieldName": "percentageUp",
          "operator": "lte",
          "value": 50
        },
        {
          "fieldName": "title",
          "operator": "ne",
          "value": "Book1"
        },
        {
          "fieldName": "downvotes",
          "operator": "gt",
          "value": 2000
        },
        {
          "fieldName": "author",
          "operator": "eq",
          "value": "Admin"
        }
      ]
    },
    {
      "filters": [
        {
          "fieldName": "percentageUp",
          "operator": "lte",
          "value": 50
        },
        {
          "fieldName": "title",
          "operator": "ne",
          "value": "Book1"
        },
        {
          "fieldName": "downvotes",
          "operator": "gt",
          "value": 2000
        },
        {
          "fieldName": "isPublished",
          "operator": "eq",
          "value": false
        }
      ]
    },
    {
      "filters": [
        {
          "fieldName": "percentageUp",
          "operator": "gte",
          "value": 20
        },
        {
          "fieldName": "title",
          "operator": "ne",
          "value": "Book1"
        },
        {
          "fieldName": "downvotes",
          "operator": "gt",
          "value": 2000
        },
        {
          "fieldName": "author",
          "operator": "eq",
          "value": "Admin"
        }
      ]
    },
    {
      "filters": [
        {
          "fieldName": "percentageUp",
          "operator": "gte",
          "value": 20
        },
        {
          "fieldName": "title",
          "operator": "ne",
          "value": "Book1"
        },
        {
          "fieldName": "downvotes",
          "operator": "gt",
          "value": 2000
        },
        {
          "fieldName": "isPublished",
          "operator": "eq",
          "value": false
        }
      ]
    }
  ]
}
```

------
#### [ Argument 2: List ]

인수 2에는 `SubscriptionFilter` 표현식 객체를 생성하는 동안 입력 `Map`(인수 1)에서 고려하면 안 되는 필드 이름의 `List`가 포함되어 있습니다. `List`도 비어 있을 수 있습니다.

다음 예제에서는 `$util.transform.toSubscriptionFilter(Map, List) : Map`을 사용하여 인수 1 및 인수 2를 입력하는 방법을 보여줍니다.

**입력**

인수 1: 맵:

```
{

  "percentageUp": {
    "lte": 50,
    "gte": 20
  },
  "and": [
    {
      "title": {
        "ne": "Book1"
      }
    },
    {
      "downvotes": {
        "gt": 20
      }
    }
  ],
  "or": [
    {
      "author": {
        "eq": "Admin"
      }
    },
    {
      "isPublished": {
        "eq": false
      }
    }
  ]
}
```

인수 2: 목록:

```
["percentageUp", "author"]
```

**출력**

결과는 `Map` 객체입니다.

```
{
  "filterGroup": [
    {
      "filters": [
        {
          "fieldName": "title",
          "operator": "ne",
          "value": "Book1"
        },
        {
          "fieldName": "downvotes",
          "operator": "gt",
          "value": 20
        },
        {
          "fieldName": "isPublished",
          "operator": "eq",
          "value": false
        }
      ]
    }
  ]
}
```

------
#### [ Argument 3: Map ]

인수 3은 필드 이름을 키 값으로 갖는 `Map` 객체입니다(‘and’ 또는 ‘or’를 가질 수 없음). 필드 이름을 키로 사용하는 경우 해당 필드의 조건은 `"operator" : "value"` 형식의 항목입니다. 인수 1과 달리 인수 3은 동일한 키에 여러 조건을 포함할 수 없습니다. 또한 인수 3에는 ‘and’ 또는 ‘or’ 절이 없으므로 중첩도 필요하지 않습니다.

인수 3은 엄격한 규칙 목록을 나타내며, 이러한 규칙 목록은 필터를 통과하기 위해 이러한 조건 **중 하나 이상이** 충족되도록 `SubscriptionFilter` 표현식 객체에 추가됩니다.

```
{
  "fieldname1": {
    "operator": value
  },
  "fieldname2": {
    "operator": value
  }
}
.
.
.
```

다음 예제에서는 `$util.transform.toSubscriptionFilter(Map, List, Map) : Map`을 사용하여 *인수 1*, *인수 2* 및 *인수 3*을 입력하는 방법을 보여줍니다.

**입력**

인수 1: 맵:

```
{
  "percentageUp": {
    "lte": 50,
    "gte": 20
  },
  "and": [
    {
      "title": {
        "ne": "Book1"
      }
    },
    {
      "downvotes": {
        "lt": 20
      }
    }
  ],
  "or": [
    {
      "author": {
        "eq": "Admin"
      }
    },
    {
      "isPublished": {
        "eq": false
      }
    }
  ]
}
```

인수 2: 목록:

```
["percentageUp", "author"]
```

인수 3: 맵:

```
{
  "upvotes": {
    "gte": 250
  },
  "author": {
    "eq": "Person1"
  }
}
```

**출력**

결과는 `Map` 객체입니다.

```
{
  "filterGroup": [
    {
      "filters": [
        {
          "fieldName": "title",
          "operator": "ne",
          "value": "Book1"
        },
        {
          "fieldName": "downvotes",
          "operator": "gt",
          "value": 20
        },
        {
          "fieldName": "isPublished",
          "operator": "eq",
          "value": false
        },
        {
          "fieldName": "upvotes",
          "operator": "gte",
          "value": 250
        }
      ]
    },
    {
      "filters": [
        {
          "fieldName": "title",
          "operator": "ne",
          "value": "Book1"
        },
        {
          "fieldName": "downvotes",
          "operator": "gt",
          "value": 20
        },
        {
          "fieldName": "isPublished",
          "operator": "eq",
          "value": false
        },
        {
          "fieldName": "author",
          "operator": "eq",
          "value": "Person1"
        }
      ]
    }
  ]
}
```

------

# \$1util.math의 수학 연산 도우미
<a name="math-helpers-in-util-math"></a>

**참고**  
이제 우리는 주로 APPSYNC\$1JS 런타임과 해당 문서를 지원합니다. [여기](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-js-version.html)에서 APPSYNC\$1JS 런타임과 해당 안내서를 사용해 보세요.

 `$util.math`에는 일반적인 수학 연산 작업에 도움이 되는 메서드가 있습니다.

## \$1util.math 유틸리티 목록
<a name="math-helpers-in-util-math-list"></a>

** `$util.math.roundNum(Double) : Integer` **  
배수를 가져와서 가장 가까운 정수로 반올림합니다.

** `$util.math.minVal(Double, Double) : Double` **  
두 개의 배수를 가져와서 두 배수의 최소값을 반환합니다.

** `$util.math.maxVal(Double, Double) : Double` **  
두 개의 배수를 가져와서 두 배수의 최대값을 반환합니다.

** `$util.math.randomDouble() : Double` **  
0과 1 사이의 임의의 배수를 반환합니다.  
이 함수는 높은 엔트로피 무작위화가 필요한 경우(예: 암호화)에는 사용해서는 안 됩니다.

** `$util.math.randomWithinRange(Integer, Integer) : Integer` **  
지정된 범위 내의 임의의 정수 값을 반환합니다. 첫 번째 인수는 범위의 하한값을 지정하고 두 번째 인수는 범위의 상한값을 지정합니다.  
이 함수는 높은 엔트로피 무작위화가 필요한 경우(예: 암호화)에는 사용해서는 안 됩니다.

# \$1util.str의 문자열 도우미
<a name="str-helpers-in-util-str"></a>

**참고**  
이제 우리는 주로 APPSYNC\$1JS 런타임과 해당 문서를 지원합니다. [여기](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-js-version.html)에서 APPSYNC\$1JS 런타임과 해당 안내서를 사용해 보세요.

 `$util.str`에는 일반적인 문자열 작업에 도움이 되는 메서드가 있습니다.

## \$1util.str 유틸리티 목록
<a name="str-helpers-in-util-str-list"></a>

** `$util.str.toUpper(String) : String` **  
문자열을 가져와서 전체 대문자로 변환합니다.

** `$util.str.toLower(String) : String` **  
문자열을 가져와서 전체 소문자로 변환합니다.

** `$util.str.toReplace(String, String, String) : String` **  
문자열 내의 하위 문자열을 다른 문자열로 바꿉니다. 첫 번째 인수는 대체 작업을 수행할 문자열을 지정합니다. 두 번째 인수는 대체할 하위 문자열을 지정합니다. 세 번째 인수는 두 번째 인수를 대체할 문자열을 지정합니다. 다음은 이 유틸리티 사용 예제입니다.  

```
 INPUT:      $util.str.toReplace("hello world", "hello", "mellow")
 OUTPUT:     "mellow world"
```

** `$util.str.normalize(String, String) : String` **  
NFC, NFD, NFKC 또는 NFKD의 네 가지 유니코드 정규화 형식 중 하나를 사용하여 문자열을 정규화합니다. 첫 번째 인수는 정규화할 문자열입니다. 두 번째 인수는 정규화 프로세스에 사용할 정규화 유형을 지정하는 'nfc', 'nfd', 'nfkc' 또는 'nfkd'입니다.

# 확장 프로그램
<a name="extensions"></a>

**참고**  
이제 우리는 주로 APPSYNC\$1JS 런타임과 해당 문서를 지원합니다. [여기](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-js-version.html)에서 APPSYNC\$1JS 런타임과 해당 안내서를 사용해 보세요.

`$extensions`에는 해석기 내에서 추가 작업을 수행할 수 있는 일련의 메서드가 있습니다.

## 확장 사용
<a name="caching-extensions-list"></a>

**`$extensions.evictFromApiCache(String, String, Object) : Object`**  
 AWS AppSync 서버 측 캐시에서 항목을 제거합니다. 첫 번째 인수는 형식 이름입니다. 두 번째 인수는 필드 이름입니다. 세 번째 인수는 캐싱 키 값을 지정하는 키-값 쌍 항목을 포함하는 객체입니다. 캐시된 해석기의 `cachingKey`에 있는 캐싱 키와 동일한 순서로 객체에 항목을 넣어야 합니다.  
이 유틸리티는 뮤테이션에만 작동하고 쿼리에는 작동하지 않습니다.

## 구독 확장
<a name="subscription-extensions-list"></a>

**`$extensions.setSubscriptionFilter(filterJsonObject)`**  
향상된 구독 필터를 정의합니다. 각 구독 알림 이벤트는 제공된 구독 필터에 대해 평가되고 모든 필터가 `true`로 평가되면 클라이언트에 알림을 전달합니다. 인수는 다음 섹션에 설명된 대로 `filterJsonObject`입니다.  
이 확장 메서드는 구독 해석기의 응답 매핑 템플릿에서만 사용할 수 있습니다.

**`$extensions.setSubscriptionInvalidationFilter(filterJsonObject)`**  
구독 무효화 필터를 정의합니다. 구독 필터는 무효화 페이로드에 대해 평가된 후 필터가 `true`로 평가되면 지정된 구독을 무효화합니다. 인수는 다음 섹션에 설명된 대로 `filterJsonObject`입니다.  
이 확장 메서드는 구독 해석기의 응답 매핑 템플릿에서만 사용할 수 있습니다.

**`$extensions.invalidateSubscriptions(invalidationJsonObject)`**  
뮤테이션으로부터 구독 무효화를 시작하는 데 사용됩니다. 인수는 다음 섹션에 설명된 대로 `invalidationJsonObject`입니다.  
이 확장은 뮤테이션 해석기의 응답 매핑 템플릿에서만 사용할 수 있습니다.  
단일 요청에서 고유한 `$extensions.invalidateSubscriptions()` 메서드 직접 호출을 최대 5개까지만 사용할 수 있습니다. 이 한도를 초과할 경우 GraphQL 오류가 발생합니다.

## 인수: filterJsonObject
<a name="extensions-setSubscriptionInvalidationFilter"></a>

JSON 객체는 구독 또는 무효화 필터를 정의합니다. `filterGroup`에 있는 필터 배열입니다. 각 필터는 개별 필터의 모음입니다.

```
{
    "filterGroup": [
        {
           "filters" : [
                 {
                    "fieldName" : "userId",
                    "operator" : "eq",
                    "value" : 1
                }
           ]
           
        },
        {
           "filters" : [
                {
                    "fieldName" : "group",
                    "operator" : "in",
                    "value" : ["Admin", "Developer"]
                }
           ]
           
        }
    ]
}
```

각 필터에는 다음의 세 가지 속성이 있습니다.
+ `fieldName` - GraphQL 스키마 필드
+ `operator` - 연산자 유형
+ `value` - 구독 알림 `fieldName` 값과 비교할 값.

다음은 이러한 속성에 대한 할당 예시입니다.

```
{
 "fieldName" : "severity",
 "operator" : "le",
 "value" : $context.result.severity
}
```

### 필드: fieldName
<a name="extensions-fieldName"></a>

문자열 유형 `fieldName`은 구독 알림 페이로드에서 `fieldName`과 일치하는 GraphQL 스키마에 정의된 필드를 나타냅니다. 일치가 발견되면 GraphQL 스키마 필드의 `value`는 구독 알림 필터의 `value`와 비교됩니다. 다음 예제에서 `fieldName` 필터는 주어진 GraphQL 유형에 정의된 `service` 필드와 일치합니다. 알림 페이로드에 `AWS AppSync`와 동등한 `value`가 있는 `service` 필드가 포함된 경우 필터는 `true`로 평가합니다.

```
{
 "fieldName" : "service",
 "operator" : "eq",
 "value" : "AWS AppSync"
}
```

### 필드: 값
<a name="extensions-value"></a>

값은 연산자에 따라 다른 유형일 수 있습니다.
+ 단일 숫자 또는 부울
  + 문자열 예제: `"test"`, `"service"` 
  + 숫자 예제: `1`, `2`, `45.75` 
  + 부울 예제: `true`, `false` 
+ 숫자 또는 문자열 페어
  + 문자열 페어 예제:`["test1","test2"]`, `["start","end"]` 
  + 숫자 페어 예제: `[1,4]`, `[67,89]`, `[12.45, 95.45]` 
+ 숫자 또는 문자열 배열
  + 문자열 배열 예제: `["test1","test2","test3","test4","test5"]`
  + 숫자 배열 예제: `[1,2,3,4,5]`, `[12.11,46.13,45.09,12.54,13.89]` 

### 필드: 연산자
<a name="extensions-operator"></a>

대소문자를 구분하는 문자열로, 가능한 값은 다음과 같습니다.


| 
| 
| 연산자 | 설명 | 가능한 값 유형 | 
| --- |--- |--- |
| eq | Equal | integer, float, string, Boolean | 
| ne | Not equal | integer, float, string, Boolean | 
| le | Less than or equal | integer, float, string | 
| lt | Less than | integer, float, string | 
| ge | Greater than or equal | integer, float, string | 
| gt | Greater than | integer, float, string | 
| contains | Checks for a subsequence or value in the set. | integer, float, string | 
| notContains | Checks for the absence of a subsequence or absence of a value in the set. | integer, float, string | 
| beginsWith | Checks for a prefix. | string | 
| in | Checks for matching elements that are in the list. | Array of integer, float, or string | 
| notIn | Checks for matching elements that aren't in the list. | Array of integer, float, or string | 
| between | Between two values | integer, float, string | 
| containsAny | Contains common elements | integer, float, string | 

다음 테이블에는 구독 알림에서 각 연산자가 사용되는 방식이 설명되어 있습니다.

------
#### [ eq (equal) ]

`eq` 연산자는 구독 알림 필드 값이 일치하고 필터 값과 엄격하게 동일하면 `true`로 평가됩니다. 다음 예에서 구독 알림에 `AWS AppSync`와 동등한 값을 가진 `service` 필드가 있는 경우 필터는 `true`로 평가합니다.

**가능한 값 유형:** 정수, 부동 소수점, 문자열, 부울

```
{
 "fieldName" : "service",
 "operator" : "eq",
 "value" : "AWS AppSync"
}
```

------
#### [ ne (not equal) ]

`ne` 연산자는 구독 알림 필드 값이 필터 값과 다르면 `true`로 평가됩니다. 다음 예에서는 구독 알림에 `AWS AppSync`와 다른 값을 가진 `service` 필드가 있는 경우 필터는 `true`로 평가합니다.

**가능한 값 유형:** 정수, 부동 소수점, 문자열, 부울

```
{
 "fieldName" : "service",
 "operator" : "ne",
 "value" : "AWS AppSync"
}
```

------
#### [ le (less or equal) ]

`le` 연산자는 구독 알림 필드 값이 필터 값과 같거나 그보다 작으면 `true`로 평가됩니다. 다음 예에서는 구독 알림에 `5`와 같거나 그보다 작은 값을 가진 `size` 필드가 있는 경우 필터는 `true`로 평가합니다.

**가능한 값 유형:** 정수, 부동 소수점, 문자열

```
{
 "fieldName" : "size",
 "operator" : "le",
 "value" : 5
}
```

------
#### [ lt (less than) ]

`lt` 연산자는 구독 알림 필드 값이 필터 값보다 낮으면 `true`로 평가됩니다. 다음 예에서는 구독 알림에 `5`보다 낮은 값을 가진 `size` 필드가 있는 경우 필터는 `true`로 평가합니다.

**가능한 값 유형:** 정수, 부동 소수점, 문자열

```
{
 "fieldName" : "size",
 "operator" : "lt",
 "value" : 5
}
```

------
#### [ ge (greater or equal) ]

`ge` 연산자는 구독 알림 필드 값이 필터 값과 같거나 그보다 크면 `true`로 평가됩니다. 다음 예에서는 구독 알림에 `5`와 같거나 그보다 큰 값을 가진 `size` 필드가 있는 경우 필터는 `true`로 평가합니다.

**가능한 값 유형:** 정수, 부동 소수점, 문자열

```
{
 "fieldName" : "size",
 "operator" : "ge",
 "value" : 5
}
```

------
#### [ gt (greater than) ]

`gt` 연산자는 구독 알림 필드 값이 필터 값보다 크면 `true`로 평가됩니다. 다음 예에서는 구독 알림에 `5`보다 높은 값을 가진 `size` 필드가 있는 경우 필터는 `true`로 평가합니다.

**가능한 값 유형:** 정수, 부동 소수점, 문자열

```
{
 "fieldName" : "size",
 "operator" : "gt",
 "value" : 5
}
```

------
#### [ contains ]

`contains` 연산자는 집합이나 단일 항목의 하위 문자열, 하위 시퀀스 또는 값을 확인합니다. 구독 알림 필드 값에 필터 값이 포함된 경우 `contains` 연산자가 있는 필터는 `true`로 평가됩니다. 다음 예에서는 구독 알림에 값 `10`이 포함된 배열 값이 있는 `seats` 필드가 있는 경우 필터는 `true`로 평가합니다.

**가능한 값 유형:** 정수, 부동 소수점, 문자열

```
{
 "fieldName" : "seats",
 "operator" : "contains",
 "value" : 10
}
```

다른 예로, 필터는 구독 알림에 `launch`가 하위 문자열로 포함된 `event` 필드가 있는 경우 `true`로 평가합니다.

```
{
 "fieldName" : "event",
 "operator" : "contains",
 "value" : "launch"
}
```

------
#### [ notContains ]

`notContains` 연산자는 집합이나 단일 항목에 하위 문자열, 하위 시퀀스 또는 값이 없는지 확인합니다. 구독 알림 필드 값에 필터 값이 포함되지 않은 경우 `notContains` 연산자가 있는 필터는 `true`로 평가됩니다. 다음 예에서는 구독 알림에 값 `10`이 포함되지 않은 배열 값이 있는 `seats` 필드가 있는 경우 필터는 `true`로 평가합니다.

**가능한 값 유형:** 정수, 부동 소수점, 문자열

```
{
 "fieldName" : "seats",
 "operator" : "notContains",
 "value" : 10
}
```

다른 예로, 필터는 구독 알림에 `launch`가 하위 문자열로 포함되지 않은 `event` 필드 값이 있는 경우 `true`로 평가합니다.

```
{
 "fieldName" : "event",
 "operator" : "notContains",
 "value" : "launch"
}
```

------
#### [ beginsWith ]

`beginsWith` 연산자는 문자열에서 접두사를 확인합니다. 구독 알림 필드 값이 필터 값으로 시작하는 경우 `beginsWith` 연산자가 포함된 필터는 `true`로 평가됩니다. 다음 예에서는 구독 알림에 값이 `AWS`로 시작하는 `service` 필드가 있는 경우 필터는 `true`로 평가합니다.

**가능한 값 유형:** 문자열

```
{
 "fieldName" : "service",
 "operator" : "beginsWith",
 "value" : "AWS"
}
```

------
#### [ in ]

`in` 연산자는 배열에서 일치하는 요소가 있는지 확인합니다. `in` 연산자가 포함된 필터는 구독 알림 필드 값이 배열에 존재하는 경우 `true`로 평가됩니다. 다음 예에서는 구독 알림에 `[1,2,3]` 배열에 있는 값 중 하나가 포함된 `severity` 필드가 있는 경우 필터는 `true`로 평가합니다.

**가능한 값 유형:** 정수 배열, 부동 소수점 또는 문자열

```
{
 "fieldName" : "severity",
 "operator" : "in",
 "value" : [1,2,3]
}
```

------
#### [ notIn ]

`notIn` 연산자는 배열에서 누락된 요소가 있는지 확인합니다. `notIn` 연산자가 포함된 필터는 구독 알림 필드 값이 배열에 존재하지 않는 경우 `true`로 평가됩니다. 다음 예에서는 구독 알림에 `[1,2,3]` 배열에 없는 값 중 하나가 포함된 `severity` 필드가 있는 경우 필터는 `true`로 평가합니다.

**가능한 값 유형:** 정수 배열, 부동 소수점 또는 문자열

```
{
 "fieldName" : "severity",
 "operator" : "notIn",
 "value" : [1,2,3]
}
```

------
#### [ between ]

`between` 연산자는 두 숫자 또는 문자열 사이의 값을 확인합니다. 구독 알림 필드 값이 필터의 값 페어 사이에 있는 경우 `between` 연산자가 포함된 필터는 `true`로 평가됩니다. 다음 예에서는 구독 알림에 값이 `2`,`3`,`4`인 `severity` 필드가 있는 경우 필터는 `true`로 평가합니다.

**가능한 값 유형:** 정수 페어, 부동 소수점 또는 문자열

```
{
 "fieldName" : "severity",
 "operator" : "between",
 "value" : [1,5]
}
```

------
#### [ containsAny ]

`containsAny` 연산자는 배열에서 공통된 요소가 있는지 확인합니다. 구독 알림 필드 집합 값 및 필터 집합 값의 교차점이 비어 있지 않은 경우 `containsAny` 연산자가 있는 필터는 `true`로 평가됩니다. 다음 예에서는 구독 알림에 `10` 또는 `15`를 포함하는 배열 값을 가진 `seats` 필드가 있는 경우 필터는 `true`로 평가합니다. 이는 구독 알림에 `[10,11]` 또는 `[15,20,30]`라는 `seats` 필드 값이 있는 경우 필터가 `true`로 평가한다는 의미입니다.

**가능한 값 유형:** 정수, 부동 소수점 또는 문자열

```
{
 "fieldName" : "seats",
 "operator" : "containsAny",
 "value" : [10, 15]
}
```

------

### AND 로직
<a name="extensions-AND-logic"></a>

`filterGroup` 배열의 `filters` 객체 내에 여러 항목을 정의하여 AND 논리를 사용하여 여러 필터를 결합할 수 있습니다. 다음 예에서는 구독 알림에 값이 `1`인 `userId` 필드가 있고(AND) `Admin` 또는 `Developer`인 `group` 필드 값이 있는 경우 필터는 `true`로 평가합니다.

```
{
    "filterGroup": [
        {
           "filters" : [
                 {
                    "fieldName" : "userId",
                    "operator" : "eq",
                    "value" : 1
                },
                {
                    "fieldName" : "group",
                    "operator" : "in",
                    "value" : ["Admin", "Developer"]
                }
           ]
           
        }
    ]
}
```

### OR 로직
<a name="extensions-OR-logic"></a>

`filterGroup` 배열 내에서 여러 필터 객체를 정의하면 OR 논리를 사용하여 여러 필터를 결합할 수 있습니다. 다음 예에서는 구독 알림에 값이 `1`인 `userId` 필드가 있거나(OR) `Admin` 또는 `Developer`인 `group` 필드 값이 있는 경우 필터는 `true`로 평가합니다.

```
{
    "filterGroup": [
        {
           "filters" : [
                 {
                    "fieldName" : "userId",
                    "operator" : "eq",
                    "value" : 1
                }
           ]
           
        },
        {
           "filters" : [
                {
                    "fieldName" : "group",
                    "operator" : "in",
                    "value" : ["Admin", "Developer"]
                }
           ]
           
        }
    ]
}
```

### 예외
<a name="extensions-exceptions"></a>

필터 사용에는 몇 가지 제한이 있다는 점에 유의하세요.
+ `filters` 객체에는 필터당 최대 5개의 고유 `fieldName` 항목이 있을 수 있습니다. 즉, AND 로직을 사용하여 최대 5개의 개별 `fieldName` 객체를 결합할 수 있습니다.
+ `containsAny` 연산자에는 최대 20개의 값이 있을 수 있습니다.
+ `in` 및 `notIn` 연산자에는 최대 5개의 값이 있을 수 있습니다.
+ 각 연결 문자열은 최대 256자입니다.
+ 각 문자열 비교는 대/소문자를 구분합니다.
+ 중첩된 객체 필터링은 최대 5개의 중첩 수준 필터링을 허용합니다.
+ 각 `filterGroup`에는 최대 10개의 `filters`가 있을 수 있습니다. 즉, OR 로직을 사용하여 최대 10개의 개별 `filters`를 결합할 수 있습니다.
  + `in` 연산자는 OR 논리의 특별 사례입니다. 다음 예제에서는 두 가지 `filters`가 있습니다.

    ```
    {
        "filterGroup": [
            {
               "filters" : [
                     {
                        "fieldName" : "userId",
                        "operator" : "eq",
                        "value" : 1
                    },
                    {
                        "fieldName" : "group",
                        "operator" : "in",
                        "value" : ["Admin", "Developer"]
                    }
               ]  
            }
        ]
    }
    ```

    이전 필터 그룹은 다음과 같이 평가되며 최대 필터 한도에 포함됩니다.

    ```
    {
        "filterGroup": [
            {
               "filters" : [
                     {
                        "fieldName" : "userId",
                        "operator" : "eq",
                        "value" : 1
                    },
                    {
                        "fieldName" : "group",
                        "operator" : "eq",
                        "value" : "Admin"
                    }
               ]  
            },
            {
               "filters" : [
                     {
                        "fieldName" : "userId",
                        "operator" : "eq",
                        "value" : 1
                    },
                    {
                        "fieldName" : "group",
                        "operator" : "eq",
                        "value" : "Developer"
                    }
               ]  
            }
        ]
    }
    ```

## 인수: invalidationJsonObject
<a name="extensions-invalidationJsonObject"></a>

`invalidationJsonObject`는 다음을 정의합니다.
+ `subscriptionField` - 무효화할 GraphQL 스키마 구독입니다. `subscriptionField`에서 문자열로 정의된 단일 구독은 무효화 대상으로 간주됩니다.
+ `payload` – 무효화 필터가 해당 값에 대해 `true`로 평가되는 경우 구독 무효화를 위한 입력으로 사용되는 키-값 쌍 목록입니다.

  다음 예에서는 구독 해석기에 정의된 무효화 필터가 `payload` 값에 대해 `true`로 평가될 때 `onUserDelete` 구독을 사용하여 구독 및 연결된 클라이언트를 무효화합니다.

  ```
  $extensions.invalidateSubscriptions({
          "subscriptionField": "onUserDelete",
          "payload": {
                  "group": "Developer"
                  "type" : "Full-Time"
        }
      })
  ```