

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

# 에서 DynamoDB 데이터 소스 버전 관리 AWS AppSync
<a name="versioned-data-sources"></a>

AWS AppSync는 현재 DynamoDB 데이터 소스에서 버전 관리를 지원합니다. 충돌 감지, 충돌 해결 및 동기화 작업에는 `Versioned` 데이터 원본이 필요합니다. 데이터 소스에서 버전 관리를 활성화하면 AWS AppSync는 자동으로 다음을 수행합니다.
+ 객체 버전 관리 메타데이터로 항목을 향상시킵니다.
+  AWS AppSync 변형이 있는 항목에 대한 변경 사항을 *Delta* 테이블에 기록합니다.
+ 구성 가능한 시간 동안 *기본* 테이블에서 삭제된 항목의 ‘삭제 표시’를 유지합니다.

## 버전이 지정된 데이터 소스 구성
<a name="versioned-data-source-configuration"></a>

DynamoDB 데이터 원본의 버전 관리를 활성화할 때 다음 필드를 지정합니다.

** `BaseTableTTL` **  
*기본* 테이블에서 삭제된 항목의 ‘삭제 표시’(항목이 삭제되었음을 나타내는 메타데이터 필드)를 유지하는 시간(분)입니다. 항목이 삭제되는 즉시 제거하려면 이 값을 *0*으로 설정하면 됩니다. 이 필드는 필수 항목입니다.

** `DeltaSyncTableName` **  
 AWS AppSync 변형이 있는 항목에 대한 변경 사항이 저장되는 테이블의 이름입니다. 이 필드는 필수 항목입니다.

** `DeltaSyncTableTTL` **  
*델타* 테이블의 항목을 유지할 시간(분)입니다. 이 필드는 필수 항목입니다.

## Delta 동기화 테이블 로깅
<a name="delta-sync-table"></a>

AWS AppSync는 현재 `PutItem`, `UpdateItem`및 `DeleteItem` DynamoDB 작업을 사용하는 변형에 대해 Delta Sync 로깅을 지원합니다.

 AWS AppSync 변형이 버전이 지정된 데이터 소스의 항목을 변경하면 해당 변경에 대한 레코드가 증분 업데이트에 최적화된 *Delta* 테이블에 저장됩니다. 다른 버전이 지정된 데이터 소스에 대해 다른 *Delta* 테이블(예: 유형당 하나, 도메인 영역당 하나)을 사용하거나 API에 대해 단일 *Delta* 테이블을 사용하도록 선택할 수 있습니다. AWS AppSync는 기본 키의 충돌을 방지하기 위해 여러 APIs에 대해 단일 *Delta* 테이블을 사용하지 않도록 권장합니다.

이 테이블에 필요한 스키마는 다음과 같습니다.

