

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

# 동기화
<a name="js-aws-appsync-resolver-reference-dynamodb-sync"></a>

`Sync` 요청 객체를 사용하면 DynamoDB 테이블에서 모든 결과를 가져온 다음, 마지막 쿼리(델타 업데이트) 이후에 변경된 데이터만 수신할 수 있습니다. `Sync` 요청은 버전이 지정된 DynamoDB 데이터 소스에만 수행할 수 있습니다. 다음을 지정할 수 있습니다.
+ 결과를 제외하는 필터
+ 반환할 항목 수
+ 페이지 매김 토큰
+ 마지막 `Sync` 작업이 시작된 경우

`Sync` 요청 객체는 다음과 같은 구조입니다.

```
type DynamoDBSyncRequest = {
  operation: 'Sync';
  basePartitionKey?: string;
  deltaIndexName?: string;
  limit?: number;
  nextToken?: string;
  lastSync?: number;
  filter?: {
    expression: string;
    expressionNames?: { [key: string]: string };
    expressionValues?: { [key: string]: any };
  };
};
```

필드는 다음과 같이 정의됩니다.

## Sync 필드
<a name="js-sync-list"></a>

### Sync 필드 목록
<a name="js-sync-list-col"></a>

** `operation` **  
수행할 DynamoDB 작업입니다. `Sync` 작업을 수행하려면 이 값을 `Sync`으로 설정해야 합니다. 이 값은 필수입니다.

** `filter` **  
반환되기 전 DynamoDB의 결과를 필터링하는 데 사용할 수 있는 필터. 필터에 대한 자세한 내용은 [필터](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-filter)를 참조하십시오. 이 필드는 선택 사항입니다.

** `limit` **  
한 번에 평가올 수 있는 최대 항목 수입니다. 이 필드는 선택 사항입니다. 생략된 경우, 기본 제한이 `100`개 항목으로 설정됩니다. 이 필드의 최대값은 `1000`개 항목입니다.

** `nextToken` **  
이전 쿼리를 지속하는 페이지 매김 토큰. 이 토큰은 이전 쿼리에서 얻습니다. 이 필드는 선택 사항입니다.

** `lastSync` **  
마지막으로 성공한 `Sync` 작업이 시작되었던 시간(epoch 밀리초)입니다. 지정된 경우, `lastSync` 이후에 변경된 항목만 반환됩니다. 이 필드는 선택 사항이며 초기 `Sync` 작업에서 모든 페이지를 가져온 이후에만 채워져야 합니다. 생략된 경우, *기본* 테이블의 결과가 반환되고, 그렇지 않으면 *델타* 테이블의 결과가 반환됩니다.

**`basePartitionKey`**  
`Sync` 작업을 수행할 때 사용되는 *기본* 테이블의 파티션 키입니다. 이 필드를 사용하면 테이블에서 사용자 지정 파티션 키를 활용할 때 `Sync` 작업을 수행할 수 있습니다. 이 필드는 선택 사항입니다.

**`deltaIndexName`**  
`Sync` 작업에 사용되는 인덱스. 이 인덱스는 테이블에서 사용자 지정 파티션 키를 사용할 때 전체 델타 저장소 테이블에서 `Sync` 작업을 활성화하는 데 필요합니다. `Sync` 작업은 GSI(`gsi_ds_pk` 및 `gsi_ds_sk`에서 생성)에서 수행됩니다. 이 필드는 선택 사항입니다.

DynamoDB 동기화에서 반환하는 결과는 자동으로 GraphQL 및 JSON 기본 유형으로 변환되며 컨텍스트 결과(`context.result`)에서 사용할 수 있습니다.

DynamoDB 유형 변환에 대한 자세한 내용은 [유형 시스템(응답 매핑)](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-typed-values-responses)을 참조하세요.

JavaScript 해석기에 대한 자세한 내용은 [JavaScript 해석기 개요](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-overview-js.html)를 참조하세요.

결과의 구조는 다음과 같습니다.

```
{
    items = [ ... ],
    nextToken = "a pagination token",
    scannedCount = 10,
    startedAt = 1550000000000
}
```

필드는 다음과 같이 정의됩니다.

** `items` **  
동기화에서 반환하는 항목이 포함된 목록.

** `nextToken` **  
결과가 더 있을 수 있는 경우 에는 다른 요청에 사용할 수 있는 페이지 매김 토큰이 `nextToken` 포함되어 있습니다. AWS AppSync는 DynamoDB에서 반환된 페이지 매김 토큰을 암호화하고 난독화합니다. 따라서 테이블 데이터가 호출자에게 실수로 유출되는 일이 없습니다. 또한 페이지 매김 토큰은 여러 함수 또는 해석기 간에 사용할 수 없습니다.

** `scannedCount` **  
필터 표현식(있는 경우)을 적용하기 전에 DynamoDB에서 검색한 항목 수.

** `startedAt` **  
로컬로 저장하고 다른 요청에 `lastSync` 인수로 사용할 수 있는 동기화 작업이 시작된 시간(Epoch 밀리초)입니다. 페이지 매김 토큰이 요청에 포함된 경우, 이 값은 결과의 첫 페이지에 대한 요청에 의해 반환된 값과 동일합니다.

## 예제
<a name="js-id14"></a>

다음 예제는 GraphQL 쿼리 `syncPosts(nextToken: String, lastSync: AWSTimestamp)`을 위한 함수 요청 핸들러입니다.

이 예에서 `lastSync`가 생략된 경우, 기본 테이블의 모든 항목이 반환됩니다. `lastSync`가 제공된 경우 `lastSync` 이후 변경된 델타 동기화 테이블의 항목만 반환됩니다.

```
export function request(ctx) {
  const { nextToken, lastSync } = ctx.args;
  return { operation: 'Sync', limit: 100, nextToken, lastSync };
}
```