

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

# Amazon QLDB에서 저널 데이터 내보내기
<a name="export-journal"></a>

**중요**  
지원 종료 공지: 기존 고객은 07/31/2025에 지원이 종료될 때까지 Amazon QLDB를 사용할 수 있습니다. 자세한 내용은 [Amazon QLDB 원장을 Amazon Aurora PostgreSQL로 마이그레이션](https://aws.amazon.com/blogs/database/migrate-an-amazon-qldb-ledger-to-amazon-aurora-postgresql/)을 참조하세요.

Amazon QLDB는 *저널*이라고 하는 변경 불가능한 트랜잭션 로그를 데이터 스토리지에 사용합니다. 저널은 커밋된 데이터의 모든 변경 내용을 추적하고 시간이 지나면서 완전하고 확인 가능한 시간대별 변경 기록을 유지합니다.

분석, 감사, 데이터 보존, 확인, 다른 시스템으로 내보내기 등 다양한 목적으로 원장에 있는 저널 콘텐츠에 액세스할 수 있습니다. 다음 주제에서는 원장의 저널 [블록](journal-contents.md)을 AWS 계정의 Amazon Simple Storage Service(S3) 버킷으로 내보내는 방법을 설명합니다. 저널 내보내기 작업은 Amazon S3의 데이터를 [Amazon Ion](ion.md) 형식의 텍스트 또는 이진수 표현이나 *JSON Lines* 텍스트 형식의 객체로 기록합니다.

JSON Lines 형식에서 내보낸 데이터 객체의 각 블록은 줄 바꿈으로 구분된 유효한 JSON 객체입니다. 이 형식을 사용하여 JSON 내보내기를 Amazon Athena와 같은 분석 도구와 직접 통합할 수 있습니다. 이러한 서비스는 줄 바꿈으로 구분된 JSON을 자동으로 구문 분석할 수 있기 AWS Glue 때문입니다. 데이터 형식에 대한 자세한 정보는 [JSON Lines](https://jsonlines.org/)을 참조하세요.

Amazon S3에 대한 자세한 내용은 [Amazon Simple Storage Service 사용 설명서](https://docs.aws.amazon.com/AmazonS3/latest/userguide/)를 참조하세요.

**참고**  
내보내기 작업의 출력 형식으로 JSON을 지정하는 경우, QLDB는 내보낸 데이터 객체의 Ion 저널 데이터를 JSON으로 하향 변환합니다. 자세한 내용은 [JSON으로 하향 변환](export-journal.output.md#export-journal.output.json)을 참조하십시오.

**Topics**
+ [QLDB에서 저널 내보내기 요청](export-journal.request.md)
+ [QLDB의 저널 내보내기 출력](export-journal.output.md)
+ [QLDB의 저널 내보내기 권한](export-journal.perms.md)
+ [저널 내보내기의 일반적인 오류](export-journal.errors.md)

# QLDB에서 저널 내보내기 요청
<a name="export-journal.request"></a>

**중요**  
지원 종료 공지: 기존 고객은 07/31/2025에 지원이 종료될 때까지 Amazon QLDB를 사용할 수 있습니다. 자세한 내용은 [Amazon QLDB 원장을 Amazon Aurora PostgreSQL로 마이그레이션](https://aws.amazon.com/blogs/database/migrate-an-amazon-qldb-ledger-to-amazon-aurora-postgresql/)을 참조하세요.

Amazon QLDB는 지정된 날짜 및 시간 범위와 지정된 Amazon S3 버킷 대상으로 저널 블록 내보내기를 요청하는 API를 제공합니다. 저널 내보내기 작업은 [Amazon Ion](ion.md) 형식의 텍스트 또는 이진 표현이나 [JSON Lines](https://jsonlines.org/) 텍스트 형식으로 데이터 객체를 쓸 수 있습니다. AWS Management Console, AWS SDK 또는 AWS Command Line Interface (AWS CLI)를 사용하여 내보내기 작업을 생성할 수 있습니다.

**Topics**
+ [AWS Management Console](#export-journal.request.con)
+ [QLDB API](#export-journal.request.api)
+ [내보내기 작업 만료](#export-journal.request.expiration)

## AWS Management Console
<a name="export-journal.request.con"></a>

다음 단계에 따라 QLDB 콘솔을 사용하여 QLDB에서 저널 내보내기 요청을 제출하세요.

**내보내기를 요청하려면(콘솔)**

1. 에 로그인 AWS Management Console하고 [https://console.aws.amazon.com/qldb](https://console.aws.amazon.com/qldb) Amazon QLDB 콘솔을 엽니다.

1. 탐색 창에서 **내보내기**를 선택합니다.

1. **내보내기 작업 생성**을 선택합니다.

1. **내보내기 작업 생성** 페이지에서 다음 내보내기 설정을 입력합니다.
   + **원장** - 내보내기하려는 저널 블록이 있는 원장입니다.
   + **시작 날짜 및 시간** - 내보내기할 저널 블록 범위의 포함되는 시작 타임스탬프로, 협정 세계시(UTC) 기준입니다. 이 타임스탬프는 **종료 날짜 및 시간**보다 이전이어야 합니다. 원장의 `CreationDateTime`보다 이전인 시작 타임스탬프를 제공하는 경우 QLDB는 기본값을 원장의 `CreationDateTime`으로 설정합니다.
   + **종료 날짜 및 시간** - 내보낼 저널 블록 범위의 불포함되는 종료 타임스탬프(UTC)입니다. 이 날짜와 시간은 미래일 수 없습니다.
   + **저널 블록 대상** - 내보내기 작업이 데이터 객체를 기록하는 Amazon S3 버킷 및 접두사 이름. 다음 Amazon S3 URI 형식을 사용하세요.

     ```
     s3://amzn-s3-demo-qldb-cloudtrail/prefix/
     ```

     출력 객체에 대해 S3 버킷 이름과 선택적 접두사 이름을 지정해야 합니다. 다음은 예입니다.

     ```
     s3://amzn-s3-demo-qldb-cloudtrail/journalExport/
     ```

     버킷 이름과 접두사는 모두 Amazon S3 이름 지정 규칙 및 규칙을 준수해야 합니다. 버킷 이름 지정에 대한 자세한 내용은 *Amazon S3 개발자 안내서*의 [버킷 규제 및 제한](https://docs.aws.amazon.com/AmazonS3/latest/userguide/BucketRestrictions.html)을 참조하세요. 객체 이름 접두사에 대한 자세한 내용은 [객체 키와 메타데이터](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingMetadata.html) 섹션을 참조하세요.
**참고**  
크로스 리전 쿼리는 지원되지 않습니다. 지정된 Amazon S3 버킷은 원장 AWS 리전 과 동일한에 있어야 합니다.
   + **S3 암호화** - 내보내기 작업에서 Amazon S3 버킷에 데이터를 쓰기 위해 사용하는 암호화 설정입니다. Amazon S3의 서버 측 암호화 옵션에 대한 자세한 내용은 *Amazon S3 개발자 안내서*의 [서버 측 암호화를 사용한 데이터 보호](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html)를 참조하세요.
     + **버킷 기본 암호화** - 지정된 Amazon S3 버킷의 기본 암호화 설정을 사용합니다.
     + **AES-256** - Amazon S3 관리형 키(SSE-S3)로 서버 측 암호화를 사용.
     + **AWS-KMS** - AWS KMS 관리형 키를 사용한 서버 측 암호화(SSE-KMS)를 사용합니다.

       **다른 AWS KMS key선택** 옵션과 함께 이 유형을 선택하는 경우, 다음 Amazon 리소스 이름(ARN)형식으로 대칭 암호화 KMS 키도 지정해야 합니다.

       ```
       arn:aws:kms:aws-region:account-id:key/key-id
       ```
   + **서비스 액세스** - Amazon S3 버킷에 QLDB 쓰기 권한을 부여하는 IAM 역할입니다. 해당하는 경우 IAM 역할은 QLDB에 KMS 키를 사용할 수 있는 권한도 부여해야 합니다.

     *저널 내보내기를 요청할 때 QLDB에 역할을 전달하려면 IAM 역할 리소스에서 `iam:PassRole` 작업을 수행할 수 있는 권한이 있어야 합니다.*
     + **새 서비스 역할 생성 및 사용** - 콘솔에서 지정된 Amazon S3 버킷에 필요한 권한을 가진 새 역할을 생성하도록 합니다.
     + **기존 서비스 역할 사용** - IAM에서 이 역할을 수동으로 생성하는 방법을 알아보려면 [내보내기 권한](export-journal.perms.md) 섹션을 참조하세요.
   + **출력 형식** - 내보낸 저널 데이터의 출력 형식
     + **Ion 텍스트** - (기본값)Amazon Ion의 텍스트 표현
     + **Ion 이진수** - Amazon 이온의 이진수 표현
     + **JSON** - 줄바꿈으로 구분된 JSON 텍스트 형식

       JSON을 선택하면 QLDB는 내보낸 데이터 객체의 Ion 저널 데이터를 JSON으로 하향 변환합니다. 자세한 내용은 [JSON으로 하향 변환](export-journal.output.md#export-journal.output.json)을 참조하십시오.

1. 원하는 대로 설정되었으면 **내보내기 작업 생성**을 선택합니다.

   내보내기 작업을 완료하는 데 걸리는 시간은 데이터 크기에 따라 다릅니다. 요청을 성공적으로 제출하면 콘솔이 기본 **내보내기** 페이지로 돌아가고 내보내기 작업이 현재 상태와 함께 나열됩니다.

1. Amazon S3 콘솔에서 내보내기 객체를 볼 수 있습니다.

   [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)에서 S3 콘솔을 엽니다.

   이러한 출력 객체의 형식에 대한 자세한 내용은 [QLDB의 저널 내보내기 출력](export-journal.output.md) 섹션을 참조하세요.

**참고**  
내보내기 작업은 완료 후 7일이 지나면 만료됩니다. 자세한 내용은 [내보내기 작업 만료](#export-journal.request.expiration)을 참조하십시오.

## QLDB API
<a name="export-journal.request.api"></a>

 AWS SDK 또는와 함께 Amazon QLDB API를 사용하여 저널 내보내기를 요청할 수도 있습니다 AWS CLI. 애플리케이션 프로그램에서 사용할 수 있는 다음과 같은 기능이 QLDB API에서 제공됩니다.
+ `ExportJournalToS3` - 주어진 원장에서 날짜 및 시간 범위 내의 저널 콘텐츠를 주어진 Amazon S3 버킷으로 내보냅니다. 내보내기 작업은 Amazon Ion 형식의 텍스트 또는 이진수 표현이나 JSON Lines 텍스트 형식의 객체로 데이터를 쓸 수 있습니다.
+ `DescribeJournalS3Export` - 저널 내보내기 작업에 대한 자세한 정보를 반환합니다. 출력에는 현재 상태, 작성 시간, 원본 내보내기 요청의 파라미터가 포함됩니다.
+ `ListJournalS3Exports` - 현재 AWS 계정 및 리전과 관련된 모든 원장에 대한 저널 내보내기 작업 설명 목록을 반환합니다. 각 내보내기 작업 설명의 출력에는 `DescribeJournalS3Export`에서 반환한 것과 동일한 세부 정보가 포함됩니다.
+ `ListJournalS3ExportsForLedger` - 주어진 원장에 대한 저널 내보내기 작업 설명 목록을 반환합니다. 각 내보내기 작업 설명의 출력에는 `DescribeJournalS3Export`에서 반환한 것과 동일한 세부 정보가 포함됩니다.

이러한 API작업 설명 전체를 보려면 [Amazon QLDB API 참조](api-reference.md) 섹션을 참조하세요.

를 사용하여 저널 데이터를 내보내는 방법에 대한 자세한 AWS CLI내용은 [AWS CLI 명령 참조](https://docs.aws.amazon.com/cli/latest/reference/qldb/index.html)를 참조하세요.

### 샘플 애플리케이션(Java)
<a name="export-journal.request.api.sample"></a>

기본 내보내기 작업의 Java 코드 예제는 GitHub 리포지토리 [aws-samples/amazon-qldb-dmv-sample-java](https://github.com/aws-samples/amazon-qldb-dmv-sample-java)를 참조하세요. 이 샘플 애플리케이션을 다운로드하여 설치하는 방법에 대한 자세한 내용은 [Amazon QLDB Java 샘플 애플리케이션 설치](sample-app.java.md) 섹션을 참조하세요. 내보내기를 요청하기 전에 [Java 자습서](getting-started.java.tutorial.md)의 1\$13단계에 따라 샘플 원장을 생성하고 샘플 데이터와 함께 로드해야 합니다.

다음 클래스의 자습서 코드는 내보내기 생성, 내보내기 상태 확인, 내보내기 출력 처리의 예를 제공합니다.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/qldb/latest/developerguide/export-journal.request.html)

## 내보내기 작업 만료
<a name="export-journal.request.expiration"></a>

완료된 저널 내보내기 작업에는 7일의 보존 기간이 적용됩니다. 이 한도가 만료되면 해당 파일은 자동으로 영구 삭제됩니다. 이 만료 기간은 고정 한도이며 변경할 수 없습니다.

완료된 내보내기 작업이 삭제된 후에는 더 이상 QLDB 콘솔 또는 다음 API 작업을 사용하여 작업에 대한 메타데이터를 검색할 수 없습니다.
+ `DescribeJournalS3Export`
+ `ListJournalS3Exports`
+ `ListJournalS3ExportsForLedger`

하지만 이 만료는 내보낸 데이터 자체에는 영향을 주지 않습니다. 모든 메타데이터는 내보내기로 작성된 매니페스트 파일에 보존됩니다. 이 만료는 저널 내보내기 작업을 나열하는 API 작업을 보다 원활하게 수행할 수 있도록 설계되었습니다. QLDB는 이전 내보내기 작업을 제거하여 여러 페이지의 작업을 파싱하지 않고도 최근 내보내기만 볼 수 있도록 합니다.

# QLDB의 저널 내보내기 출력
<a name="export-journal.output"></a>

**중요**  
지원 종료 공지: 기존 고객은 07/31/2025에 지원이 종료될 때까지 Amazon QLDB를 사용할 수 있습니다. 자세한 내용은 [Amazon QLDB 원장을 Amazon Aurora PostgreSQL로 마이그레이션](https://aws.amazon.com/blogs/database/migrate-an-amazon-qldb-ledger-to-amazon-aurora-postgresql/)을 참조하세요.

Amazon QLDB 저널 내보내기 작업은 저널 블록을 포함하는 데이터 객체 외에도 두 개의 매니페스트 파일을 작성합니다. 해당 파일은 모두 [내보내기 요청](export-journal.request.md)에서 지정하는 Amazon S3 버킷에 저장됩니다. 다음 섹션에서는 각 출력 객체의 형식과 내용을 설명합니다.

**참고**  
내보내기 작업의 출력 형식으로 JSON을 지정하는 경우 QLDB는 내보낸 데이터 객체의 Amazon Ion 저널 데이터를 JSON으로 하향 변환합니다. 자세한 정보는 [JSON으로 하향 변환](#export-journal.output.json) 섹션으로 이동하세요.

**Topics**
+ [매니페스트 파일](#export-journal.output.manifest)
+ [데이터 객체](#export-journal.output.data)
+ [JSON으로 하향 변환](#export-journal.output.json)
+ [내보내기 프로세서 라이브러리(Java)](#export-journal.output.processor)

## 매니페스트 파일
<a name="export-journal.output.manifest"></a>

Amazon QLDB는 제공된 S3 버킷에 각 내보내기 요청에 대해 매니페스트 파일을 두 개 생성합니다. *초기 매니페스트* 파일은 내보내기 요청을 제출하는 즉시 생성됩니다. *최종 매니페스트* 파일은 내보내기가 완료된 후에 작성됩니다. 이러한 파일을 사용하여 Amazon S3의 내보내기 작업 상태를 확인할 수 있습니다.

매니페스트 파일의 콘텐츠 형식은 요청된 내보내기 출력 형식과 일치합니다.

### 초기 매니페스트
<a name="export-journal.output.manifest.initial"></a>

초기 매니페스트는 내보내기 작업이 시작되었음을 나타냅니다. 여기에는 요청에 전달한 입력 파라미터가 포함되어 있습니다. 이 파일에는 Amazon S3 대상, 내보내기 시작 및 종료 시간 파라미터 외에도 `exportId`가 포함되어 있습니다. `exportId`는 QLDB가 각 내보내기 작업에 할당하는 고유 ID입니다.

파일 명명 규칙은 다음과 같습니다.

```
s3://amzn-s3-demo-qldb-cloudtrail/prefix/exportId.started.manifest
```

다음은 Ion 텍스트 형식의 초기 매니페스트 파일과 해당 콘텐츠의 예입니다.

```
s3://amzn-s3-demo-qldb-cloudtrail/journalExport/8UyXulxccYLAsbN1aon7e4.started.manifest
```

```
{
  ledgerName:"my-example-ledger",
  exportId:"8UyXulxccYLAsbN1aon7e4",
  inclusiveStartTime:2019-04-15T00:00:00.000Z,
  exclusiveEndTime:2019-04-15T22:00:00.000Z,
  bucket:"amzn-s3-demo-qldb-cloudtrail",
  prefix:"journalExport",
  objectEncryptionType:"NO_ENCRYPTION",
  outputFormat:"ION_TEXT"
}
```

초기 매니페스트는 내보내기 요청에 지정된 경우에만 `outputFormat`을 포함합니다. 출력 형식을 지정하지 않으면 내보내는 데이터의 기본값은 `ION_TEXT` 형식입니다.

[DescribeJournalS3Export](https://docs.aws.amazon.com/qldb/latest/developerguide/API_DescribeJournalS3Export.html) API 작업 및 내보낸 Amazon S3 객체의 콘텐츠 유형도 출력 형식을 나타냅니다.

### 최종 매니페스트
<a name="export-journal.output.manifest.final"></a>

최종 매니페스트는 특정 저널 *스트랜드*의 내보내기 작업이 완료되었음을 나타냅니다. 내보내기 작업은 각 스트랜드에 대해 별도의 최종 매니페스트 파일을 작성합니다.

**참고**  
Amazon QLDB에서 스트랜드는 원장 저널의 파티션입니다. QLDB는 현재 단일 스트랜드가 포함된 저널만 지원합니다.

최종 매니페스트에는 내보내기 중에 기록된 데이터 객체 키의 정렬된 목록이 포함됩니다. 파일 명명 규칙은 다음과 같습니다.

```
s3://amzn-s3-demo-qldb-cloudtrail/prefix/exportId.strandId.completed.manifest
```

`strandId`는 QLDB가 스트랜드에 할당하는 고유 ID입니다. 다음은 Ion 텍스트 형식의 최종 매니페스트 파일과 해당 콘텐츠의 예입니다.

```
s3://amzn-s3-demo-qldb-cloudtrail/journalExport/8UyXulxccYLAsbN1aon7e4.JdxjkR9bSYB5jMHWcI464T.completed.manifest
```

```
{
  keys:[
    "2019/04/15/22/JdxjkR9bSYB5jMHWcI464T.1-4.ion",
    "2019/04/15/22/JdxjkR9bSYB5jMHWcI464T.5-10.ion",
    "2019/04/15/22/JdxjkR9bSYB5jMHWcI464T.11-12.ion",
    "2019/04/15/22/JdxjkR9bSYB5jMHWcI464T.13-20.ion",
    "2019/04/15/22/JdxjkR9bSYB5jMHWcI464T.21-21.ion"
  ]
}
```

## 데이터 객체
<a name="export-journal.output.data"></a>

Amazon QLDB는 제공된 Amazon S3 버킷에 Amazon Ion 형식의 텍스트 또는 이진수 표현이나*JSON Lines* 텍스트 형식으로 저널 데이터 객체를 기록합니다.

JSON Lines 형식에서 내보낸 데이터 객체의 각 블록은 줄 바꿈으로 구분된 유효한 JSON 객체입니다. 이 형식을 사용하여 JSON 내보내기를 Amazon Athena와 같은 분석 도구와 직접 통합할 수 있습니다. 이러한 서비스는 줄 바꿈으로 구분된 JSON을 자동으로 구문 분석할 수 있기 AWS Glue 때문입니다. 데이터 형식에 대한 자세한 정보는 [JSON Lines](https://jsonlines.org/)을 참조하세요.

### 데이터 객체 이름
<a name="export-journal.output.data.filename"></a>

저널 내보내기 작업은 다음과 같은 명명 규칙에 따라 이러한 데이터 객체를 작성합니다.

```
s3://amzn-s3-demo-qldb-cloudtrail/prefix/yyyy/mm/dd/hh/strandId.startSn-endSn.ion|.json
```
+ 각 내보내기 작업의 출력 데이터는 청크로 분할됩니다.
+ `yyyy/mm/dd/hh` - 내보내기 요청을 제출한 날짜 및 시간. 동일한 시간 내에 내보낸 객체는 동일한 Amazon S3 접두사로 그룹화됩니다.
+ `strandId` - 내보내는 저널 블록을 포함하는 특정 스트랜드의 고유 ID.
+ `startSn-endSn` - 객체에 포함된 시퀀스 번호 범위. 시퀀스 번호는 스트랜드 내 블록의 위치를 지정합니다.

예를 들어 다음과 같은 경로를 지정한다고 가정하겠습니다.

```
s3://amzn-s3-demo-qldb-cloudtrail/journalExport/
```

내보내기 작업을 수행하면 다음과 비슷한 Amazon S3 데이터 객체가 생성됩니다. 이 예제는 객체 이름을 Ion 형식으로 보여줍니다.

```
s3://amzn-s3-demo-qldb-cloudtrail/journalExport/2019/04/15/22/JdxjkR9bSYB5jMHWcI464T.1-5.ion
```

### 데이터 객체 콘텐츠
<a name="export-journal.output.data.contents"></a>

각 데이터 객체에는 다음 형식의 저널 블록 객체가 포함되어 있습니다.

```
{
  blockAddress: {
    strandId: String,
    sequenceNo: Int
  },
  transactionId: String,
  blockTimestamp: Datetime,
  blockHash: SHA256,
  entriesHash: SHA256,
  previousBlockHash: SHA256,
  entriesHashList: [ SHA256 ],
  transactionInfo: {
    statements: [
      {
        //PartiQL statement object
      }
    ],
    documents: {
      //document-table-statement mapping object
    }
  },
  revisions: [
    {
      //document revision object
    }
  ]
}
```

*블록*은 트랜잭션 중에 저널에 커밋되는 객체입니다. 블록에는 트랜잭션 메타데이터가 함께 트랜잭션에서 커밋된 문서 수정본과 이를 커밋한 [PartiQL](ql-reference.md) 문을 나타내는 항목이 포함되어 있습니다.

다음은 Ion 텍스트 형식의 샘플 데이터가 있는 블록의 예입니다. 객체 ACL 필드에 대한 자세한 내용은 [Amazon QLDB의 저널 콘텐츠](journal-contents.md) 섹션을 참조하세요.

**참고**  
이 블록 예제는 정보 제공 목적으로만 제공됩니다. 표시된 해시는 실제 계산된 해시 값이 아닙니다.

```
{
  blockAddress:{
    strandId:"JdxjkR9bSYB5jMHWcI464T",
    sequenceNo:1234
  },
  transactionId:"D35qctdJRU1L1N2VhxbwSn",
  blockTimestamp:2019-10-25T17:20:21.009Z,
  blockHash:{{WYLOfZClk0lYWT3lUsSr0ONXh+Pw8MxxB+9zvTgSvlQ=}},
  entriesHash:{{xN9X96atkMvhvF3nEy6jMSVQzKjHJfz1H3bsNeg8GMA=}},
  previousBlockHash:{{IAfZ0h22ZjvcuHPSBCDy/6XNQTsqEmeY3GW0gBae8mg=}},
  entriesHashList:[
      {{F7rQIKCNn0vXVWPexilGfJn5+MCrtsSQqqVdlQxXpS4=}},
      {{C+L8gRhkzVcxt3qRJpw8w6hVEqA5A6ImGne+E7iHizo=}}
  ],
  transactionInfo:{
    statements:[
      {
        statement:"CREATE TABLE VehicleRegistration",
        startTime:2019-10-25T17:20:20.496Z,
        statementDigest:{{3jeSdejOgp6spJ8huZxDRUtp2fRXRqpOMtG43V0nXg8=}}
      },
      {
        statement:"CREATE INDEX ON VehicleRegistration (VIN)",
        startTime:2019-10-25T17:20:20.549Z,
        statementDigest:{{099D+5ZWDgA7r+aWeNUrWhc8ebBTXjgscq+mZ2dVibI=}}
      },
      {
        statement:"CREATE INDEX ON VehicleRegistration (LicensePlateNumber)",
        startTime:2019-10-25T17:20:20.560Z,
        statementDigest:{{B73tVJzVyVXicnH4n96NzU2L2JFY8e9Tjg895suWMew=}}
      },
      {
        statement:"INSERT INTO VehicleRegistration ?",
        startTime:2019-10-25T17:20:20.595Z,
        statementDigest:{{ggpon5qCXLo95K578YVhAD8ix0A0M5CcBx/W40Ey/Tk=}}
      }
    ],
    documents:{
      '8F0TPCmdNQ6JTRpiLj2TmW':{
        tableName:"VehicleRegistration",
        tableId:"BPxNiDQXCIB5l5F68KZoOz",
        statements:[3]
      }
    }
  },
  revisions:[
    {
      hash:{{FR1IWcWew0yw1TnRklo2YMF/qtwb7ohsu5FD8A4DSVg=}}
    },
    {
      blockAddress:{
        strandId:"JdxjkR9bSYB5jMHWcI464T",
        sequenceNo:1234
      },
      hash:{{t8Hj6/VC4SBitxnvBqJbOmrGytF2XAA/1c0AoSq2NQY=}},
      data:{
        VIN:"1N4AL11D75C109151",
        LicensePlateNumber:"LEWISR261LL",
        State:"WA",
        City:"Seattle",
        PendingPenaltyTicketAmount:90.25,
        ValidFromDate:2017-08-21,
        ValidToDate:2020-05-11,
        Owners:{
          PrimaryOwner:{
            PersonId:"GddsXfIYfDlKCEprOLOwYt"
          },
          SecondaryOwners:[]
        }
      },
      metadata:{
        id:"8F0TPCmdNQ6JTRpiLj2TmW",
        version:0,
        txTime:2019-10-25T17:20:20.618Z,
        txId:"D35qctdJRU1L1N2VhxbwSn"
      }
    }
  ]
}
```

`revisions` 필드에서 일부 개정 객체에는 `hash` 값만 포함되고 기타 속성은 포함되지 않을 수 있습니다. 이는 사용자 데이터를 포함하지 않는 내부 전용 시스템 수정본입니다. 이러한 수정본의 해시는 저널의 전체 해시 체인의 일부이기 때문에 내보내기 작업에는 해당 블록에 이러한 수정본이 포함됩니다. 암호화 확인에는 전체 해시 체인이 필요합니다.

## JSON으로 하향 변환
<a name="export-journal.output.json"></a>

내보내기 작업의 출력 형식으로 JSON을 지정하는 경우 QLDB는 내보낸 데이터 객체의 Amazon Ion 저널 데이터를 JSON으로 하향 변환합니다. 하지만 JSON에 없는 풍부한 Ion 유형을 데이터에 사용하는 경우 Ion을 JSON으로 변환해도 손실이 발생합니다.

Ion에서 JSON으로의 변환 규칙에 대한 자세한 내용은 *Amazon Ion Cookbook*의 [JSON으로 하향 변환](https://amzn.github.io/ion-docs/guides/cookbook.html#down-converting-to-json)을 참조하세요.

## 내보내기 프로세서 라이브러리(Java)
<a name="export-journal.output.processor"></a>

QLDB는 Amazon S3에서의 내보내기 처리를 간소화하는 Java용 확장 가능한 프레임워크를 제공합니다. 이 프레임워크 라이브러리는 내보내기의 출력을 읽고 내보낸 블록을 순차적으로 반복하는 작업을 처리합니다. 이 내보내기 프로세서를 사용하려면 GitHub 리포지토리 [awslabs/amazon-qldb-export-processor-java](https://github.com/awslabs/amazon-qldb-export-processor-java)를 참조하세요.

# QLDB의 저널 내보내기 권한
<a name="export-journal.perms"></a>

**중요**  
지원 종료 공지: 기존 고객은 07/31/2025에 지원이 종료될 때까지 Amazon QLDB를 사용할 수 있습니다. 자세한 내용은 [Amazon QLDB 원장을 Amazon Aurora PostgreSQL로 마이그레이션](https://aws.amazon.com/blogs/database/migrate-an-amazon-qldb-ledger-to-amazon-aurora-postgresql/)을 참조하세요.

Amazon QLDB에서 저널 내보내기 요청을 제출하기 전에 지정된 Amazon S3 버킷에 대한 쓰기 권한을 QLDB에 제공해야 합니다. Amazon S3 버킷의 객체 암호화 유형으로 고객 관리형 AWS KMS key 를 선택하는 경우, QLDB에 지정된 대칭 암호화 키를 사용할 수 있는 권한도 제공해야 합니다. Amazon S3에서는 [비대칭 KMS 키](https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html)가 지원되지 않습니다.

내보내기 작업에 필요한 권한을 제공하려면 적절한 권한 정책을 통해 QLDB가 IAM 서비스 역할을 맡도록 합니다. 서비스 역할은 서비스가 사용자를 대신하여 작업을 수행하는 것으로 가정하는 [IAM 역할](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)입니다. IAM 관리자는 IAM 내에서 서비스 역할을 생성, 수정 및 삭제할 수 있습니다. 자세한 정보는 *IAM 사용 설명서*의 [Create a role to delegate permissions to an AWS 서비스](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)를 참조하세요.

**참고**  
저널 내보내기를 요청할 때 QLDB에 역할을 전달하려면 IAM 역할 리소스에서 `iam:PassRole` 작업을 수행할 수 있는 권한이 있어야 합니다. 이는 QLDB 원장 리소스에 대한 `qldb:ExportJournalToS3` 권한에 추가됩니다.  
IAM을 사용하여 QLDB에 대한 액세스를 제어하는 방법을 알아보려면 [Amazon QLDB에서 IAM을 사용하는 방법](security_iam_service-with-iam.md) 섹션을 참조하세요. QLDB 정책 예제는 [Amazon QLDB의 자격 증명 기반 정책 예](security_iam_id-based-policy-examples.md#security_iam_id-based-policy-examples-export-to-s3-bucket) 섹션을 참조하세요.

이 예에서는 QLDB에서 사용자 대신 Amazon S3 버킷에 객체를 기록하도록 허용하는 역할을 만듭니다. 자세한 내용은 IAM 사용자 설명서**의 [역할을 생성하여  AWS 서비스에게 권한 위임](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)을 참조하세요.

에서 QLDB 저널을 AWS 계정 처음 내보내는 경우 먼저 다음을 수행하여 적절한 정책으로 IAM 역할을 생성해야 합니다. 또는 [QLDB 콘솔을 사용](export-journal.request.md#export-journal.request.con)하여 자동으로 역할을 생성할 수 있습니다. 또는 이전에 생성한 역할을 선택할 수 있습니다.

**Topics**
+ [권한 정책 생성](#export-journal.perms.create-policy)
+ [IAM 역할 생성](#export-journal.perms.create-role)

## 권한 정책 생성
<a name="export-journal.perms.create-policy"></a>

다음 단계를 완료하여 QLDB 저널 내보내기 작업에 대한 권한 정책을 만드세요. 이 예제는 지정된 버킷에 객체를 쓸 수 있는 권한을 QLDB에 부여하는 Amazon S3 버킷 정책을 보여줍니다. 해당하는 경우 이 예제에서는 QLDB가 대칭 암호화 KMS 키를 사용하도록 허용하는 키 정책도 보여줍니다.

Amazon S3의 버킷 정책에 대한 자세한 내용은 *Amazon Simple Storage Service 사용 설명서*의 [버킷 정책 및 사용자 정책 사용](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-iam-policies.html)을 참조하세요. AWS KMS 키 정책에 대한 자세한 내용은 *AWS Key Management Service 개발자 안내서*에서 [AWS KMS에서 키 정책 사용](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html)을 참조하세요.

**참고**  
Amazon S3 버킷과 KMS 키는 모두 QLDB 원장 AWS 리전 과 동일해야 합니다.

**JSON 정책 편집기를 사용하여 정책을 생성하려면**

1. 에 로그인 AWS Management Console 하고 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) IAM 콘솔을 엽니다.

1. 왼쪽의 탐색 열에서 **정책**을 선택합니다.

   **정책**을 처음으로 선택하는 경우 **관리형 정책 소개** 페이지가 나타납니다. **시작**을 선택합니다.

1. 페이지 상단에서 **정책 생성**을 선택합니다.

1. **JSON** 탭을 선택합니다.

1. JSON 정책 문서를 입력합니다.
   + Amazon S3 객체 암호화에 고객 관리형 KMS 키를 사용하는 경우 다음 예제 정책 문서를 사용하세요. 이 정책을 사용하려면 예제의 *amzn-s3-demo-qldb-cloudtrail*, *us-east-1*, *123456789012* 및 *1234abcd-12ab-34cd-56ef-1234567890ab*를 자체 정보로 바꿉니다.

     ```
     {
         "Version": "2012-10-17",
         "Statement": [
             {
                 "Sid": "QLDBJournalExportS3Permission",
                 "Action": [
                     "s3:PutObjectAcl",
                     "s3:PutObject"
                 ],
                 "Effect": "Allow",
                 "Resource": "arn:aws:s3:::amzn-s3-demo-qldb-cloudtrail/*"
             },
             {
                 "Sid": "QLDBJournalExportKMSPermission",
                 "Action": [ "kms:GenerateDataKey" ],
                 "Effect": "Allow",
                 "Resource": "arn:aws:kms:us-east-1:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab"
             }
         ]
     }
     ```
   + 다른 암호화 유형의 경우 다음 예제 정책 문서를 사용합니다. 이 정책을 사용하려면 예제의 *amzn-s3-demo-qldb-cloudtrail*을 자체 Amazon S3 버킷 이름으로 바꿉니다.

     ```
     {
         "Version": "2012-10-17",
         "Statement": [
             {
                 "Sid": "QLDBJournalExportS3Permission",
                 "Action": [
                     "s3:PutObjectAcl",
                     "s3:PutObject"
                 ],
                 "Effect": "Allow",
                 "Resource": "arn:aws:s3:::amzn-s3-demo-qldb-cloudtrail/*"
             }
         ]
     }
     ```

1. **정책 검토**를 선택합니다.
**참고**  
언제든지 **시각적 편집기** 및 **JSON** 탭을 전환할 수 있습니다. 그러나 변경을 수행하거나 **시각적 편집기** 탭에서 **정책 검토**를 선택한 경우 IAM은 시각적 편집기에 최적화되도록 정책을 재구성할 수 있습니다. 자세한 내용은 *IAM 사용자 설명서*의 [정책 재구성](https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot_policies.html#troubleshoot_viseditor-restructure)을 참조하세요.

1. **정책 검토** 페이지에서 생성하려는 정책의 **이름**과 **설명**(선택 사항)을 입력합니다. 정책 **요약**을 검토하여 정책이 부여한 권한을 확인합니다. 그런 다음 **정책 생성**을 선택하여 작업을 저장합니다.

## IAM 역할 생성
<a name="export-journal.perms.create-role"></a>

QLDB 저널 내보내기 작업에 대한 권한 정책을 생성한 후 IAM 역할을 생성하고 정책을 여기에 연결할 수 있습니다.

**QLDB에 대한 서비스 역할을 생성하는 방법(IAM 콘솔)**

1. 에 로그인 AWS Management Console 하고 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) IAM 콘솔을 엽니다.

1. IAM 콘솔의 탐색 창에서 **역할**을 선택하고 **역할 생성**을 선택합니다.

1. **신뢰할 수 있는 엔터티 유형**에 **AWS 서비스**를 선택합니다.

1. **서비스 또는 사용 사례**의 경우 **QLDB**를 선택한 다음 **QLDB** 사용 사례를 선택합니다.

1. **다음**을 선택합니다.

1. 앞에서 생성한 정책 옆의 상자를 선택합니다.

1. (선택 사항)[권한 경계](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html)로서 설정됩니다. 이는 서비스 역할에서 가능한 고급 기능이며 서비스 링크된 역할은 아닙니다.

   1. **권한 경계 설정** 섹션을 열고 **최대 역할 권한을 관리하기 위한 권한 경계 사용**을 선택합니다.

      IAM에는 계정의 AWS 관리형 및 고객 관리형 정책 목록이 포함됩니다.

   1. 정책을 선택하여 권한 경계를 사용하세요.

1. **다음**을 선택합니다.

1. 역할의 목적을 식별하는 데 도움이 되는 역할 이름이나 역할 이름 접미사를 입력합니다.
**중요**  
역할 이름을 지정할 때는 다음 사항에 유의하세요.  
역할 이름은 내에서 고유해야 하며 대/소문자를 구분할 AWS 계정수 없습니다.  
예를 들어, 이름이 **PRODROLE**과 **prodrole**, 두 가지로 지정된 역할을 만들지 마세요. 역할 이름이 정책 또는 ARN의 일부로 사용되는 경우 역할 이름은 대소문자를 구분합니다. 그러나 로그인 프로세스와 같이 콘솔에서 역할 이름이 고객에게 표시되는 경우에는 역할 이름이 대소문자를 구분하지 않습니다.
다른 엔터티가 역할을 참조할 수 있기 때문에 역할이 생성된 후에는 역할 이름을 편집할 수 없습니다.

1. (선택 사항)**설명**에 역할에 대한 설명을 입력합니다.

1. (선택 사항) 역할에 대한 사용 사례와 권한을 편집하려면 **1단계: 신뢰할 수 있는 엔터티 선택** 또는 **2단계: 권한 추가** 섹션에서 **편집**을 선택합니다.

1. (선택 사항) 태그를 키-값 페어로 연결하여 역할을 식별, 구성 또는 검색합니다. IAM에서 태그를 사용하는 방법에 대한 자세한 내용은 *IAM 사용 설명서*의 [AWS Identity and Access Management 리소스에 대한 태그를 참조하세요](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html).

1. 역할을 검토한 다음 **역할 생성**을 선택합니다.

다음 JSON 문서는 QLDB가 특정 권한이 부여된 IAM 역할을 맡도록 허용하는 신뢰 정책의 예입니다.

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "qldb.amazonaws.com"
            },
            "Action": [ "sts:AssumeRole" ],
            "Condition": {
                "ArnEquals": {
                    "aws:SourceArn": "arn:aws:qldb:us-east-1:123456789012:*"
                },
                "StringEquals": {
                    "aws:SourceAccount": "123456789012"
                }
            }
        }
    ]
}
```

**참고**  
이 신뢰 정책 예시에서 `aws:SourceArn` 및 `aws:SourceAccount` 전역 조건 컨텍스트 키를 사용하여 *혼동된 대리자* 문제를 방지하는 방법을 보여줍니다. 이 신뢰 정책을 사용하면 QLDB는 계정 `123456789012`의 모든 QLDB 리소스에 대한 역할만 맡을 수 있습니다.  
자세한 내용은 [교차 서비스 혼동된 대리자 방지](cross-service-confused-deputy-prevention.md)을 참조하십시오.

IAM 역할을 생성한 후 QLDB 콘솔로 돌아가서 **내보내기 작업 생성** 페이지를 새로 고쳐 새 역할을 찾을 수 있도록 합니다.

# 저널 내보내기의 일반적인 오류
<a name="export-journal.errors"></a>

**중요**  
지원 종료 공지: 기존 고객은 07/31/2025에 지원이 종료될 때까지 Amazon QLDB를 사용할 수 있습니다. 자세한 내용은 [Amazon QLDB 원장을 Amazon Aurora PostgreSQL로 마이그레이션](https://aws.amazon.com/blogs/database/migrate-an-amazon-qldb-ledger-to-amazon-aurora-postgresql/)을 참조하세요.

이 섹션에서는 저널 내보내기 요청 시 Amazon QLDB에서 발생하는 런타임 오류를 설명합니다.

다음은 서비스에서 반환하는 일반적인 예외 목록입니다. 각 예외에는 특정 오류 메시지와 가능한 해결 방법에 대한 간단한 설명 및 제안이 포함됩니다.<a name="export-journal.errors.varlist"></a>

**AccessDeniedException**  
메시지: User: *userARN* is not authorized to perform: iam:PassRole on resource: *roleARN*  
IAM 역할을 QLDB 서비스에 전달할 권한이 없습니다. QLDB에는 모든 저널 내보내기 요청에 대한 역할이 필요하며 이 역할을 QLDB에 전달할 권한이 있어야 합니다. 이 역할은 지정된 Amazon S3 버킷에 대한 쓰기 권한을 QLDB에 제공합니다.  
QLDB 서비스(`qldb.amazonaws.com`)의 지정된 IAM 역할 리소스에서 `PassRole` API 작업을 수행할 권한을 부여하는 IAM 정책을 정의했는지 확인하세요. 정책 예제는 [Amazon QLDB의 자격 증명 기반 정책 예](security_iam_id-based-policy-examples.md#security_iam_id-based-policy-examples-export-to-s3-bucket)을 참조하십시오.

**IllegalArgumentException**  
메시지:  QLDB encountered an error validating S3 configuration: *errorCode**errorMessage*  
이 오류의 가능한 원인은 제공된 Amazon S3 버킷이 Amazon S3에 존재하지 않기 때문입니다. 또는 QLDB에 지정된 Amazon S3 버킷에 객체를 쓸 수 있는 충분한 권한이 없습니다.  
내보내기 작업 요청에 제공한 S3 버킷 이름이 정확한지 확인하세요. 버킷 이름 지정에 대한 자세한 내용은 *Amazon Simple Storage Service 사용 설명서*의 [버킷 규제 및 제한](https://docs.aws.amazon.com/AmazonS3/latest/userguide/BucketRestrictions.html)을 참조하세요.  
또한 QLDB 서비스(`qldb.amazonaws.com`)에 대한 `PutObject` 및 `PutObjectAcl` 권한을 부여하는 지정된 버킷에 대한 정책을 정의했는지 확인합니다. 자세한 내용은 [내보내기 권한](export-journal.perms.md) 섹션을 참조하세요.

**IllegalArgumentException**  
메시지: Unexpected response from Amazon S3 while validating the S3 configuration. S3로부터의 응답: *errorCode**errorMessage*  
제공된 Amazon S3 오류 응답으로 인해 제공된 S3 버킷에 저널 내보내기 데이터를 쓰려는 시도가 실패했습니다. 발생 가능한 원인에 대한 자세한 내용은 *Amazon Simple Storage Service 사용 설명서*의 [ Amazon S3 문제 해결 ](https://docs.aws.amazon.com/AmazonS3/latest/userguide/troubleshooting.html)를 참조하세요.  


**IllegalArgumentException**  
메시지: Amazon S3 버킷 접두사는 128자를 초과할 수 없습니다  
저널 내보내기 요청에 제공된 접두사가 128자를 초과합니다.

**IllegalArgumentException**  
메시지:  시작 날짜는 종료 날짜보다 이후일 수 없습니다.  
`InclusiveStartTime` 및 `ExclusiveEndTime`는 [ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html) 날짜 및 시간 형식이어야 하며 협정 세계시(UTC)여야 합니다.

**IllegalArgumentException**  
메시지:  종료일은 미래일 수 없습니다   
`InclusiveStartTime` 및 `ExclusiveEndTime`은 UTC 기준의 `ISO 8601` 날짜 및 시간 형식이어야 합니다.

**IllegalArgumentException**  
메시지: 제공된 객체 암호화 설정(S3EncryptionConfiguration)이 AWS Key Management Service (AWS KMS) 키와 호환되지 않습니다.  
`KMSKeyArn`에 `NO_ENCRYPTION` 또는 `SSE_S3`의 `ObjectEncryptionType`를 제공했습니다. `SSE_KMS`의 객체 암호화 유형에 고객 관리형 AWS KMS key 만 제공할 수 있습니다. Amazon S3의 서버 측 암호화 옵션에 대한 자세한 내용은 *Amazon S3 개발자 안내서*의 [서버 측 암호화를 사용한 데이터 보호](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html)를 참조하세요.

**LimitExceededException**  
메시지:  동시 실행 저널 내보내기 작업 제한인 2개를 초과했습니다‭ ‬  
QLDB은 기본적으로 동시 저널 내보내기 작업을 2개로 제한합니다.