** `ds_pk` **  
파티션 키로 사용되는 문자열 값입니다. *기본* 데이터 원본 이름과 변경이 발생한 날짜의 ISO 8601 형식을 연결하여 구성됩니다(예: `Comments:2019-01-01`).  
VTL 매핑 템플릿의 `customPartitionKey` 플래그가 파티션 키의 열 이름으로 설정되면(*AWS AppSync 개발자 안내서*의 [DynamoDB에 대한 해석기 매핑 템플릿 참조](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-mapping-template-reference-dynamodb.html#aws-appsync-resolver-mapping-template-reference-dynamodb-updateitem) 섹션 참조) `ds_pk`의 형식이 변경되고 *기본* 테이블에서 파티션 키 값을 추가하여 문자열이 구성됩니다. 예를 들어, *기본* 테이블의 레코드에 `1a`의 파티션 키 값과 `2b`의 정렬 키 값이 있는 경우 문자열의 새 값은 `Comments:2019-01-01:1a`가 됩니다.

** `ds_sk` **  
정렬 키로 사용되는 문자열 값입니다. 변경이 발생한 시간의 ISO 8601 형식, 항목의 프라이머리 키, 항목의 버전을 연결하여 구성됩니다. 이 필드의 조합은 *델타* 테이블에 있는 모든 항목의 고유성을 보장합니다(예: 시간이 `09:30:00`, ID가 `1a`, 버전이 `2`인 경우 `09:30:00:1a:2`).  
VTL 매핑 템플릿의 `customPartitionKey` 플래그가 파티션 키의 열 이름으로 설정되면(*AWS AppSync 개발자 안내서*의 [DynamoDB에 대한 해석기 매핑 템플릿 참조](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-mapping-template-reference-dynamodb.html#aws-appsync-resolver-mapping-template-reference-dynamodb-updateitem) 섹션 참조) `ds_sk`의 형식이 변경되고 *기본* 테이블에서 조합 키 값을 정렬 키 값으로 교체하여 문자열이 구성됩니다. 위의 예제를 사용하자면, *기본* 테이블의 레코드에 `1a`의 파티션 키 값과 `2b`의 정렬 키 값이 있는 경우 문자열의 새 값은 `09:30:00:2b:3`가 됩니다.

** `_ttl` **  
*델타* 테이블에서 항목을 제거해야 할 때 타임스탬프를 Epoch 초 단위로 저장하는 숫자 값입니다. 이 값은 데이터 원본에 구성된 `DeltaSyncTableTTL` 값을 변경이 발생한 순간에 추가하여 결정됩니다. 이 필드는 DynamoDB TTL 속성으로 구성해야 합니다.

*기본* 테이블과 함께 사용하도록 구성된 IAM 역할에는 *델타* 테이블에서 작업할 수 있는 권한도 포함되어야 합니다. 이 예제에서는 `Comments`라는 *기본* 테이블과 `ChangeLog`라는 *델타* 테이블에 대한 권한 정책이 표시됩니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "dynamodb:DeleteItem",
                "dynamodb:GetItem",
                "dynamodb:PutItem",
                "dynamodb:Query",
                "dynamodb:Scan",
                "dynamodb:UpdateItem"
            ],
            "Resource": [
                "arn:aws:dynamodb:us-east-1:000000000000:table/Comments",
                "arn:aws:dynamodb:us-east-1:000000000000:table/Comments/*",
                "arn:aws:dynamodb:us-east-1:000000000000:table/ChangeLog",
                "arn:aws:dynamodb:us-east-1:000000000000:table/ChangeLog/*"
            ]
        }
    ]
}
```

------

## 버전이 지정된 데이터 소스 메타데이터
<a name="versioned-data-source-metadata"></a>

AWS AppSync는 사용자를 대신하여 `Versioned` 데이터 소스의 메타데이터 필드를 관리합니다. 이러한 필드를 직접 수정하면 애플리케이션에 오류가 발생하거나 데이터가 손실될 수 있습니다. 이러한 필드는 다음과 같습니다.

** `_version` **  
항목이 변경될 때마다 업데이트되는 단순 증가 카운터입니다.

** `_lastChangedAt` **  
항목이 마지막으로 수정되었을 때 타임스탬프를 Epoch 밀리초 단위로 저장하는 숫자 값입니다.

** `_deleted` **  
항목이 삭제되었음을 나타내는 부울 ‘삭제 표시’ 값입니다. 로컬 데이터 스토어에서 삭제된 항목을 제거하기 위해 애플리케이션에서 사용할 수 있습니다.

** `_ttl` **  
기본 데이터 원본에서 항목을 제거해야 할 때 타임스탬프를 Epoch 초 단위로 저장하는 숫자 값입니다.

** `ds_pk` **  
*델타* 테이블의 파티션 키로 사용되는 문자열 값입니다.

** `ds_sk` **  
*델타* 테이블의 정렬 키로 사용되는 문자열 값입니다.

**`gsi_ds_pk`**  
글로벌 보조 인덱스를 파티션 키로 지원하기 위해 생성된 문자열 값 특성입니다. VTL 매핑 템플릿에서 `customPartitionKey` 및 `populateIndexFields` 플래그가 모두 활성화된 경우에만 포함됩니다(*AWS AppSync 개발자 안내서*의 [DynamoDB에 대한 해석기 매핑 템플릿 참조](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-mapping-template-reference-dynamodb.html#aws-appsync-resolver-mapping-template-reference-dynamodb-updateitem)에서 확인). 활성화된 경우 *기본* 데이터 원본 이름과 변경이 발생한 날짜의 ISO 8601 형식을 연결하여 값이 구성됩니다(예: *기본* 테이블의 이름이 *Comments*인 경우 이 레코드는 `Comments:2019-01-01`로 설정됨).

**`gsi_ds_sk`**  
글로벌 보조 인덱스를 정렬 키로 지원하기 위해 생성된 문자열 값 특성입니다. VTL 매핑 템플릿에서 `customPartitionKey` 및 `populateIndexFields` 플래그가 모두 활성화된 경우에만 포함됩니다(*AWS AppSync 개발자 안내서*의 [DynamoDB에 대한 해석기 매핑 템플릿 참조](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-mapping-template-reference-dynamodb.html#aws-appsync-resolver-mapping-template-reference-dynamodb-updateitem)에서 확인). 활성화된 경우 변경이 발생한 시간의 ISO 8601 형식, *기본* 테이블에 있는 항목의 파티션 키, *기본* 테이블에 있는 항목의 정렬 키, 항목의 버전을 연결하여 값이 구성됩니다(예: 시간이 `09:30:00`, 파티션 키 값이 `1a`, 정렬 키 값이 `2b`, 버전이 `3`인 경우 `09:30:00:1a#2b:3`).

이러한 메타데이터 필드는 기본 데이터 소스의 전체 항목 크기에 영향을 미칩니다. AWS AppSync는 애플리케이션을 설계할 때 버전이 지정된 데이터 소스 메타데이터에 대해 *500바이트 \$1 최대 기본 키 스토리지 크기를* 예약할 것을 권장합니다. 클라이언트 애플리케이션에서 이 메타데이터를 사용하려면 GraphQL 유형 및 변형 선택 집합에 `_version`, `_lastChangedAt` 및 `_deleted` 필드를 포함합니다.