DynamoDB Streams에 대한 변경 데이터 캡처 - Amazon DynamoDB

DynamoDB Streams에 대한 변경 데이터 캡처

DynamoDB Streams는 DynamoDB 테이블에서 시간 순서에 따라 항목 수준 수정을 캡처하고 이 정보를 최대 24시간 동안 로그에 저장합니다. 로그와 데이터 항목은 변경 전후 거의 실시간으로 나타나므로 애플리케이션에서 이러한 로그와 데이터에 액세스할 수 있습니다.

유휴 시 암호화는 DynamoDB Streams의 데이터를 암호화합니다. 자세한 내용은 DynamoDB 저장 데이터 암호화 섹션을 참조하세요.

DynamoDB 스트림은 DynamoDB 테이블 항목의 변경 사항에 대한 정렬된 정보 흐름입니다. 테이블에서 스트림을 활성화하면 DynamoDB가 테이블 데이터 항목의 모든 수정에 대한 정보를 캡처합니다.

애플리케이션에서 테이블 항목을 생성, 업데이트 또는 삭제할 때마다 DynamoDB Streams는 수정된 항목의 기본 키 속성을 사용하여 스트림 레코드를 작성합니다. 스트림 레코드에는 DynamoDB 테이블의 단일 항목에 대한 데이터 수정 정보가 포함되어 있습니다. 수정된 항목의 "이전" 및 "이후" 이미지 등과 같이 스트림 레코드에서 추가 정보를 캡처하도록 스트림을 구성할 수 있습니다.

DynamoDB Streams는 다음을 보장할 수 있습니다.

  • 각 스트림 기록은 스트림에서 한 번만 나타납니다.

  • DynamoDB 테이블에서 수정된 각 항목의 스트림 레코드는 항목의 실제 수정과 동일한 순서로 표시됩니다.

DynamoDB Streams는 거의 실시간으로 스트림 레코드를 작성하므로 이러한 스트림을 소비하고 내용을 바탕으로 조치를 취할 수 있는 애플리케이션을 빌드할 수 있습니다.

DynamoDB Streams에 대한 엔드포인트

AWS에서는 DynamoDB 및 DynamoDB Streams의 엔드포인트가 별개입니다. 데이터베이스 테이블 및 인덱스를 사용하려면 애플리케이션이 DynamoDB 엔드포인트에 액세스해야 합니다. DynamoDB Streams 레코드를 읽고 처리하려면 애플리케이션이 동일한 리전의 DynamoDB Streams 엔드포인트에 액세스해야 합니다.

DynamoDB Streams 엔드포인트의 이름은 streams.dynamodb.<region>.amazonaws.com 형식으로 지정되어야 합니다. 예를 들어 dynamodb.us-west-2.amazonaws.com 엔드포인트를 사용하여 DynamoDB에 액세스하는 경우 streams.dynamodb.us-west-2.amazonaws.com 엔드포인트를 사용하여 DynamoDB Streams에 액세스합니다.

참고

DynamoDB 및 DynamoDB Streams 리전 및 엔드포인트의 전체 목록은 AWS 일반 참조리전 및 엔드포인트를 참조하세요.

AWS SDK는 DynamoDB와 DynamoDB Streams의 클라이언트를 따로 제공합니다. 요구 사항에 따라 애플리케이션은 DynamoDB 엔드포인트, DynamoDB Streams 엔드포인트 또는 두 엔드포인트에 동시에 액세스할 수 있습니다. 두 엔드포인트에 모두 연결하려면 애플리케이션이 2개 클라이언트(DynamoDB용 클라이언트 하나와 DynamoDB Streams용 클라이언트 하나)를 인스턴스화해야 합니다.

스트림 활성화

AWS CLI 또는 AWS SDK 중 하나를 사용하여 새 테이블을 생성할 때 테이블에서 스트림을 활성화할 수 있습니다. 또한 기존 테이블에서도 스트림을 활성화하거나 비활성화 할 수 있으며, 스트림 설정도 변경할 수 있습니다. DynamoDB Streams는 비동기식으로 작동하므로 스트림을 활성화하더라도 테이블의 성능에 영향을 미치지 않습니다.

