

# S3 Tables 복제
<a name="s3-tables-replication-tables"></a>

Amazon S3 Tables는 Amazon S3 테이블 버킷에 저장된 Apache Iceberg 테이블의 자동 복제를 지원합니다. 복제 대상은 동일한 AWS 리전, 여러 AWS 리전, 동일한 계정 또는 다른 AWS 계정에 있을 수 있습니다. 테이블에 대한 복제를 구성하면 여러 위치에서 데이터의 읽기 전용 복제본을 유지할 수 있습니다. 복제본을 사용하여 데이터 가용성을 높이고, 규정 준수 요구 사항을 충족하고, 분산 애플리케이션의 액세스 성능을 높일 수 있습니다.

S3 Tables 복제는 스냅샷, 메타데이터 및 데이터 파일을 포함한 모든 테이블 업데이트를 소스 테이블과 동일한 순서로 대상 테이블에 커밋하여 데이터 일관성을 유지합니다.

## S3 Tables 복제를 사용하는 경우
<a name="s3-tables-replication-tables-when-to-use"></a>

다음과 같은 목적으로 S3 Tables 복제를 사용할 수 있습니다.
+ **대기 시간 최소화** - 고객이 두 군데의 지리적 위치를 갖는 경우, 사용자와 지리적으로 더 가까운 AWS 리전에 읽기 전용 복제본을 유지하여 테이블 액세스 대기 시간을 최소화할 수 있습니다.
+ **규정 준수** - 특정 지리적 위치 또는 AWS 계정에 읽기 전용 복제본을 유지 관리할 수 있으므로 특정 규정 또는 규정 준수 요구 사항을 충족하는 데 도움이 될 수 있습니다. 소스와 다른 AWS KMS 키로 테이블을 암호화하도록 복제 대상 테이블 버킷을 구성할 수 있습니다.
+ **중앙 집중식 분석** - 데이터가 여러 AWS 리전에 분산된 경우 통합 보고, 교차 리전 분석 및 기계 학습 모델 훈련을 위해 리전별 데이터세트를 중앙 리전에 복제할 수 있습니다. 따라서 리전 간에 쿼리하거나 사용자 지정 데이터 집계 파이프라인을 구축할 필요가 없습니다.
+ **테스트 및 개발 환경** - 별도의 AWS 계정 버킷 또는 테이블 버킷에 프로덕션 테이블의 읽기 전용 복제본을 생성하여 개발 및 QA 팀에 사실적인 테스트 데이터를 제공할 수 있습니다. 이렇게 하면 테스트 환경이 수동 내보내기 또는 데이터 동기화 프로세스 없이 프로덕션과 유사한 최신 데이터를 갖도록 하면서 프로덕션 시스템에서 테스트 워크로드를 격리할 수 있습니다.

## 특성
<a name="s3-tables-replication-tables-features"></a>

S3 Tables 복제는 다음과 같은 기능을 제공합니다.

**S3 Tables의 읽기 전용 복제본**  
S3 Tables 복제는 테이블 버킷 간에 Apache Iceberg 테이블의 읽기 전용 복제본을 생성합니다. Iceberg 호환 엔진을 사용하여 복제본을 독립적으로 쿼리할 수 있습니다.

**자동으로 유지 관리되는 복제본**  
S3 Tables 복제 서비스는 복제본 테이블을 자동으로 유지 관리합니다. 복제는 일반적으로 소스 업데이트 후 몇 분 이내에 복제본을 업데이트합니다. S3 Tables는 일관성을 유지하기 위해 소스 테이블과 동일한 순서로 모든 업데이트를 커밋합니다.

**여러 대상에 복제**  
동일한 테이블을 여러 대상 테이블 버킷에 복제할 수 있습니다. 복제 대상은 동일한 AWS 리전, 여러 AWS 리전 리전, 동일한 AWS 계정 또는 다른 AWS 계정에 있을 수 있습니다.

**독립 스냅샷 보존**  
복제본 테이블의 스냅샷 만료는 소스 테이블과 독립적이므로 필요한 경우 복제본 테이블에 다른 보존 기간을 설정할 수 있습니다. 예를 들어 복제본 테이블에 대해 90일의 보존 기간을 설정하면서 스냅샷을 30일 동안 보존하도록 소스 테이블을 구성할 수 있습니다. 복제본에 더 긴 보존 기간을 구성하면 소스에서 만료되는 스냅샷은 복제본에서 계속 사용할 수 있고 쿼리할 수 있습니다. 이 구성은 기록 분석을 위한 확장된 시간 이동 기능을 제공합니다.

