입문5분 분량

DynamoDB 테이블을 다른 계정이나 리전으로 복사하는 방법

DynamoDB에는 원클릭 "테이블 복사" 명령이 없습니다 — AWS CLI에도, 콘솔에도 없습니다. 계정이나 리전 간에 테이블을 복사하거나 마이그레이션하려면 네 가지 접근 방식 중 하나를 골라야 하며, 각각 비용, 다운타임, 충실도 면에서 서로 다른 트레이드오프가 있습니다. 이 가이드는 네 가지 모두와, 프로덕션에서 물리는 운영상의 함정까지 다룹니다.

DynamoDB 테이블을 다른 계정이나 리전으로 어떻게 복사하나요?

네이티브 테이블 복사 명령은 없습니다. 네 가지 접근 방식 중 하나를 고르세요: 작은 일회성 복사에는 Scan + BatchWriteItem 스크립트, 큰 테이블에는 S3 내보내기 후 가져오기, 완전한 충실도가 필요한 계정 간 이동에는 AWS Backup 복사 + 복원, 지속적인 실시간 복제에는 글로벌 테이블입니다. 모든 복원 또는 가져오기는 새 테이블을 만듭니다.

상황최선의 접근 방식
작은 테이블, 일회성, 완전한 제어Scan + BatchWriteItem 스크립트
큰 테이블, 스냅샷을 감내할 수 있음S3 내보내기 → 가져오기(새 테이블 생성)
복원을 포함한 계정 간 / 리전 간 복사AWS Backup 복사 + 복원
지속적인 실시간 복제(일회성 복사가 아님)글로벌 테이블

보편적으로 "옳은" 접근 방식은 없습니다 — 테이블 크기, 특정 시점 스냅샷이 필요한지 실시간 데이터가 필요한지, 대상이 새 테이블인지 기존 테이블인지에 따라 달라집니다.

접근 방식 1: Scan + BatchWriteItem(스크립트)

가장 단순한 방식입니다: 소스에서 모든 항목을 Scan으로 읽고, 대상에 BatchWriteItem으로 씁니다. 스크립트가 양쪽 자격 증명을 보유하고 있는 한(또는 대상 계정에서 역할을 가정하는 한) 계정 간, 리전 간 모두 동작합니다.

# 스케치 — 소스를 읽고 대상에 쓰기(의사 코드; 실제로는 SDK를 사용하세요)
aws dynamodb scan --table-name SourceTable --region us-east-1 \
  > items.json
# Items[]를 BatchWriteItem RequestItems로 변환한 다음:
aws dynamodb batch-write-item --request-items file://batch.json \
  --region eu-west-1

함정은 실제로 존재하며 놓치기 쉽습니다:

  • BatchWriteItem은 호출당 25개 항목 또는 16MB로 제한됩니다 — 청크로 나눠야 하며, 단일 호출이 지수 백오프로 재시도해야 하는 미처리 항목을 반환할 수 있습니다 (API 참조).
  • 쓰기는 쓰기 용량을 소비합니다. 프로비저닝된 대상에서는 금세 ProvisionedThroughputExceededException에 도달하고, 온디맨드는 더 많이 흡수하지만 그래도 파티션별 소프트 한도가 있습니다. 시작하기 전에 대상의 용량에 맞춰 쓰기 부하를 가늠하세요.
  • Scan은 테이블 전체를 읽고 모든 항목을 과금합니다 — 고전적인 Query 대 Scan 비용입니다. 큰 테이블은 LastEvaluatedKey로 페이지를 넘기는 것도 의미합니다. 페이지네이션을 보세요.
  • 원자적이지 않습니다. 스캔이 진행되는 동안 쓰여진 항목은 누락될 수 있습니다 — 소스가 정지 상태일 때만 일관된 스냅샷을 얻습니다.

작은 테이블이거나 복사 중에 변환/필터링이 필요할 때 가장 좋습니다.

접근 방식 2: S3로 내보낸 다음 새 테이블로 가져오기

큰 테이블의 경우, DynamoDB의 관리형 S3 내보내기S3 가져오기는 용량을 전혀 두들기지 않습니다.

내보내기는 테이블을 S3 버킷으로 스냅샷합니다 (동작 방식):

  • 소스 테이블에 특정 시점 복구(PITR)가 활성화되어 있어야 합니다.
  • 읽기 용량을 소비하지 않으며 테이블 성능에 영향이 없습니다 — 라이브 테이블이 아니라 연속 백업에서 읽기 때문입니다.
  • DynamoDB JSON 또는 Amazon Ion 형식을 출력합니다. (DynamoDB-JSON 와이어 형식이 타입 태그까지 포함해 그대로 S3에 도착합니다.)
  • 다른 계정이 소유한 S3 버킷이나 다른 리전의 버킷에도 쓸 수 있습니다.
  • 전체 및 증분 내보내기를 지원합니다(증분 내보내기 GA, 2023년 9월).

그런 다음 가져오기가 그 S3 데이터로부터 새 테이블을 만듭니다 (동작 방식):

  • 완전히 새로운 테이블로만 가져옵니다 — 기존 테이블로는 가져올 수 없습니다.
  • 새 테이블에 쓰기 용량을 소비하지 않습니다.
  • CSV, DynamoDB JSON, 또는 Amazon Ion을 받습니다(선택적으로 GZIP/ZSTD 압축).
  • 소스 S3 버킷은 다른 계정이나 다른 리전에 있을 수 있습니다.
  • 가져오기 시점에 보조 인덱스를 정의할 수 있으며, 가져오기가 완료되는 즉시 쿼리할 수 있습니다.