DynamoDB Streams를 관리하는 가장 용이한 방법은 AWS Management Console을 사용하는 것입니다.

  1. AWS Management Console에 로그인하고 https://console.aws.amazon.com/dynamodb/에서 DynamoDB 콘솔을 엽니다.

  2. DynamoDB 콘솔 대시보드에서 Tables(테이블)를 선택하고 기존 테이블을 선택합니다.

  3. [Overview] 탭에서 [Manage Stream]을 선택합니다.

  4. 스트림 관리 창에서 테이블의 데이터가 수정될 때마다 스트림에 기록될 정보를 선택합니다.

    • 키만 보기 - 수정된 항목의 키 속성만을 표시합니다.

    • 새로운 이미지 - 항목의 수정 후 전체 모습을 보여 줍니다.

    • 이전 이미지 - 항목의 수정 전 전체 모습을 보여 줍니다.

    • 새 이미지와 이전 이미지 - 항목의 새 이미지와 이전 이미지를 모두 보여 줍니다.

    원하는 대로 설정되었으면 [Enable]을 선택합니다.

  5. (선택 사항) 기존 스트림을 비활성화하려면 [Manage Stream]을 선택하고 [Disable]을 선택합니다.

또한 CreateTable 또는 UpdateTable API 작업을 사용하여 스트림을 활성화하거나 수정할 수도 있습니다. StreamSpecification 파라미터는 스트림 구성 방식을 결정합니다.

  • StreamEnabled - 테이블에서 스트림을 활성화(true)할지 비활성화(false)할지 여부를 지정합니다.

  • StreamViewType - 테이블의 데이터가 수정될 때마다 스트림에 쓸 정보를 지정합니다.

    • KEYS_ONLY - 수정된 항목의 키 속성만 표시합니다.

    • NEW_IMAGE - 항목의 수정 후 전체 모습을 보여 줍니다.

    • OLD_IMAGE - 항목의 수정 전 전체 모습을 보여 줍니다.

    • NEW_AND_OLD_IMAGES - 항목의 새 이미지와 이전 이미지를 모두 보여 줍니다.

언제든지 스트림을 활성화 또는 비활성화할 수 있습니다. 그러나 이미 스트림을 가지고 있는 테이블에서 스트림을 활성화하려고 하면 ResourceInUseException이 수신됩니다. 스트림을 가지고 있지 않은 테이블에서 스트림을 비활성화하려고 하면 ValidationException가 수신됩니다.

StreamEnabledtrue로 설정하면 DynamoDB가 배정된 스트림 서술자를 사용하여 새 스트림을 생성합니다. 테이블에서 스트림을 비활성화한 후 다시 활성화하면 다른 스트림 서술자를 갖는 새 스트림이 생성됩니다.

모든 스트림은 Amazon 리소스 이름(ARN)을 통해 고유 식별됩니다. 아래에는 이름이 TestTable인 DynamoDB 테이블에 위치한 스트림의 ARN이 예시되어 있습니다.

arn:aws:dynamodb:us-west-2:111122223333:table/TestTable/stream/2015-05-11T21:21:33.291

테이블의 가장 최근 스트림 서술자를 확인하려면 DynamoDB DescribeTable 요청을 실행한 뒤 응답에서 LatestStreamArn 요소를 찾습니다.

스트림 판독 및 처리

스트림을 판독하고 처리하려면 애플리케이션이 DynamoDB Streams 엔드포인트에 연결되어 API 요청을 실행해야 합니다.

스트림은 스트림 기록으로 구성되어 있습니다. 각 스트림 레코드는 스트림이 속한 DynamoDB 테이블에서의 단일 데이터 수정을 나타냅니다. 각 스트림 레코드에는 레코드가 스트림에 게시되는 순서를 반영하는 시퀀스 번호가 할당됩니다.

스트림 기록은 그룹 또는 샤드로 구성되어 있습니다. 각 샤드는 다중 스트림 레코드 저장소 역할을 하며 이러한 기록 액세스 및 반복 처리에 필요한 정보를 담고 있습니다. 샤드 내 스트림 레코드는 24시간 후 자동으로 제거됩니다.

