

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

# GraphQL의 스칼라 유형
<a name="scalars"></a>

GraphQL 객체 유형에는 이름과 필드가 있으며 이러한 필드에는 하위 필드가 있을 수 있습니다. 궁극적으로 객체 유형의 필드는 쿼리의 리프를 나타내는 *스칼라* 유형으로 해석되어야 합니다. 객체 유형과 스칼라에 대한 자세한 내용은 GraphQL 웹 사이트의 [스키마 및 유형](https://graphql.org/learn/schema/)을 참조하세요.

GraphQL 스칼라의 기본 세트 외에도 AWS AppSync를 사용하면 *AWS* 접두사로 시작하는 **서비스 정의** 스칼라를 사용할 수도 있습니다. AWS AppSync는 **사용자 정의**(사용자 정의) 스칼라 생성을 지원하지 않습니다. 기본 스칼라 또는 *AWS* 스칼라를 사용해야 합니다.

*AWS*를 사용자 지정 객체 형식의 접두사로 사용할 수 없습니다.

다음 섹션은 스키마 입력에 대한 참조입니다.

## 기본 스칼라
<a name="graph-ql-base-scalars"></a>

GraphQL은 다음과 같은 디폴트 스칼라를 정의합니다.

### 기본 스칼라 목록
<a name="graph-ql-base-scalars-list"></a>

`ID`  
객체의 고유한 식별자입니다. 이 스칼라는 `String`처럼 직렬화되어 있지만 사람이 읽을 수는 없습니다.

`String`  
UTF-8 문자 시퀀스입니다.

`Int`  
-(231)과 231-1 사이의 정수 값입니다.

`Float`  
IEEE 754 부동 소수점 값입니다.

`Boolean`  
부울 값으로 `true` 또는 `false` 둘 중 하나입니다.

## AWS AppSync 스칼라
<a name="graph-ql-aws-appsync-scalars"></a>

AWS AppSync는 다음 스칼라를 정의합니다.

### AWS AppSync 스칼라 목록
<a name="graph-ql-aws-appsync-scalars-list"></a>

`AWSDate`  
`YYYY-MM-DD` 형식의 확장 [ISO 8601 날짜](https://en.wikipedia.org/wiki/ISO_8601#Calendar_dates) 문자열입니다.

`AWSTime`  
`hh:mm:ss.sss` 형식의 확장 [ISO 8601 시간](https://en.wikipedia.org/wiki/ISO_8601#Times) 문자열입니다.

`AWSDateTime`  
`YYYY-MM-DDThh:mm:ss.sssZ` 형식의 확장 [ISO 8601 날짜 및 시간](https://en.wikipedia.org/wiki/ISO_8601#Combined_date_and_time_representations) 문자열입니다.

**참고**  
`AWSDate`, `AWSTime` 및 `AWSDateTime` 스칼라는 선택적으로 [시간대 오프셋](https://en.wikipedia.org/wiki/ISO_8601#Time_zone_designators)을 포함할 수 있습니다. 예를 들어,`1970-01-01Z`, `1970-01-01-07:00` 및 `1970-01-01+05:30` 값은 `AWSDate`에 대해 모두 유효합니다. 시간대 오프셋은 `Z`(UTC)이거나 시간 및 분(및 선택적으로 초) 단위의 오프셋이어야 합니다. 예를 들어 `±hh:mm:ss`입니다. 시간대 오프셋의 초 필드는 ISO 8601 표준을 따르지 않더라도 유효한 것으로 간주됩니다.

`AWSTimestamp`  
`1970-01-01-T00:00Z` 이전 또는 이후의 시간(초)을 나타내는 정수 값입니다.

`AWSEmail`  
[RFC 822](https://tools.ietf.org/html/rfc822)에 정의된 `local-part@domain-part` 형식의 이메일 주소입니다.

`AWSJSON`  
JSON 문자열입니다. 유효한 JSON 구문은 리터럴 입력 문자열이 아닌 맵, 목록 또는 스칼라 값으로 자동 구문 분석되어 해석기 코드에 로드됩니다. 인용되지 않은 문자열이나 잘못된 JSON으로 인해 GraphQL 검증 오류가 발생합니다.

`AWSPhone`  
전화번호입니다. 이 값은 문자열로 저장됩니다. 전화번호에는 숫자 그룹을 구분하기 위한 공백이나 하이픈이 포함될 수 있습니다. 국가 코드가 없는 전화번호는 [북아메리카 번호 체계(NANP)](https://en.wikipedia.org/wiki/North_American_Numbering_Plan)를 준수하는 미국/북미 번호로 간주됩니다.

`AWSURL`  
[RFC 1738](https://tools.ietf.org/html/rfc1738)에 정의된 URL입니다. 예: `https://www.amazon.com/dp/B000NZW3KC/`또는 `mailto:example@example.com`. URL은 스키마(`http`, `mailto`)를 포함해야 하며 경로 부분에 슬래시(`//`)를 두 개 포함할 수 없습니다.

`AWSIPAddress`  
유효한 IPv4 또는 IPv6 주소입니다. IPv4 주소는 네 개의 점으로 구분된 표기법(`123.12.34.56`)으로 표시되어야 합니다. IPv6 주소는 괄호가 없고 콜론으로 구분된 형식(`1a2b:3c4b::1234:4567`)이어야 합니다. 서브넷 마스크를 나타내는 선택적 CIDR 접미사(`123.45.67.89/16`)를 포함할 수 있습니다.

## 스키마 예제 사용
<a name="example-schema-usage"></a>

다음 예제 GraphQL 스키마는 모든 사용자 지정 스칼라를 '객체'로 사용하고 기본 put, get 및 list 작업에 대한 해석기 요청 및 응답 템플릿을 보여줍니다. 마지막으로 예제는 쿼리 및 뮤테이션을 실행할 때 이를 사용하는 방법을 보여줍니다.

```
type Mutation {
    putObject(
        email: AWSEmail,
        json: AWSJSON,
        date: AWSDate,
        time: AWSTime,
        datetime: AWSDateTime,
        timestamp: AWSTimestamp,
        url: AWSURL,
        phoneno: AWSPhone,
        ip: AWSIPAddress
    ): Object
}

type Object {
    id: ID!
    email: AWSEmail
    json: AWSJSON
    date: AWSDate
    time: AWSTime
    datetime: AWSDateTime
    timestamp: AWSTimestamp
    url: AWSURL
    phoneno: AWSPhone
    ip: AWSIPAddress
}

type Query {
    getObject(id: ID!): Object
    listObjects: [Object]
}

schema {
    query: Query
    mutation: Mutation
}
```

`putObject`에 대한 요청 템플릿의 모양은 다음과 같습니다. `putObject`는 `PutItem` 작업을 사용하여 Amazon DynamoDB 테이블에서 항목을 생성하거나 업데이트합니다. 참고로 이 코드 조각에는 데이터 소스로 구성된 Amazon DynamoDB 테이블이 없습니다. 다음은 예시용으로만 사용되고 있습니다.

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

`putObject`의 응답 템플릿은 다음과 같은 결과를 반환합니다.

```
$util.toJson($ctx.result)
```

`getObject`에 대한 요청 템플릿의 모양은 다음과 같습니다. `getObject`는 `GetItem` 작업을 시작하여 주어진 기본 키와 함께 항목에 대한 속성 집합을 반환합니다. 참고로 이 코드 조각에는 데이터 소스로 구성된 Amazon DynamoDB 테이블이 없습니다. 다음은 예시용으로만 사용되고 있습니다.

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

`getObject`의 응답 템플릿은 다음과 같은 결과를 반환합니다.

```
$util.toJson($ctx.result)
```

`listObjects`에 대한 요청 템플릿의 모양은 다음과 같습니다. `listObjects`는 `Scan` 작업을 사용하여 하나 이상의 항목과 속성을 반환합니다. 참고로 이 코드 조각에는 데이터 소스로 구성된 Amazon DynamoDB 테이블이 없습니다. 다음은 예시용으로만 사용되고 있습니다.

```
{
    "version" : "2017-02-28",
    "operation" : "Scan",
}
```

`listObjects`의 응답 템플릿은 다음과 같은 결과를 반환합니다.

```
$util.toJson($ctx.result.items)
```

다음은 이 스키마를 GraphQL 쿼리와 함께 사용하는 몇 가지 예제입니다.

```
mutation CreateObject {
    putObject(email: "example@example.com"
        json: "{\"a\":1, \"b\":3, \"string\": 234}"
        date: "1970-01-01Z"
        time: "12:00:34."
        datetime: "1930-01-01T16:00:00-07:00"
        timestamp: -123123
        url:"https://amazon.com"
        phoneno: "+1 555 764 4377"
        ip: "127.0.0.1/8"
    ) {
        id
        email
        json
        date
        time
        datetime
        url
        timestamp
        phoneno
        ip
    }
}

query getObject {
    getObject(id:"0d97daf0-48e6-4ffc-8d48-0537e8a843d2"){
        email
        url
        timestamp
        phoneno
        ip
    }
}

query listObjects {
    listObjects {
        json
        date
        time
        datetime
    }
}
```