DynamoDB에서 항목 개수는 어떻게 세나요?
일치하는 항목을 돌려받지 않고 개수만 세려면 Query나 Scan에 Select: 'COUNT'를 쓰세요. 응답 하나는 스캔된 1 MB까지만 세므로, 전체 합계를 구하려면 LastEvaluatedKey로 페이지를 넘기며 Count 값을 합산해야 합니다. 테이블 전체의 근사치가 필요하면 DescribeTable의 ItemCount를 읽으세요. 그룹별 개수 — 또는 한 열에 대한 SUM/AVG — 가 필요하면 DynoTable의 SQL 워크벤치가 COUNT와 GROUP BY를 쿼리 하나로 실행하고 페이지네이션도 대신 처리합니다.
일치한 항목을 정확히 세기
Query(파티션 키 하나에 대해)나 Scan(테이블 전체)에서 Select를 COUNT로 설정하세요. 응답은 Count와 ScannedCount를 돌려주고 항목 데이터는 돌려주지 않습니다. 스캔한 데이터가 1 MB를 넘으면 작업이 멈추고 LastEvaluatedKey를 돌려줍니다 — 그것이 사라질 때까지 계속 호출하며 Count를 더하세요. 세는 것이 읽는 것보다 싸지 않다는 점에 유의하세요. COUNT는 항목을 돌려받을 때와 같은 읽기 용량을 소비합니다.
Count와 ScannedCount
Count— 이 페이지에서 여러분의 키/필터 조건에 일치한 항목.ScannedCount— 필터링 전에 검사된 항목. 필터 표현식은 결과를 좁힐 뿐 스캔된 양(과 그 비용)을 줄이지 않습니다.
COUNT는 할인이 아닙니다, 측정했습니다
"세는 것이 읽는 것과 같은 비용"이라는 말은 주장하기도 쉽고 의심하기도 쉬우니, 대략 3 KB짜리 항목 40개(총 120,700바이트)를 담은 테이블에서 각 호출마다 ReturnConsumedCapacity: 'TOTAL'을 붙여 실제로 해 봤습니다:
| 요청 | Count | ScannedCount | ConsumedCapacity |
|---|---|---|---|
Select: 'COUNT'을 쓴 Query | 40 | 40 | 15 |
항목을 돌려주는 Query | 40 | 40 | 15 |
절반에 일치하는 필터를 건 Scan, Select: 'COUNT' | 20 | 40 | 15 |
볼 만한 것은 세 번째 행입니다. 필터는 Count를 절반으로 줄이고, ScannedCount는 그대로 두며, 청구서는 조금도 움직이지 않습니다.
15는 예측할 수 있는 숫자입니다. 120,700바이트는 4킬로바이트 읽기 단위 30개로 올림되고, 달리 요청하지 않는 한 Query는 최종적 일관성이므로 절반이 됩니다.
값싼 근사치
DescribeTable은 대략 여섯 시간마다 갱신되는 테이블 전체 추정치인 ItemCount를 돌려줍니다. 무료이고 즉시 나오지만 실시간은 아니므로, 대시보드에는 좋고 정확한 합계에는 맞지 않습니다.
DynamoDB Local로 테스트한다면 경고 하나. 그것은 ItemCount를 즉시 갱신합니다. 거기서 항목 40개를 쓰고 DescribeTable을 호출하면 곧바로 40이 나옵니다. 실제 서비스는 그러지 않으므로, 로컬에서 통과하는 신선도 로직이 프로덕션에서는 여섯 시간 틀릴 수 있습니다.
DynoTable로 세고 집계하기
원시 API는 COUNT는 주지만 GROUP BY, SUM, AVG는 주지 않으므로 그룹화와 합산은 보통 애플리케이션 코드에서 일어납니다. DynoTable의 SQL 워크벤치가 그것을 더합니다. SELECT COUNT(*), SUM(total), 또는 그룹별 개수를 쓰면 페이지네이션 루프를 대신 돌리고 페이지가 흘러 들어올수록 숫자를 다듬습니다. 여전히 DynamoDB를 통해 읽으므로 같은 읽기 용량 비용이 적용되지만, 루프 대신 쿼리 하나를 쓰면 되고 API가 직접 돌려줄 수 없는 그룹화·합산 결과를 얻습니다.
더 알아보기
DynamoDB의 count, sum, 집계를 읽고 Expression Builder로 count 쿼리를 만드세요. 여러분의 테이블에 count와 집계(COUNT, SUM, GROUP BY)를 실행하려면 DynoTable을 다운로드하세요.
참고 자료
- Query — Amazon DynamoDB API Reference
- Scan — Amazon DynamoDB API Reference
- TableDescription — Amazon DynamoDB API Reference
위에 링크된 공식 AWS 문서를 기준으로 2026-07-13에 마지막으로 검증했습니다.
용량 수치는 2026-07-28에 @aws-sdk/client-dynamodb 3.1095.0으로 DynamoDB Local 3.3.0(amazon/dynamodb-local:latest)을 상대로 재현했습니다. DynamoDB Local은 서비스가 아니며, 위에 적은 ItemCount 차이가 둘이 갈라지는 한 지점입니다.