샤드는 한시적입니다. 필요에 따라 자동으로 생성되었다가 삭제됩니다. 또한 모든 샤드는 여러 개의 새로운 샤드로 분할될 수 있으며 이 프로세스도 자동으로 이루어집니다. (상위 샤드가 하위 하드를 하나만 가질 수 있다는 점도 유의하십시오.) 상위 테이블에서 쓰기 활동이 매우 활발할 경우 애플리케이션이 여러 샤드로부터 동시에 레코드를 처리할 수 있도록 샤드가 분할될 수 있습니다.

스트림을 비활성화하면 열려 있는 샤드가 모두 닫힙니다. 스트림의 데이터는 24시간 동안 읽기 가능한 상태로 유지됩니다.

샤드에는 계보(상위 및 하위)가 있으므로 애플리케이션은 항상 상위 샤드를 하위 샤드보다 먼저 처리해야 합니다. 그래야 스트림 레코드도 올바른 순서로 처리됩니다. (DynamoDB Streams Kinesis 어댑터를 사용하는 경우 이 프로세스가 자동으로 처리됩니다. 애플리케이션이 올바른 순서로 샤드와 스트림 레코드를 처리하고 자동으로 새로운 또는 만료된 샤드, 그리고 애플리케이션이 실행되는 동안 분할된 샤드를 처리합니다. 자세한 내용은 DynamoDB Streams Kinesis 어댑터를 사용하여 스트림 레코드 처리 단원을 참조하세요.)

스트림, 스트림 샤드 및 샤드에 포함된 스트림 기록 간 관계가 다음 도표에 나타나 있습니다.

참고

항목 안의 어떠한 데이터도 변경하지 않는 PutItem 또는 UpdateItem 작업을 수행하면 DynamoDB Streams는 해당 작업에 대하여 스트림 레코드를 작성하지 않습니다.

스트림에 액세스하여 그 안에 포함된 스트림 기록을 처리하는 과정은 다음과 같습니다.

  • 액세스하고자 하는 스트림의 고유 ARN을 선택합니다.

  • 처리하고자 하는 스트림 레코드가 포함된 샤드를 스트림에서 선택합니다.

  • 샤드에 액세스한 뒤 원하는 스트림 레코드를 조회합니다.

참고

최대 2개의 프로세스까지 동일한 스트림 샤드에서 동시에 읽을 수 있습니다. 샤드당 읽기 프로세스가 2개를 초과하면 병목이 발생할 수 있습니다.

DynamoDB Streams API에서는 애플리케이션 프로그램에서 사용하기 위한 다음과 같은 작업을 제공합니다.

  • ListStreams - 현재 계정 및 엔드포인트에 대한 스트림 서술자 목록을 반환합니다. 선택 사항으로 특정 테이블 이름에 대하여 스트림 서술자만 요청할 수 있습니다.

  • DescribeStream - 해당 스트림에 대한 세부 정보를 반환합니다. 출력된 정보에는 스트림에 연계된 샤드의 목록과 샤드 ID가 포함되어 있습니다.

  • GetShardIterator - 샤드 내 위치를 설명하는 샤드 반복자를 반환합니다. 반복자가 스트림의 가장 오래된 지점, 최신 지점 및 특정 지점에 대한 액세스를 제공하도록 요청할 수 있습니다.

  • GetRecords - 지정된 샤드 내에서 스트림 레코드를 반환합니다. GetShardIterator 요청으로부터 반환된 샤드 반복자를 제공해야 합니다.

요청 및 응답 예제를 포함하여 이러한 API 작업에 대한 전체 설명은 Amazon DynamoDB Streams API 참조를 참조하세요.

DynamoDB Streams에 대한 데이터 보존 제한

DynamoDB Streams의 모든 데이터는 24시간 동안 유지됩니다. 특정 테이블에 대한 지난 24시간 동안의 활동을 조회하고 분석할 수 있습니다. 그러나 24시간이 지난 데이터는 언제든 트리밍(제거)될 수 있습니다.

테이블에서 스트림을 비활성화해도 스트림에 포함된 데이터는 24시간 동안 읽기 가능한 상태가 유지됩니다. 이 시긴 이후 데이터는 만료되며 스트림 기록은 자동으로 삭제됩니다. 기존 스트림을 수동으로 삭제하기 위한 메커니즘은 없습니다. 보유 제한이 만료(24시간)될 때까지 기다려야 하며, 모든 스트림 레코드가 삭제됩니다.