**저렴한 스토리지 계층에서 복제본 테이블 유지 관리**  
성능 영향이나 운영 오버헤드 없이 액세스 패턴을 기반으로 스토리지 비용을 자동으로 최적화하는 S3 Intelligent-Tiering 스토리지 클래스를 사용하도록 대상 테이블 버킷을 구성할 수 있습니다. S3 Intelligent-Tiering은 액세스 빈도가 낮을 수 있는 복제본 테이블에 적합합니다.

S3 Tables 복제에 대한 자세한 내용은 다음 주제를 참조하세요.

**Topics**
+ [S3 Tables 복제를 사용하는 경우](#s3-tables-replication-tables-when-to-use)
+ [특성](#s3-tables-replication-tables-features)
+ [S3 Tables 복제 작동 방식](s3-tables-replication-how-replication-works.md)
+ [S3 Tables 복제 설정](s3-tables-replication-setting-up.md)
+ [S3 Tables 복제 관리](s3-tables-replication-managing.md)

# 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 생성 시스템 테이블에는 복제가 지원되지 않습니다.
+ 압축된 스냅샷을 포함한 모든 테이블 스냅샷은 소스 테이블에서 복제됩니다. 따라서 복제본 테이블에서는 압축이 지원되지 않습니다.

# S3 Tables 복제 설정
<a name="s3-tables-replication-setting-up"></a>

소스 테이블에서 최대 5개의 대상 테이블 버킷으로 테이블 복제본을 자동으로 생성하도록 복제를 설정할 수 있습니다. 복제는 버킷 수준(버킷의 모든 테이블에 적용) 또는 테이블 수준(특정 테이블의 경우)에서 구성할 수 있습니다. 이 주제에서는 Amazon S3 콘솔 또는 AWS 명령줄 인터페이스(AWS CLI)를 사용하여 복제를 구성하는 방법을 설명합니다.

복제 설정에 대한 자세한 내용은 다음 주제를 참조하세요.

**Topics**
+ [복제 설정을 위한 사전 조건](#s3-tables-replication-prerequisites)
+ [복제 구성 이해](#s3-tables-replication-understanding-configurations)
+ [버킷 수준 복제와 테이블 수준 복제 중에서 선택](#s3-tables-replication-choosing-configuration)
+ [Amazon S3 콘솔을 사용하여 복제 설정](#s3-tables-replication-console)
+ [AWS CLI를 사용하여 복제 설정](#s3-tables-replication-cli)

## 복제 설정을 위한 사전 조건
<a name="s3-tables-replication-prerequisites"></a>

복제를 구성하려면 먼저 다음이 필요합니다.

### 필수 리소스
<a name="s3-tables-replication-required-resources"></a>
+ **소스 테이블 버킷** - 복제하려는 테이블이 포함된 테이블 버킷
+ **대상 테이블 버킷** - 테이블을 복제하려는 하나 이상의 테이블 버킷(최대 5개의 대상 테이블 버킷)
+ **소스 테이블** - 복제할 소스 테이블 버킷의 기존 테이블
+ **IAM 역할** - 사용자를 대신하여 테이블을 복제할 수 있는 권한을 Amazon S3에 부여하는 IAM 역할

### 필수 권한
<a name="s3-tables-replication-required-permissions"></a>

복제를 설정하는 데 사용하는 IAM 자격 증명에는 다음 권한이 있어야 합니다.

**버킷 수준 복제의 경우:**
+ 소스 테이블 버킷의 `s3tables:PutTableBucketReplication`
+ 소스 테이블 버킷의 `s3tables:GetTableBucketReplication`
+ 복제 IAM 역할에 대한 `iam:PassRole`

**테이블 수준 복제의 경우:**
+ 소스 테이블의 `s3tables:PutTableReplication`
+ 소스 테이블의 `s3tables:GetTableReplication`
+ 복제 IAM 역할에 대한 `iam:PassRole`

**교차 계정 복제의 경우**
+ 대상 계정의 버킷 정책의 권한

### 교차 계정 복제를 위한 추가 요구 사항
<a name="s3-tables-replication-cross-account-requirements"></a>

소스 테이블 버킷과 대상 테이블 버킷이 서로 다른 AWS 계정에 있는 경우 다음 사항도 필요합니다.
+ 원본 계정에 테이블을 복제할 수 있는 권한을 부여하는 대상 테이블 버킷의 버킷 정책
+ 대상 계정 ID 및 테이블 버킷 Amazon 리소스 이름(ARN)

### 암호화된 테이블에 대한 추가 요구 사항
<a name="s3-tables-replication-encrypted-requirements"></a>

AWS KMS를 사용하여 복제본 테이블을 암호화하려는 경우:
+ 대상 리전의 KMS 키
+ IAM 복제 역할에서 KMS 키를 사용할 수 있는 권한
+ 복제 역할이 데이터를 암호화하도록 허용하는 KMS 키 정책

## 복제 구성 이해
<a name="s3-tables-replication-understanding-configurations"></a>

복제 구성은 Amazon S3가 소스 테이블 버킷에서 테이블을 복제하는 방법을 정의합니다. 복제는 두 가지 수준에서 구성할 수 있습니다.

### 버킷 수준 복제
<a name="s3-tables-replication-bucket-level"></a>

버킷 수준 복제 구성은 소스 테이블 버킷의 모든 테이블에 적용됩니다. 버킷 수준 복제를 구성하면 Amazon S3는 버킷에 생성된 기존 테이블과 새 테이블을 자동으로 복제합니다.

다음과 같은 경우 버킷 수준 복제를 사용합니다.
+ 버킷의 모든 테이블을 복제하려는 경우
+ 모든 테이블에서 일관된 복제 동작을 원하는 경우
+ 단일 구성을 사용하여 관리를 간소화하려는 경우

### 테이블 수준 복제
<a name="s3-tables-replication-table-level"></a>

테이블 수준 복제 구성은 특정 테이블에 적용됩니다. 테이블 수준 구성은 해당 특정 테이블에 대한 버킷 수준 구성을 재정의합니다.

다음과 같은 경우 테이블 수준 복제를 사용합니다.
+ 특정 테이블만 복제하려는 경우
+ 테이블마다 다른 복제 대상이 필요한 경우
+ 특정 테이블에 대한 버킷 수준 구성을 재정의하려는 경우

### 복제 구성 요소
<a name="s3-tables-replication-configuration-elements"></a>

각 복제 구성에는 다음이 포함됩니다.
+ **IAM 역할** - Amazon S3가 복제 작업을 수행하기 위해 수임하는 역할
+ **규칙** - 하나 이상의 복제 규칙(시작 시 규칙 1개로 제한). 각 규칙에는 다음이 포함됩니다.
  + **대상** - 대상 테이블 버킷 ARN(최대 5개의 대상)
  + **상태** - 규칙의 활성화 또는 비활성화 여부
+ **버전 토큰** - 구성을 업데이트할 때 쓰기 충돌을 방지하는 데 사용되는 토큰

## 버킷 수준 복제와 테이블 수준 복제 중에서 선택
<a name="s3-tables-replication-choosing-configuration"></a>

### 구성 우선 순위
<a name="s3-tables-replication-configuration-precedence"></a>

버킷 수준 구성과 테이블 수준 구성이 모두 있는 경우:
+ 특정 테이블에는 테이블 수준 구성이 우선합니다.
+ 다른 테이블은 버킷 수준 구성을 따릅니다.

## Amazon S3 콘솔을 사용하여 복제 설정
<a name="s3-tables-replication-console"></a>

이 절차에서는 Amazon S3 콘솔을 사용하여 복제를 구성하는 방법을 보여줍니다.

### 버킷 수준 복제를 설정하려면
<a name="s3-tables-replication-bucket-level-console"></a>

이 절차에서는 Amazon S3 콘솔을 사용하여 테이블 버킷 복제 구성을 생성하는 방법을 보여줍니다. 테이블 버킷 복제 구성은 소스 테이블 버킷의 모든 테이블에 적용됩니다.

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)에서 S3 콘솔을 엽니다.

1. 탐색 창에서 **테이블 버킷**을 선택합니다.

1. **테이블 버킷** 목록에서 복제를 구성할 테이블 버킷의 이름을 선택합니다.

1. [**Management**] 탭을 선택한 후

1. **테이블 버킷 복제 구성** 섹션에서 **테이블 버킷 복제 구성 생성**을 선택합니다.

1. **대상** 섹션에서 복제 대상을 구성합니다.

   1. **테이블 버킷 ARN** 필드에 대상 테이블 버킷의 ARN을 입력합니다. 형식은 `arn:aws:s3tables:region:account-id:bucket/table-bucket-name`입니다.

      또는 **S3 찾아보기**를 선택하여 계정에서 테이블 버킷을 선택합니다.

   1. (선택 사항) 대상을 추가하려면 **대상 추가**를 선택합니다. 총 5개의 대상에 최대 4개의 테이블 버킷을 추가할 수 있습니다.

1. **IAM 역할** 섹션에서 복제 역할을 구성합니다.

   1. **IAM 역할 선택 방법**에서 다음 옵션 중 하나를 선택합니다.
      + **새 IAM 역할 생성** - Amazon S3는 복제에 필요한 권한을 가진 새 역할을 생성합니다.
      + **기존 IAM 역할에서 선택** - 필요한 복제 권한이 있는 기존 역할을 선택합니다.
      + **IAM 역할 ARN 입력** - 기존 IAM 역할의 ARN을 수동으로 입력합니다.

   1. **기존 IAM 역할에서 선택**을 선택했다면 **IAM 역할** 드롭다운 목록에서 역할을 선택합니다.

   1. (선택 사항) **보기**를 선택하여 IAM 콘솔에서 선택한 역할의 권한을 검토합니다.

1. **복제 구성 생성**을 선택합니다.

   복제 구성을 생성하면 Amazon S3는 초기 채우기 프로세스를 시작합니다. **테이블 복제 상태** 섹션에서 복제 상태, 대상 테이블 ARN 및 마지막으로 복제된 메타데이터를 비롯하여 각 대상에 대해 표시되는 정보를 보며 복제 상태를 모니터링할 수 있습니다.

### 테이블 수준 복제를 설정하려면
<a name="s3-tables-replication-table-level-console"></a>

이 절차에서는 Amazon S3 콘솔을 사용하여 테이블 수준 복제 구성을 생성하는 방법을 보여줍니다. 테이블 복제 구성은 특정 테이블에 적용되며 해당 테이블에 대한 버킷 수준 복제 구성을 재정의합니다.

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)에서 S3 콘솔을 엽니다.

1. 탐색 창에서 **테이블 버킷**을 선택합니다.

1. **테이블 버킷** 목록에서 복원할 테이블이 포함된 테이블 버킷 이름을 선택합니다.

1. **테이블** 탭을 선택합니다.

1. **테이블** 목록에서 복제하려는 테이블의 이름을 선택합니다.

1. [**Management**] 탭을 선택한 후

1. **테이블 복제 구성** 섹션에서 **테이블 복제 구성 생성**을 선택합니다.

1. **대상** 섹션에서 복제 대상을 구성합니다.

   1. **테이블 버킷 ARN** 필드에 대상 테이블 버킷의 ARN을 입력합니다. 형식은 `arn:aws:s3tables:region:account-id:bucket/table-bucket-name`입니다.

      또는 **S3 찾아보기**를 선택하여 계정에서 테이블 버킷을 선택합니다.

   1. (선택 사항) 대상을 추가하려면 **대상 추가**를 선택합니다. 총 5개의 대상에 최대 4개의 테이블 버킷을 추가할 수 있습니다.

1. **IAM 역할** 섹션에서 복제 역할을 구성합니다.

   1. **IAM 역할 선택 방법**에서 다음 옵션 중 하나를 선택합니다.
      + **새 IAM 역할 생성** - Amazon S3는 복제에 필요한 권한을 가진 새 역할을 생성합니다.
      + **기존 IAM 역할에서 선택** - 필요한 복제 권한이 있는 기존 역할을 선택합니다.
      + **IAM 역할 ARN 입력** - 기존 IAM 역할의 ARN을 수동으로 입력합니다.

   1. **기존 IAM 역할에서 선택**을 선택했다면 **IAM 역할** 목록에서 역할을 선택합니다.

   1. (선택 사항) **보기**를 선택하여 IAM 콘솔에서 선택한 역할의 권한을 검토합니다.

1. **복제 구성 생성**을 선택합니다.

### 다음 단계
<a name="s3-tables-replication-what-happens-next"></a>

복제 구성 생성 후:
+ Amazon S3가 초기 채우기 프로세스를 시작하여 각 대상 버킷에 복제본 테이블 생성
+ 채우기가 시작되면 복제 상태가 **복제 중**으로 변경됨
+ **관리** 탭에서 복제 진행 상황을 모니터링할 수 있음
+ 초기 복제 시간은 소스 테이블의 크기에 따라 다릅니다.

## AWS CLI를 사용하여 복제 설정
<a name="s3-tables-replication-cli"></a>

이 절차에서는 AWS CLI를 사용하여 복제를 구성하는 방법을 보여줍니다. 계정 ID, 리전 및 버킷 이름을 실제 값으로 바꿉니다. 모든 대상 버킷을 권한에 추가합니다.

### 1단계: 복제를 위한 IAM 역할 만들기
<a name="s3-tables-replication-create-iam-role"></a>

먼저 Amazon S3가 테이블을 복제하기 위해 수임할 수 있는 IAM 역할을 생성합니다.

1. S3 Tables가 역할을 수임하도록 허용하는 신뢰 정책 문서를 생성합니다. `trust-policy.json`으로 저장합니다.

   ```
   {
     "Version": "2012-10-17"		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Service": "replication.s3tables.amazonaws.com"
         },
         "Action": "sts:AssumeRole"
       }
     ]
   }
   ```

1. IAM 역할 생성:

   ```
   aws iam create-role \
       --role-name S3TablesReplicationRole \
       --assume-role-policy-document file://trust-policy.json \
       --description "Role for S3 Tables replication"
   ```

1. 복제 권한을 부여하는 권한 정책을 생성합니다. `replication-permissions.json`으로 저장합니다.

   ```
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "s3tables:GetTable",
                   "s3tables:GetTableMetadataLocation",
                   "s3tables:GetTableMaintenanceConfiguration",
                   "s3tables:GetTableData"
               ],
               "Resource": "arn:aws:s3tables:us-east-2:111122223333:bucket/amzn-s3-demo-table-bucket-source/table/*"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "s3tables:ListTables"
               ],
               "Resource": "arn:aws:s3tables:us-east-2:111122223333:bucket/amzn-s3-demo-table-bucket-source"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "s3tables:CreateTable",
                   "s3tables:CreateNamespace"
               ],
               "Resource": "arn:aws:s3tables:us-east-2:444455556666:bucket/amzn-s3-demo-table-bucket-destination"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "s3tables:PutTableData",
                   "s3tables:GetTableData",
                   "s3tables:UpdateTableMetadataLocation",
                   "s3tables:PutTableMaintenanceConfiguration"
               ],
               "Resource": "arn:aws:s3tables:us-east-2:444455556666:bucket/amzn-s3-demo-table-bucket-destination/table/*"
           }
       ]
   }
   ```

1. 역할에 권한 정책 연결:

   ```
   aws iam put-role-policy \
       --role-name S3TablesReplicationRole \
       --policy-name S3TablesReplicationPermissions \
       --policy-document file://replication-permissions.json
   ```

1. (선택 사항) KMS 암호화를 사용하는 경우 정책에 KMS 권한을 추가합니다.

   ```
   {
     "Effect": "Allow",		 	 	 
     "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey",
        "kms:Encrypt"
   
     ],
     "Resource": "arn:aws:kms:us-east-1:111122223333:key/SOURCE-KEY-ID"
   },
   {
     "Effect": "Allow",
     "Action": [
       "kms:Decrypt",
       "kms:GenerateDataKey"
     ],
     "Resource": [
       "arn:aws:kms:us-west-2:444455556666:key/DESTINATION-KEY-ID-1"
     ]
   }
   ```

### (교차 계정만 해당) 2단계: 대상 버킷 정책 구성
<a name="s3-tables-replication-cross-account-policy"></a>

다른 AWS 계정으로 복제하는 경우 대상 계정은 소스 계정에 권한을 부여해야 합니다.

1. 대상 계정에서 대상 테이블 버킷에 대한 버킷 정책을 생성합니다. `destination-bucket-policy.json`으로 저장합니다.

   ```
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Principal": {
                   "AWS": "arn:aws:iam::444455556666:role/cross-account-test"
               },
               "Action": [
                   "s3tables:PutTableData",
                   "s3tables:GetTableData",
                   "s3tables:UpdateTableMetadataLocation",
                   "s3tables:PutTableMaintenanceConfiguration"
               ],
               "Resource": "arn:aws:s3tables:us-east-2:111122223333:bucket/amzn-s3-demo-table-bucket-cross-account-destination/table/*"
           },
           {
               "Effect": "Allow",
               "Principal": {
                   "AWS": "arn:aws:iam::444455556666:role/cross-account-test"
               },
               "Action": [
                   "s3tables:CreateTable",
                   "s3tables:CreateNamespace"
               ],
               "Resource": "arn:aws:s3tables:us-east-2:111122223333:bucket/amzn-s3-demo-table-bucket-cross-account-destination"
           }
       ]
   }
   ```

1. S3 Tables API를 사용하여 정책을 적용합니다.

   ```
   aws s3tables put-table-bucket-policy \
       --table-bucket-arn arn:aws:s3tables:us-west-2:444455556666:bucket/amzn-s3-demo-table-bucket-cross-account-destination \
       --policy file://destination-bucket-policy.json \
       --profile destination-account
   ```

1. 소스 KMS 키를 수정하여 S3 Tables 복제 및 유지 관리를 허용합니다.

   ```
   {
     "Version": "2012-10-17",		 	 	 
     "Id": "key-consolepolicy-3",
     "Statement": [
           {
               "Sid": "allow replication to decrypt",
               "Effect": "Allow",
               "Principal": {
                   "AWS": "replication_role_arn"
               },
               "Action": [
                   "kms:Decrypt",
                   "kms:GenerateDataKey"
               ],
               "Resource": "arn:aws:kms:us-east-1:111122223333:key/SOURCE-KEY-ID"
           },
           {
               "Sid": "allow maintenance",
               "Effect": "Allow",
               "Principal": {
                   "Service": "maintenance.s3tables.amazonaws.com"
               },
               "Action": [
                   "kms:Decrypt",
                   "kms:GenerateDataKey"
               ],
               "Resource": "arn:aws:kms:us-east-1:111122223333:key/SOURCE-KEY-ID"
           }
     ]
   }
   ```

1. 마찬가지로 대상 KMS 키 정책에 권한을 추가합니다.

   ```
   {
       "Version": "2012-10-17",		 	 	 
       "Id": "key-policy-3",
       "Statement": [
           {
               "Sid": "allow maintenance",
               "Effect": "Allow",
               "Principal": {
                   "Service": "maintenance.s3tables.amazonaws.com"
               },
               "Action": [
                   "kms:Decrypt",
                   "kms:GenerateDataKey"
               ],
               "Resource": "arn:aws:kms:us-west-2:444455556666:key/DESTINATION-KEY-ID-1"
           },
           {
               "Sid": "allow replication to encrypt/decrypt",
               "Effect": "Allow",
               "Principal": {
                   "AWS": "replication_role_arn"
               },
               "Action": [
                   "kms:Encrypt",
                   "kms:Decrypt",
                   "kms:GenerateDataKey"
               ],
               "Resource": "arn:aws:kms:us-west-2:444455556666:key/DESTINATION-KEY-ID-1"
           }
       ]
   ```

### 2단계: 복제 구성 생성
<a name="s3-tabales-replication-cli"></a>

AWS CLI를 사용하여 테이블 버킷 수준 또는 테이블 수준에서 복제 구성을 생성할 수 있습니다. 자세한 내용은 다음 절차를 참조하세요.

#### 버킷 수준 복제 구성 생성
<a name="s3-tables-replication-bucket-level-cli"></a>

이 접근 방식을 사용하여 버킷의 모든 테이블을 복제합니다.

1. 복제 구성 파일을 만듭니다. `bucket-replication-config.json`으로 저장합니다.  
**Example : 동일한 계정의 단일 대상**  

   ```
   {
     "role": "arn:aws:iam::111122223333:role/S3TablesReplicationRole",
     "rules": [
       {
         "destinations": [
           {
             "destinationTableBucketARN": "arn:aws:s3tables:us-west-2:111122223333:bucket/amzn-s3-demo-table-bucket-dr"
           }
         ]
       }
     ]
   }
   ```  
**Example : 리전 간 여러 대상**  

   ```
   {
     "role": "arn:aws:iam::111122223333:role/S3TablesReplicationRole",
     "rules": [
       {
         "destinations": [
           {
             "destinationTableBucketARN": "arn:aws:s3tables:us-west-2:111122223333:bucket/amzn-s3-demo-table-bucket-dr"
           },
           {
             "destinationTableBucketARN": "arn:aws:s3tables:eu-west-1:111122223333:bucket/amzn-s3-demo-table-bucket-eu"
           },
           {
             "destinationTableBucketARN": "arn:aws:s3tables:ap-south-1:111122223333:bucket/amzn-s3-demo-table-bucket-apac"
           }
         ]
       }
     ]
   }
   ```  
**Example : 교차 계정 복제**  

   ```
   {
     "role": "arn:aws:iam::111122223333:role/S3TablesReplicationRole",
     "rules": [
       {
         "destinations": [
           {
             "destinationTableBucketARN": "arn:aws:s3tables:us-east-1:444455556666:bucket/amzn-s3-demo-table-bucket-partner"
           }
         ]
       }
     ]
   }
   ```

1. 버킷 수준 복제 구성 적용:

   ```
   aws s3tables put-table-bucket-replication \
       --table-bucket-arn arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-table-bucket \
       --configuration file://bucket-replication-config.json
   ```

   예상 결과:

   ```
   {
     "versionToken": "3HL4kqtJl40Nr8X8gdRQBpUMLUo",
     "status": "Success"
   }
   ```

#### 테이블 수준 복제 구성 생성
<a name="s3-tables-replication-table-level-cli"></a>

이 접근 방식을 사용하여 특정 테이블을 복제하거나 버킷 수준 복제를 재정의합니다.

1. 복제 구성 파일을 만듭니다. `table-replication-config.json`으로 저장합니다.  
**Example : 단일 테이블 복제**  

   ```
   {
     "role": "arn:aws:iam::111122223333:role/S3TablesReplicationRole",
     "rules": [
       {
         "destinations": [
           {
             "destinationTableBucketARN": "arn:aws:s3tables:us-west-2:111122223333:bucket/amzn-s3-demo-table-bucket-analytics-bucket"
           }
         ]
       }
     ]
   }
   ```  
**Example : 여러 대상이 있는 테이블**  

   ```
   {
     "role": "arn:aws:iam::111122223333:role/S3TablesReplicationRole",
     "rules": [
       {
         "destinations": [
           {
             "destinationTableBucketARN": "arn:aws:s3tables:us-west-2:111122223333:bucket/amzn-s3-demo-table-bucket-dr"
           },
           {
             "destinationTableBucketARN": "arn:aws:s3tables:eu-west-1:111122223333:bucket/amzn-s3-demo-table-bucket-eu"
           }
         ]
       }
     ]
   }
   ```

1. 테이블 수준 복제 구성 적용:

   ```
   aws s3tables put-table-replication \
       --table-arn arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-table-bucket/table/amzn-s3-demo-table-bucket-sales-data \
       --configuration file://table-replication-config.json
   ```

   예상 결과:

   ```
   {
     "versionToken": "xT2LZkFZ0UuTC2h8XqtGLx2Ak6M",
     "status": "Success"
   }
   ```

# S3 Tables 복제 관리
<a name="s3-tables-replication-managing"></a>

S3 Tables 복제를 구성한 후 복제본 상태를 모니터링하여 복제된 항목을 확인할 수 있습니다. 소스 테이블의 **관리** 탭에 있는 Amazon S3 콘솔에서 또는 AWS CLI를 사용하여 복제 상태를 확인할 수 있습니다. 자세한 내용은 [S3 Tables 복제 설정](s3-tables-replication-setting-up.md) 섹션을 참조하세요. 이 주제에서는 복제를 모니터링하고 복제가 완료되었는지, 진행 중인지 또는 실패했는지를 나타내는 다양한 상태 값을 이해하는 방법을 설명합니다.

## 복제 상태 모니터링
<a name="s3-tables-replication-monitoring-status"></a>

복제 작업은 복제된 테이블에 대해 지속적으로 실행됩니다. GetTableReplicationStatus API를 사용하여 복제 상태를 쿼리하거나 Amazon S3 콘솔에서 볼 수 있습니다.

### AWS CLI를 사용하여 복제 상태를 가져오려면
<a name="s3-tables-replication-status-cli"></a>

다음 예제에서는 GetTableReplicationStatus API를 사용하여 복제 상태를 가져옵니다.

```
aws s3tables get-table-replication-status \
    --table-arn arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-table-bucket/table/sales-data
```

예상 결과:

```
{
  "sourceTableARN": "arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-table-bucket/table/sales-data",
  "destinations": [
    {
      "replicationStatus": "COMPLETED",
      "destinationBucketARN": "arn:aws:s3tables:us-west-2:111122223333:bucket/amzn-s3-demo-table-bucket",
      "destinationTableARN": "arn:aws:s3tables:us-west-2:111122223333:bucket/amzn-s3-demo-table-bucket/table/sales-data",
      "lastSuccessfulReplicatedUpdate": {
        "metadataLocation": "latest_table_metadata.json",
        "timestamp": "2025-11-15T14:30:00Z"
      }
    },
    {
      "replicationStatus": "PENDING",
      "destinationBucketARN": "arn:aws:s3tables:eu-west-1:111122223333:bucket/amzn-s3-demo-table-bucket-eu-bucket",
      "destinationTableARN": "arn:aws:s3tables:eu-west-1:111122223333:bucket/amzn-s3-demo-table-bucket-eu-bucket/table/sales-data",
      "lastSuccessfulReplicatedUpdate": {
        "metadataLocation": "latest_table_metadata.json",
        "timestamp": "2025-11-15T14:25:00Z"
      }
    }
  ]
}
```

자세한 내용은 *AWS CLI 명령 참조*에서 [get-table-replication-status](https://docs.aws.amazon.com/cli/latest/reference/s3tables/get-table-replication-status.html)를 참조하세요.

### 응답 이해
<a name="s3-tables-replication-understanding-response"></a>

응답에는 다음 요소가 포함됩니다.
+ **sourceTableARN** - 복제되는 소스 테이블의 ARN입니다.
+ **대상** - 구성된 복제 대상마다 하나씩 대상 상태 객체의 배열입니다. 각 대상 객체에는 다음이 포함됩니다.
  + **replicationStatus** - 이 대상의 현재 복제 상태(완료, 보류 중 또는 실패)입니다.
  + **destinationBucketARN** - 대상 테이블 버킷의 ARN입니다.
  + **destinationTableARN** - 대상 버킷에 있는 복제본 테이블의 ARN입니다.
  + **lastSuccessfulReplicatedUpdate** – 가장 최근에 성공한 복제에 대한 정보:
    + **metadataLocation** - 마지막으로 성공적으로 복제된 Iceberg 메타데이터 파일 이름입니다. 이를 소스 테이블의 현재 메타데이터 위치와 비교하여 복제가 최신 상태인지 확인합니다.
    + **timestamp** - 이 메타데이터 파일이 대상으로 복제된 시간입니다.
  + **failureMessage**(상태가 실패인 경우에만 표시됨) - 복제가 실패한 이유를 설명하는 자세한 오류 메시지입니다.

### 복제 상태 값
<a name="s3-tables-replication-status-values"></a>

복제는 각 대상에 대해 세 가지 상태를 가질 수 있습니다.
+ **완료** - 모든 소스 테이블 스냅샷이 대상에 성공적으로 복제되었습니다. 소스 테이블의 최신 메타데이터 위치가 마지막으로 복제된 메타데이터 위치와 일치합니다.
+ **보류 중** - 복제가 진행 중이거나 새 커밋이 복제되기를 기다리고 있습니다. 소스 테이블의 최신 메타데이터 위치가 마지막으로 복제된 메타데이터 위치와 다릅니다.
+ **실패** - 이 테이블의 마지막 복제 작업이 실패했습니다. 새 업데이트가 복제되지 않습니다.