

# S3 Tables 복제 작동 방식
<a name="s3-tables-replication-how-replication-works"></a>

S3 Tables 복제는 리전 및 AWS 계정 간에 Apache Iceberg 테이블의 읽기 전용 복제본을 생성합니다. 복제본 테이블은 S3 Tables 서비스에서 자동으로 유지 관리되며 소스 테이블의 전체 데이터, 메타데이터 및 스냅샷 기록을 포함하므로 분석 및 시간 이동 작업에 Iceberg 호환 엔진을 사용하여 쿼리할 수 있습니다.

테이블에 대한 복제를 구성할 때 S3 Tables는 다음과 같습니다.
+ 원본 테이블과 동일한 이름과 네임스페이스를 사용하여 각 대상 테이블 버킷에 읽기 전용 복제본 테이블을 생성합니다.
+ 복제본을 소스 테이블의 최신 상태로 채웁니다.
+ 소스 테이블에서 새 업데이트 모니터링
+ 일관성을 유지하기 위해 원본과 동일한 순서로 복제본에 대한 모든 업데이트를 커밋합니다.

자세한 내용은 다음 섹션을 참조하세요.

**Topics**
+ [복제 가능한 구성 요소](#s3-tables-replication-what-is-replicated)
+ [데이터 복제 방법](#s3-tables-replication-how-data-replicated)
+ [스냅샷 복제](#s3-tables-replication-snapshot-replication)
+ [고려 사항 및 제한](#s3-tables-replication-considerations-limitations)

## 복제 가능한 구성 요소
<a name="s3-tables-replication-what-is-replicated"></a>

다음 테이블 구성 요소가 복제됩니다.
+ **테이블 스냅샷** - 압축된 스냅샷을 포함한 모든 스냅샷은 시간순으로 복제되어 원본 테이블의 상위-하위 관계 및 시퀀스 번호를 유지합니다. 이렇게 하면 복제본 테이블이 소스 테이블과 동일한 시간 이동 기능을 제공합니다.
+ **테이블 데이터** - 테이블 스냅샷에서 참조하는 모든 데이터 파일이 대상 리전에 복제됩니다. 여기에는 다음이 포함됩니다.
  + **메타데이터 파일** - 테이블 metadata.json 파일, 매니페스트, 매니페스트 목록, 파티션 통계 및 테이블 통계.
  + **파일 삭제** - 모든 삭제 파일은 복제본 테이블의 데이터 정확도를 유지하기 위해 복제됩니다.
  + **데이터 파일** - 매니페스트에서 참조하는 모든 데이터 파일이 복제됩니다.
+ **테이블 메타데이터** - 스키마 정보(현재 및 과거), 파티션 사양, 정렬 순서, 테이블 속성을 포함한 전체 메타데이터 복제입니다.
  + **스키마 정보** - 현재 스키마 및 과거 스키마 버전을 포함하여 모든 테이블 스키마가 복제됩니다. 이렇게 하면 복제본 테이블에 대한 쿼리가 올바른 열 정의, 데이터 유형 및 필드 매핑을 사용할 수 있습니다. 복제 프로세스는 스키마 진화 기록을 유지 관리하므로 시간 이동 쿼리가 복제본 테이블에서 올바르게 작동할 수 있습니다.
  + **파티션 사양** - 현재 및 과거 파티션 사양이 복제되어 복제본 테이블이 소스 테이블과 동일한 파티셔닝 전략을 유지하도록 합니다.
  + **정렬 순서** - 쿼리 성능 최적화를 유지하기 위해 테이블 정렬 순서가 복제됩니다.

## 데이터 복제 방법
<a name="s3-tables-replication-how-data-replicated"></a>

복제는 소스 테이블과 복제본 테이블 간의 Apache Iceberg 테이블 메타데이터를 비교하여 복제본 테이블의 유효한 상태를 결정합니다. 복제는 세 가지 범주의 메타데이터를 처리하여 복제본 테이블을 업데이트합니다.

### 테이블 메타데이터의 경우
<a name="s3-tables-replication-table-metadata"></a>

버전이 지정된 메타데이터 필드의 경우 복제는 소스 테이블의 값을 다음 필드에 대한 복제본 테이블의 배열로 병합합니다.
+ `snapshots` - 소스 테이블의 모든 스냅샷을 snapshot-id별로 복제본 테이블의 스냅샷 배열에 병합합니다.
+ `snapshot-log` - 원본 테이블의 스냅샷 로그를 타임스탬프 및 스냅샷 ID별로 정렬된 복제본 테이블의 스냅샷 로그 배열로 병합합니다.
+ `sort-orders` - 소스 테이블의 정렬 순서 정의를 order-id별로 복제본 테이블의 정렬 순서 배열에 병합합니다.
+ `partition-specs` - 소스 테이블의 파티션 사양을 spec-id별로 복제본 테이블의 파티션 사양 배열에 병합합니다.

### 테이블 구성의 경우
<a name="s3-tables-replication-table-configuration"></a>

테이블 구성을 나타내는 필드의 경우 복제는 소스 테이블에서 직접 값을 복사합니다.
+ `properties`
+ `partition-statistics`
+ `statistics`

현재 테이블 상태도 소스 테이블에서 전송됩니다.
+ `current-snapshot-id`
+ `current-schema-id`
+ `last-column-id`
+ `last-partition-id`
+ `last-sequence-number`
+ `default-sort-order-id`
+ `next-row-id`(Iceberg V3)
+ `encryption-keys`(Iceberg V3)

### 복제본별 상태
<a name="s3-tables-replication-replica-specific-state"></a>

다음 필드는 병합된 데이터에서 계산되고 복제본 테이블에 대해 업데이트됩니다.
+ `location`은 복제 중에 복제본 테이블 버킷의 올바른 파일 위치를 가리키도록 업데이트되어 모든 파일 참조가 대상 환경에서 유효한지 확인합니다.
+ `metadata-log`에는 모든 대상 메타데이터 파일 이름이 포함되며 복제에 성공할 때마다 현재 메타데이터 파일 이름으로 업데이트됩니다.
+ 복제본 테이블 위치를 가리키도록 모든 파일 경로가 수정됩니다.

## 스냅샷 복제
<a name="s3-tables-replication-snapshot-replication"></a>

S3 Tables 복제는 소스 테이블과 동일한 커밋 순서로 모든 테이블 스냅샷을 복제하여 리전 간에 전체 스냅샷 기록을 유지합니다. 소스 테이블의 상위-하위 관계는 복제본 테이블에 보존됩니다.

### 스냅샷 보관
<a name="s3-tables-replication-snapshot-retention"></a>

복제된 테이블에 대해 소스의 보존 기간과 다른 사용자 지정 스냅샷 보존 기간을 구성할 수 있습니다. 즉, 스냅샷이 만료되어 소스 테이블에서 더 이상 사용할 수 없는 경우에도 복제본에 보존할 수 있습니다.

예를 들어 소스 테이블의 스냅샷 보존 기간이 30일이지만 복제본 테이블은 90일 보존 기간으로 구성된 경우, 복제본은 소스 테이블에서 더 이상 사용할 수 없는 이전 2개월의 스냅샷을 유지합니다.

소스 테이블에서 수동으로 만료된 스냅샷도 복제본 테이블에 보존됩니다. 예를 들어 Spark 프로시저를 사용하여 소스 테이블에서 2월부터 스냅샷을 만료한 경우에도 복제본 테이블의 스냅샷으로 시간을 보낼 수 있습니다.

## 고려 사항 및 제한
<a name="s3-tables-replication-considerations-limitations"></a>

복제된 테이블에는 다음 고려 사항이 적용됩니다.
+ S3 Tables는 Iceberg V2 및 V3 테이블을 모두 복제합니다. 그러나 업그레이드된 테이블(V2 → V3)의 복제는 지원되지 않습니다.
+ 500MB보다 큰 메타데이터 파일은 지원되지 않습니다.
+ 테이블 업데이트는 일반적으로 몇 분 내에 복제되지만 복제가 채우기를 시작하는 경우와 같이 복제할 테이블 업데이트의 크기에 따라 복제 시간이 더 오래 걸릴 수 있습니다.
+ 태그 또는 브랜치가 있는 테이블은 지원되지 않습니다.
+ Amazon S3 Metadata 테이블 또는 기타 AWS 생성 시스템 테이블에는 복제가 지원되지 않습니다.
+ 압축된 스냅샷을 포함한 모든 테이블 스냅샷은 소스 테이블에서 복제됩니다. 따라서 복제본 테이블에서는 압축이 지원되지 않습니다.