특정 시점 스냅샷(실시간 데이터가 아님)으로 충분한, 큰 규모의 계정 간/리전 간 마이그레이션에 가장 깔끔한 경로입니다.

접근 방식 3: AWS Backup 복사 + 복원

이미 AWS Backup을 사용하고 있다면, 복구 지점을 계정과 리전 간에 복사합니다 (계정 간 마이그레이션 가이드):

  1. 소스 테이블을 백업 볼트에 백업합니다.
  2. 백업을 대상 계정/리전의 볼트로 복사합니다.
  3. 대상에서 새 테이블로 복원합니다.

주요 제약:

  • 계정 간 복사는 두 계정이 같은 AWS Organization에 있어야 합니다.
  • 복원은 항상 새 테이블을 만듭니다 — 기존 테이블 위에 복원할 수 없습니다.
  • 글로벌 보조 인덱스는 기본적으로 보존됩니다(복원 시간/비용을 줄이려면 일부 또는 전부 제외할 수 있음); 복원 시점에 새 인덱스를 추가할 수는 없습니다.
  • 암호화 함정: 리전 간 복원에서 같은 KMS 키를 유지하려면 다중 리전 키가 필요하고, 계정 간 복원에서는 키를 대상 계정과 공유해야 합니다. AWS 소유 및 AWS 관리형 키는 공유하거나 다중 리전으로 만들 수 없습니다 (복원 암호화 노트).

접근 방식 4: 글로벌 테이블(실시간 복제, 일회성 복사가 아님)

글로벌 테이블은 테이블을 리전 간에 — 그리고 이제 선택적으로 계정 간에 (다중 계정 GA, 2026년 2월) — 지속적으로 복제합니다. 모든 복제본이 읽기와 쓰기를 처리하며(다중 활성), 비동기적인 후속 쓰기 우선 복제를 사용합니다 (글로벌 테이블 문서).

이것은 "복사하고 떠나는" 도구가 아닙니다 — 지속적인 복제입니다. 깔끔한 일회성 마이그레이션이 아니라, 대상 리전을 무기한 동기 상태로 유지하고 싶을 때(DR, 저지연 로컬 읽기) 사용하세요. 기존 테이블에 리전을 추가하면 DynamoDB가 기존 데이터를 새 복제본으로 백필합니다.

운영상의 함정(모든 접근 방식)

  • GSI는 다시 만드는 데 공짜가 아닙니다. 스캔+쓰기 복사는 인덱스를 가져오지 않습니다 — 대상에 직접 정의해야 하고, 인덱스는 별도로 백필되며(비용도) 발생합니다. 대상의 GSI 대 LSI 레이아웃을 미리 계획하세요. LSI는 테이블 생성 시점에만 만들 수 있습니다 (LSI 문서).
  • 용량 모드는 이전되지 않습니다. 새 테이블은 소스가 아니라 여러분이 설정한 모드로 시작합니다. 스캔+쓰기 복사 전에 쓰기 부하를 추정하세요 — 대표 항목의 크기를 항목 크기 계산기로 재고 항목 수를 곱해 WCU를 대략 가늠하세요.
  • TTL, 스트림, 자동 확장, 태그는 데이터가 아니라 테이블 설정입니다 — 어떤 복사 방법도 이들을 모두 가져오지 않습니다. 대상에서 다시 적용하세요.
  • DynamoDB JSON ≠ 일반 JSON. 내보내기와 스캔은 타입 태그가 붙은 DynamoDB-JSON을 내보냅니다. 경로 중간에 변환한다면 DynamoDB JSON 변환기가 마샬링을 처리합니다.

FAQ

DynamoDB 테이블을 복사하는 AWS CLI 명령이 있나요? 아니요. 네이티브 copy-table 명령은 없습니다. scan + batch-write-item을 조합하거나, 관리형 내보내기/가져오기 또는 AWS Backup 기능을 사용합니다.

DynamoDB 테이블을 다른 계정으로 복사하려면 어떻게 하나요? 세 가지 옵션이 있습니다: 양쪽 계정의 자격 증명을 가진 스캔+쓰기 스크립트, S3 내보내기/가져오기(버킷은 계정 간 가능), 또는 AWS Backup 복사+복원(두 계정이 같은 AWS Organization에 있어야 함).

DynamoDB 테이블을 다른 리전으로 복사하려면 어떻게 하나요? S3 내보내기/가져오기와 AWS Backup 모두 리전 간을 지원합니다. 일회성 복사가 아니라 지속적인 리전 간 동기화가 필요하면, 대상 리전에 글로벌 테이블 복제본을 추가하세요.

테이블을 복사하면 인덱스도 복사되나요? S3 가져오기와 AWS Backup 복원은 보조 인덱스를 유지/정의하게 해줍니다. 스캔+쓰기 스크립트는 그렇지 않습니다 — 대상에서 직접 인덱스를 만들어야 하고, 인덱스는 별도로 백필됩니다.

기존 DynamoDB 테이블로 가져올 수 있나요? 아니요. DynamoDB의 S3 가져오기와 AWS Backup 복원은 둘 다 테이블을 만듭니다. 기존 테이블에 병합하려면 스캔+쓰기 스크립트를 사용하세요.


GUI는 전환을 합리적으로 만들어 줍니다: 소스와 대상을 나란히 둘러보고, 복사 후 항목 수와 몇 개의 샘플 레코드를 검증하고, 스캔 스크립트를 작성하지 않고도 즉석 점검을 실행할 수 있습니다. DynoTable 다운로드로 마이그레이션 중 계정과 리전을 넘나들며 테이블을 점검하세요.

업데이트됨