AWS CLI로 DynamoDB의 모든 항목 가져오기
AWS CLI는 페이지네이션을 숨깁니다. aws dynamodb scan은 테이블에 필요한 만큼 1 MB짜리 서비스 호출을 반복하고 합쳐진 결과 하나를 출력하므로, 항목 열 개를 읽는 명령과 천만 개를 읽는 명령이 똑같은 명령입니다.
그것이 편리함이자 함정입니다. 호출 횟수도, 메모리도, 요금도 테이블 크기에 비례해 커지는데 명령줄은 한 줄 그대로입니다.
코드
aws dynamodb scan --table-name 'Music'합쳐진 출력에는 테이블의 모든 항목이 담깁니다:
{
"Items": [
{"Artist": {"S": "Arturo Sandoval"}, "SongTitle": {"S": "Cubano Chant"}, ...}
],
"Count": 1287,
"ScannedCount": 1287
}설명
--no-paginate는 단일 호출 스위치입니다 — CLI가 커서를 따라가는 것을 멈추므로 첫 페이지만 얻고 그 이상은 없습니다. 한번 훑어보기에는 괜찮지만 전체 읽기에는 맞지 않습니다(커서의 동작 방식).--page-size는 출력이 아니라 호출 횟수를 바꿉니다 — AWS는 이렇게 분명히 말합니다. "Changing the page size doesn't affect the output; it affects only the number of API calls that need to be made to generate the output." 큰 페이지에서 타임아웃이 날 때 쓰는 것이지, 비용을 아끼려고 쓰는 것이 아닙니다. 읽기 비용은 어느 쪽이든 동일합니다.--max-items는 출력이 끝나고NextToken이 시작되는 지점입니다 — 지정한 개수만큼 항목을 출력하고--starting-token에 넣을 재개 토큰을 함께 내놓습니다.--page-size와 같은 숫자로 맞추세요. AWS는 값이 다르면 "can get unexpected results with missing or duplicated items"라고 경고합니다.--query는 여러분의 컴퓨터에서 실행됩니다 — 출력된 결과에 대한 JMESPath이며, 모든 항목을 읽고 요금이 청구된 뒤에 적용됩니다. DynamoDB가 보는 것은--projection-expression(예약어에는--expression-attribute-names도 함께)이고, 이것은 요금이 아니라 응답 크기를 줄입니다.--filter-expression역시 항목에 요금이 부과된 뒤에 그것을 버립니다(필터를 사용한 Scan).- 모든 것이 버퍼링된 뒤 페이저를 만납니다 — CLI는 출력하기 전에 모든 페이지를 모으고, CLI v2는 기본적으로 macOS와 Linux에서는
less, Windows에서는more로 결과를 넘깁니다. 큰 테이블에서는 메모리 급증과 멈춘 터미널을 동시에 겪게 됩니다.--no-cli-pager를 추가하거나AWS_PAGER를 빈 문자열로 설정하고,--max-items로 잘라 쓰세요. - 병렬 Scan은 셸에서도 됩니다 —
--segment i --total-segments N으로 N개를 실행하면 각각 자기 몫을 자동으로 페이지네이션합니다. 총비용은 같지만 실제 소요 시간은 훨씬 짧습니다(언제 그럴 가치가 있는지).
시각적으로 해보기
한 줄짜리 명령이 비싼 명령일 수 있습니다. DynamoDB 요금 계산기는 실행하기 전에 테이블 전체 읽기에 붙는 금액을 알려 줍니다.
DynoTable은 터미널 버퍼가 아니라 그리드에서 테이블을 페이지 단위로 넘겨 보여 주고, 그 그리드 뒤의 Scan을 aws dynamodb 명령으로 다시 내보낼 수도 있습니다. DynoTable 다운로드.
관련 예제
- Node.js에서 모든 항목 가져오기 — 명시적 루프로 하는 동일한 전체 읽기.
- Python에서 모든 항목 가져오기 — boto3의 페이지네이터로 하는 동일한 전체 읽기.
- AWS CLI로 하는 DynamoDB Scan —
--filter-expression을 사용한 스캔. - 병렬 Scan — Segment/TotalSegments, 워커 수, 그리고 굳이 쓸 만한 시점.
- DynamoDB Scan은 왜 느리고 비싼가요? — 비용 모델과 이를 피하는 방법.
- DynamoDB ProvisionedThroughputExceededException — 테이블 전체 읽기는 이 오류를 만나는 전형적인 방법입니다.
- "The provided starting key is invalid" — 페이지네이션 루프에서 망가진 재개 키.
참고 자료
- Scan — Amazon DynamoDB API Reference
- scan — AWS CLI Command Reference
- Using AWS CLI pagination options — AWS CLI User Guide
- DynamoDB read and write operations (capacity unit consumption) — Amazon DynamoDB Developer Guide
위에 링크된 공식 AWS 문서를 기준으로 2026-07-28에 마지막으로 검증했습니다.