DynamoDB는 TTL을 지원하나요?
예. DynamoDB는 Time to Live(TTL)를 지원합니다. Unix 에포크 만료 타임스탬프를 초 단위로 담은 Number 속성을 지정하면, DynamoDB가 만료된 항목을 백그라운드에서 — 보통 만료 후 며칠 이내에 — 추가 비용 없이, 쓰기 용량도 소비하지 않고 제거합니다. 만료되었지만 아직 삭제되지 않은 항목은 제거될 때까지 읽기에 나타날 수 있습니다.
활성화하는 방법
테이블에 TTL을 켜고 만료 시각을 담을 속성 이름을 지정하세요. 그 속성은 Unix 에포크 타임스탬프를 초 단위(밀리초가 아님)로 저장하는 Number여야 합니다. 값이 과거인 항목이 삭제 대상이 됩니다.
무엇을 기대할 수 있나요
- 무료 — 자동 삭제는 쓰기 용량 단위를 소비하지 않습니다. 같은 정리를 직접 하면 항목당 쓰기 단위 하나가 듭니다. 만료된 1 KB 항목 천만 개는 쓰기 단위 천만 개,
us-east-1온디맨드로 $6.25이며, 그것들을 찾기 위한 100 GB 테이블 전체 Scan마다 약 $1.64가 더해집니다. (예외 하나: 글로벌 테이블에서는 다른 각 리전으로 복제된 삭제가 그곳의 복제 쓰기 용량을 소비합니다.) - 즉시가 아님 — DynamoDB는 보통 만료 후 며칠 이내에 만료된 항목을 제거합니다.
- 여전히 읽힘 — 물리적으로 삭제되기 전까지 만료된 항목은 읽기, 쿼리, Scan에 나타날 수 있으므로 정확성이 중요하다면 걸러 내세요.
조용히 한 번도 작동하지 않는 방식
DynamoDB는 여러분이 TTL로 지목한 속성을 검증하지 않습니다. 아래 두 쓰기는 expiresAt에 TTL이 켜진 테이블에서 모두 HTTP 200을 반환했고, 어느 항목도 결코 만료되지 않습니다:
{"pk": {"S": "sess#1"}, "expiresAt": {"S": "1790812800"}}
{"pk": {"S": "sess#2"}, "expiresAt": {"N": "1790812800000"}}첫 번째는 타임스탬프를 String으로 저장합니다. AWS는 "items with a TTL attribute that is not a Number type are ignored by the TTL process"라고 분명히 밝히며, 쓰기 시점에도 활성화 시점에도 그 이후에도 아무도 알려주지 않습니다.
두 번째가 실제로 일어나는 쪽입니다. 타입이 맞고 값이 Date.now()에서 왔기 때문입니다. 1790812800000은 밀리초로 2026년 10월 1일입니다. TTL이 읽는 유일한 방식인 초로 읽으면, 그 타임스탬프는 58718년에 떨어집니다. 항목은 형식이 올바르고, 쿼리되며, 스토리지 요금이 부과되고, 5만 6천 년 뒤에 만료되도록 예약되어 있습니다.
API에서 어느 실수도 드러나지 않으므로, 검사는 쓰기 전에 이루어져야 합니다. 우리 TTL 변환기가 1e12를 넘는 값을 밀리초로 취급하는 것이 바로 이 때문이며, 그 값이 어떤 날짜로 해석되는지도 보여줍니다.
흔한 용도
세션 레코드, 인증 토큰, 스스로 정리되어야 하는 캐시 결과 — 전형적인 TTL 용례입니다. 삭제에 반응하려면 DynamoDB Streams와 함께 쓰세요.
더 알아보기
DynamoDB TTL 가이드와 DynamoDB Streams를 읽어보세요. TTL 속성을 보고 설정하려면 DynoTable을 다운로드하세요.
참고 자료
- Using time to live (TTL) in DynamoDB — Amazon DynamoDB Developer Guide
- Working with expired items and time to live (TTL) — Amazon DynamoDB Developer Guide
- How DynamoDB global tables work — Amazon DynamoDB Developer Guide
위에 링크된 공식 AWS 문서를 기준으로 2026-07-13에 마지막으로 검증했으며, TTL.html은 2026-07-28에 다시 확인했습니다.
위의 두 쓰기는 2026-07-28에 @aws-sdk/client-dynamodb 3.1095.0을 통해 DynamoDB Local 3.3.0을 상대로 실행했고 HTTP 200으로 수락되었습니다. 정리 비용은 우리가 동기화한 AWS 요금 표의 us-east-1 온디맨드 요율로 계산했습니다.