Python(boto3)에서 DynamoDB의 모든 항목 가져오기

boto3에서 테이블 전체를 읽는다는 것은 scan을 끝까지 페이지네이션한다는 뜻입니다. 각 응답은 1 MB에서 잘리며, 저수준 클라이언트의 내장 페이지네이터가 모든 페이지에 걸쳐 LastEvaluatedKey를 따라가 줍니다(DynamoDB 커서의 동작 방식).

여기서는 페이지네이션보다 어떤 boto3 API를 고르느냐가 더 중요하고, 페이지네이터는 그 이유의 절반일 뿐입니다.

Code

import boto3

client = boto3.client("dynamodb")

paginator = client.get_paginator("scan")

items = []
for page in paginator.paginate(TableName="Music"):
    items.extend(page["Items"])

print(f"Table holds {len(items)} items")

설명

  • 페이지네이터는 리소스가 아니라 클라이언트에 있습니다boto3.resource("dynamodb").Table(…).scan에는 페이지네이터가 아예 없으므로, 그쪽에서는 LastEvaluatedKey 루프를 직접 작성해야 합니다. 그것만으로도 전체 읽기에 저수준 클라이언트를 쓸 이유가 됩니다.
  • 리소스 API는 숫자를 Decimal로 변환합니다 — 저장된 {"N": "1994"}Decimal('1994')로 돌아오는데, json.dumps는 커스텀 인코더 없이는 이를 직렬화하지 않습니다. 위의 클라이언트는 원시 {"N": "1994"}를 그대로 넘겨주고 변환은 여러분에게 맡깁니다(인코딩 방식).
  • 페이지네이터를 갈아 치우지 말고 조정하세요paginator.paginate(TableName="Music", PaginationConfig={"PageSize": 500, "MaxItems": 10000}). Boto3는 PageSize를 "각 결과의 페이지당 반환되는 항목 수"로, MaxItems를 전체에 대한 상한으로 정의하며, 후자는 StartingToken으로 이어받을 수 있는 NextToken을 내놓습니다.
  • 병렬 스캔에는 스레드당 클라이언트 하나가 필요하고, 조심스럽게 만들어야 합니다SegmentTotalSegments가 작업을 나누며, boto3 자체의 안내는 클라이언트는 스레드 안전하지만 세션과 리소스는 그렇지 않다는 것입니다. 또한 "동시성 컨텍스트 안에서 boto3.client()를 호출하면 응답 순서 문제가 생길 수 있다"고 경고합니다. 팬아웃하기 전에 클라이언트를 만들거나, 각 워커에 자체 boto3.session.Session()을 주세요(병렬이 값어치를 하는 때).
  • items는 테이블 크기만큼 커집니다 — 테이블이 작다는 것을 이미 알고 있는 게 아니라면, 계속 들고 있는 리스트를 늘리지 말고 루프 안에서 각 page를 처리하세요.
  • 스캔은 실행할 때마다 읽은 모든 바이트를 청구합니다ProjectionExpression은 응답을 줄일 뿐 청구액을 줄이지 않고(이유), FilterExpression은 항목을 읽고 과금한 뒤에 걸러냅니다(필터가 있는 Scan). 자주 호출되는 경로라면 query가 필요합니다.

시각적으로 해 보기

전체 스캔의 청구액은 항목 크기 × 항목 수를 4 KB 단위로 올림한 값입니다. 항목 크기 계산기는 붙여 넣은 항목으로 그중 항목당 절반을 알려 줍니다.

DynoTable은 대신 무한 스크롤 그리드에서 라이브 테이블을 페이지네이션하고, SQL 편집기는 실행 전에 쿼리가 어떤 작업으로 컴파일되는지 알려 줍니다. RCU 추정치는 테이블 메타데이터가 뒷받침할 때만 표시됩니다. DynoTable 내려받기.

관련 예제

참고 자료

위에 링크된 공식 AWS 문서를 기준으로 2026-07-28에 마지막으로 확인했습니다.

이 요청을 시각적으로 만들기

무료 DynamoDB 쿼리 빌더에서 이 작업을 구성하세요 — 키 조건, 필터, 인덱스, Limit, 정렬 순서, 페이지네이션 루프 — 그리고 실행 가능한 SDK v3, CLI, boto3 프로그램으로 다시 복사하세요.

DynamoDB 쿼리 빌더 열기

Console 없이 DynamoDB 작업하기

DynamoDB로는 실행할 수 없는 진짜 SQL(JOINs, GROUP BY, 집계)을 실행하는 빠른 DynamoDB 데스크톱 클라이언트. 시각적 편집과 여러분 자신의 Bedrock 키로 동작하는 AI 에이전트를 제공합니다.

30일 무료 체험, 신용카드 불필요 — 이후 기간 제한 없는 무료 요금제.