Node.js(AWS SDK v3)에서 DynamoDB의 모든 항목 가져오기

SDK v3에서 테이블 전체를 읽는다는 것은 Scan을 끝까지 페이지네이션한다는 뜻입니다. 각 응답은 1 MB에서 잘리며, LastEvaluatedKey가 더 이상 돌아오지 않을 때까지 그것을 ExclusiveStartKey로 되먹입니다(DynamoDB 커서의 동작 방식).

아래 루프는 커서가 보이도록 손으로 작성했습니다. 실제 코드에서는 SDK가 이미 제공하는 paginateScan을 쓰게 될 것입니다.

코드

import {DynamoDBClient, ScanCommand} from '@aws-sdk/client-dynamodb';

const client = new DynamoDBClient({region: 'us-east-1'});

const items = [];
let lastEvaluatedKey;

do {
  const response = await client.send(
    new ScanCommand({
      TableName: 'Music',
      ExclusiveStartKey: lastEvaluatedKey
    })
  );

  items.push(...(response.Items ?? []));
  lastEvaluatedKey = response.LastEvaluatedKey;
} while (lastEvaluatedKey);

console.log(`Table holds ${items.length} items`);

설명

  • paginateScan이 이미 이 일을 합니다import {paginateScan} from '@aws-sdk/client-dynamodb' 다음 for await (const page of paginateScan({client}, {TableName: 'Music'}))입니다. 위 루프가 손으로 다루는 것과 똑같은 커서 필드 세 개(ExclusiveStartKey, LastEvaluatedKey, Limit)로부터 생성되므로, 바꿔도 동작은 달라지지 않습니다.
  • LastEvaluatedKey가 없을 때만 끝난 것입니다Items가 0개인데 커서가 있는 응답은 빈 테이블이 아니라 정상입니다. Items.length === 0으로 루프를 끊는 것이 전형적인 행 누락 버그이며, FilterExpression을 쓰면 빈 페이지는 드문 일이 아니라 일상이 됩니다.
  • Limit은 총 항목 수가 아니라 호출당 평가된 항목 수를 셉니다 — 페이지네이터가 다루는 세 번째 필드이며, 이것도 페이지네이터의 pageSize도 여러분이 결국 들고 있게 될 배열의 크기를 제한하지 않습니다.
  • 첫 회차의 ExclusiveStartKey: undefined는 괜찮습니다 — 직렬화기가 undefined 멤버를 버리므로 첫 반복에 특별 처리가 필요 없습니다.
  • items는 테이블 크기만큼 커집니다 — 테이블이 작다는 것을 알고 있지 않다면 루프 안에서 각 페이지를 처리하고(쓰기, 스트리밍, 집계) 놓아주세요. 계속 쌓아 두는 것은 테이블이 한 번 더 커지면 메모리 부족 충돌로 이어집니다.
  • Scan은 실행할 때마다 읽은 모든 바이트에 요금을 매깁니다ProjectionExpression은 네트워크로 오가는 양을 줄일 뿐 요금은 줄이지 않고(이유), FilterExpression은 항목을 읽고 요금을 매긴 뒤에 버립니다(필터를 사용한 Scan). 뜨거운 경로에서는 Query를 원하게 됩니다.
  • Segment / TotalSegments로 쪼개세요 — N개의 비동기 워커가 각자의 조각 위에서 각자의 커서를 몰며, 모두 하나의 공유 클라이언트를 씁니다. Node는 이들을 기꺼이 동시에 실행합니다. 읽기 비용은 변하지 않고 벽시계 시간만 줄어듭니다(언제 그럴 가치가 있는지).

시각적으로 해보기

DynamoDB 쿼리 빌더가 페이지네이션 루프를 포함한 이 프로그램 전체를 폼 하나에서 SDK v3와 그 밖의 일곱 가지 대상으로 생성합니다.

DynoTable은 무한 스크롤 그리드로 라이브 테이블을 대신 페이지네이션해 주고, 그 그리드 뒤의 Scan을 실행 가능한 코드로 내보냅니다. DynoTable 다운로드.

관련 예제

참고 자료

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

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

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

DynamoDB 쿼리 빌더 열기

Console 없이 DynamoDB 작업하기

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

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