DynamoDB Stream은 저장된 항목이 변경되는 경우 변경 사항을 캡처하기 위해서 사용됩니다. DynamoDB 내의 테이블의 변경 사항은 수정된 순서에 따라 실시간으로 정보를 수집하여 24시간 동안 로그에 저장합니다.
저장된 로그와 데이터를 통해서 원하는 시점의 데이터로 접근이 가능합니다. 테이블에서 스트림을 활성화하면 DynamoDB가 해당 테이블의 모든 변경 정보를 캡처합니다.
수정된 항목의 이전과 이후 이미지 등과 같이 스트림 레코드에서 추가 정보를 캡처 할 수 있습니다.
Stream을 사용하기 위해서는 스트림할 DynamoDB와 동일한 리전을 엔드포인으로 사용해야 합니다.
Ex) https://dynamodb.ap-northeast-2.amazonaws.com 의 dynamodb를 사용한다면
Dynamodb stream 은 https://streams.dynamodb.ap-northeast-2.amazonaws.com 를 사용한다.
또한 두 엔드포인트에 접속하기 위해서는 각각 클라이언트 인스턴스를 생성해 줘야 한다.
DynamoDB는 기존에 생성된 테이블에서도 스트림을 활성화 하거나 비활성화 할 수 있고 비동기식으로 작동합니다.
DynamoDB 스트림 기록은 샤드로 구성되어 있습니다. 각 샤드는 다중 레도트 저장소 역할을 하며 24시간 후 자동으로 제거됩니다. 샤드에는 계층이 존재 할 수 있고 항상 상위 샤드를 하위 샤드보다 먼처 처리해야만 올바른 순서로 처리됩니다.
참고자료:
https://medium.com/vingle-tech-blog/do-you-know-dynamodb-stream-14b284bf38d5
https://daddyprogrammer.org/post/13990/dynamodb-stream/
https://aws.amazon.com/ko/blogs/korea/new-export-amazon-dynamodb-table-data-to-data-lake-amazon-s3/
DynamoDB에서는 TTL 기능을 제공합니다. 시간을 정해서 특정 시간이 지나면 자동으로 삭제되어 테이블 내의 아이템 수를 관리 할 수 있습니다.
하지만 TTL 시간이 만료되었다고해서 바로 삭제되지는 않습니다. AWS에서 언급하길 삭제되기까지 최대 48시간이 소요 될 수 있다고합니다.
여기서 추가적인 문제는 TTL 시간이 만료된 아이템이 삭제 되기전까지 쿼리 문이나 스캔에 걸려 결과에 포함된다는 문제가 발생합니다. AWS에서 이에 대한 해결 방안으로 filter에 TTL 만료 아이템을 걸러주는 필터를 적용하여 문제를 해결하라고 제시합니다.
DynamoDB Console에서 활성화 버튼을 눌러서 활성화 시킵니다. 활성화 할 때 항목의 이름을 설정해주는데 이는 차후에 아이템을 삽입 할 때 같이 넣어줘야 합니다. DynamoDB에서는 TTL 항목과 생성시간을 비교하여 만료된 시간이 있은 항목을 삭제합니다.(최대 48시간 소요)