Go(AWS SDK v2)에서의 DynamoDB Query

Query는 하나의 파티션 키를 공유하는 모든 항목을 읽으며, 선택적으로 정렬 키로 범위를 좁힙니다. AWS SDK for Go v2에서는 dynamodb.QueryInputKeyConditionExpression을 작성하며, 내장 **QueryPaginator**가 모든 결과 페이지에 걸쳐 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.NewQueryPaginator(client, &dynamodb.QueryInput{
		TableName: aws.String("Music"),
		KeyConditionExpression: aws.String(
			"#hashKey = :hashKeyValue AND begins_with(#rangeKey, :rangeKeyValue)"),
		ExpressionAttributeNames: map[string]string{
			"#hashKey":  "Artist",
			"#rangeKey": "SongTitle",
		},
		ExpressionAttributeValues: map[string]types.AttributeValue{
			":hashKeyValue":  &types.AttributeValueMemberS{Value: "Arturo Sandoval"},
			":rangeKeyValue": &types.AttributeValueMemberS{Value: "C"},
		},
	})

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

Explanation

  • KeyConditionExpression — 파티션 키에 대한 등가 조건(#hashKey = :hashKeyValue)과, 최대 하나의 정렬 키 조건(=, <, <=, >, >=, BETWEEN 또는 begins_with)을 포함해야 합니다. #hashKey/#rangeKey 별칭은 ExpressionAttributeNames를 통해 Artist/SongTitle로 해석됩니다(예약어 안전).
  • ExpressionAttributeValues:placeholder → 타입 지정 값 맵(&types.AttributeValueMemberS{...})입니다.
  • 페이지네이션 — 하나의 Query는 최대 1 MB를 반환합니다. dynamodb.NewQueryPaginator는 클라이언트를 감싸 LastEvaluatedKey가 소진될 때까지 계속 호출합니다. HasMorePages() / NextPage(ctx) 루프가 SDK의 표준 패턴입니다.
  • 정렬 키 순서를 반대로 하려면 **ScanIndexForward: aws.Bool(false)**를 설정하세요(기본값은 오름차순).
  • 보조 인덱스를 쿼리하려면 IndexName: aws.String("...")을 추가하세요.
  • 코드로 조건을 구성하는 것을 선호하시나요? expression 패키지(github.com/aws/aws-sdk-go-v2/feature/dynamodb/expression)는 expression.Key(...).Equal(...) 빌더를 조합해 이름/값 맵을 생성하며, attributevalue.UnmarshalListOfMapspage.Items를 Go 구조체로 변환합니다.

Do it visually

DynamoDB Expression Builder는 키 조건을 조립하고 실행 가능한 코드를 복사해 주므로, 자리 표시자와 값 맵을 손으로 작성할 필요가 없습니다.

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 스타일 쿼리를 실행하고, 항목을 로컬에서 편집하세요.