Go(AWS SDK v2)에서의 DynamoDB Scan

Scan은 테이블이나 인덱스의 모든 항목을 페이지 단위로 읽은 다음, 선택적으로 FilterExpression으로 행을 걸러냅니다. AWS SDK for Go v2에서는 내장 **ScanPaginator**가 테이블 전체를 읽을 때까지 LastEvaluatedKey를 따라갑니다.

Code

package main

import (
	"context"
	"fmt"
	"log"

	"github.com/aws/aws-sdk-go-v2/aws"
	"github.com/aws/aws-sdk-go-v2/config"
	"github.com/aws/aws-sdk-go-v2/service/dynamodb"
	"github.com/aws/aws-sdk-go-v2/service/dynamodb/types"
)

func main() {
	ctx := context.TODO()
	cfg, err := config.LoadDefaultConfig(ctx, config.WithRegion("us-east-1"))
	if err != nil {
		log.Fatalf("load config: %v", err)
	}
	client := dynamodb.NewFromConfig(cfg)

	paginator := dynamodb.NewScanPaginator(client, &dynamodb.ScanInput{
		TableName:        aws.String("Music"),
		FilterExpression: aws.String("#filter0 >= :filterValue0"),
		ExpressionAttributeNames: map[string]string{
			"#filter0": "Year",
		},
		ExpressionAttributeValues: map[string]types.AttributeValue{
			":filterValue0": &types.AttributeValueMemberN{Value: "2010"},
		},
	})

	var items []map[string]types.AttributeValue
	for paginator.HasMorePages() {
		page, err := paginator.NextPage(ctx)
		if err != nil {
			log.Fatalf("scan: %v", err)
		}
		items = append(items, page.Items...)
	}
	fmt.Printf("Matched %d items\n", len(items))
}

Explanation

  • FilterExpression — 읽기 이후에 서버에서 적용됩니다. 응답은 줄이지만 비용은 줄이지 않습니다. 필터링 여부와 무관하게 스캔된 모든 항목을 읽는 비용을 지불합니다.
  • ExpressionAttributeNames — 필터링되는 속성은 별칭 처리(#filter0Year)되어 Year 같은 예약어를 안전하게 유지합니다.
  • 페이지네이션 — 각 Scan 페이지는 필터링 전에 최대 1 MB를 읽으므로, 테이블에 일치 항목이 아직 있어도 필터링된 페이지가 비어서 돌아올 수 있습니다. dynamodb.NewScanPaginatorLastEvaluatedKey가 소진될 때까지 계속 호출합니다 — 첫 페이지에서 멈추지 마세요.
  • 페이지당 스캔되는 항목 수(필터 이전)를 제한하려면 **Limit**을 설정하세요 — 반환되는 항목 수는 제한하지 않습니다.
  • 대규모 전체 테이블 스캔은 Segment / TotalSegments로 작업을 여러 고루틴에 분할하세요(병렬 스캔).
  • Query를 선호하세요. Scan은 테이블 전체를 읽습니다. 아주 작은 테이블이 아닌 한 느리고 비쌉니다.

Do it visually

필터를 손으로 조립하고 계신가요? DynamoDB Expression BuilderFilterExpression + 이름/값 맵을 만들고 실행 가능한 코드를 복사해 줍니다.

스크립트에서 무작정 스캔하는 대신 GUI에서 테이블을 탐색하려면 — 필터링되고 페이지네이션된 결과 그리드와 코드로 복사 — DynoTable을 다운로드하세요.

References

Last verified 2026-07-13 against the official AWS documentation linked above.

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

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

DynamoDB 쿼리 빌더 열기

Console 없이 DynamoDB 작업하기

DynoTable은 DynamoDB를 위한 빠른 데스크톱 클라이언트입니다 — 테이블을 탐색하고, SQL 스타일 쿼리를 실행하고, 항목을 로컬에서 편집하세요.