Go(AWS SDK v2)에서의 DynamoDB UpdateItem

UpdateItem은 한 항목의 특정 속성을 변경하며(항목이 없으면 생성), 나머지는 그대로 둡니다. AWS SDK for Go v2에서는 dynamodb.UpdateItemInputUpdateExpression을 담아 client.UpdateItem을 호출합니다.

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)

	out, err := client.UpdateItem(ctx, &dynamodb.UpdateItemInput{
		TableName: aws.String("Music"),
		Key: map[string]types.AttributeValue{
			"Artist":    &types.AttributeValueMemberS{Value: "Arturo Sandoval"},
			"SongTitle": &types.AttributeValueMemberS{Value: "Cubano Chant"},
		},
		UpdateExpression: aws.String("SET #upd0 = :updValue0, #upd1 = :updValue1 ADD #upd2 :updValue2"),
		ExpressionAttributeNames: map[string]string{
			"#upd0": "Genre",
			"#upd1": "Year",
			"#upd2": "Awards",
		},
		ExpressionAttributeValues: map[string]types.AttributeValue{
			":updValue0": &types.AttributeValueMemberS{Value: "Latin Jazz"},
			":updValue1": &types.AttributeValueMemberN{Value: "1994"},
			":updValue2": &types.AttributeValueMemberN{Value: "1"},
		},
		ReturnValues: types.ReturnValueAllNew,
	})
	if err != nil {
		log.Fatalf("update item: %v", err)
	}
	fmt.Println(out.Attributes) // the item after the update
}

Explanation

  • Key — 업데이트할 항목의 전체 기본 키입니다.
  • UpdateExpression — 하나 이상의 절:
    • **SET**은 속성을 할당합니다(#upd0 = :updValue0Genre를, #upd1 = :updValue1Year를 설정). 모든 속성은 ExpressionAttributeNames를 통해 별칭 처리되므로 Year 같은 예약어가 항상 안전합니다.
    • 숫자에 대한 ADD원자적 증가를 수행합니다(ADD #upd2 :updValue2Awards에 1을 더함) — 동시성 하에서 안전하며 읽기-수정-쓰기 경합이 없습니다. REMOVE는 속성을 삭제하고, DELETE는 집합에서 요소를 제거합니다.
  • ExpressionAttributeValues:placeholder → 타입 지정 값 맵입니다(AttributeValueMemberS/...MemberN).
  • ReturnValues: types.ReturnValueAllNew — 업데이트 후의 전체 항목을 out.Attributes로 반환합니다(또한 ReturnValueUpdatedNew, ReturnValueAllOld, ReturnValueUpdatedOld, 또는 ReturnValueNone).
  • Upsert 시맨틱 — 키가 존재하지 않으면 UpdateItem이 항목을 생성합니다. 업데이트만 하려면 ConditionExpression(예: attribute_exists(Artist))을 추가하세요.
  • 코드로 표현식을 구성하는 것을 선호하시나요? expression 패키지(github.com/aws/aws-sdk-go-v2/feature/dynamodb/expression)는 SET/ADD 절을 조합하고 이름/값 맵을 대신 생성합니다.

Do it visually

DynamoDB Expression Builder는 이름/값 맵과 함께 SET / ADD / REMOVE 절을 만들고 실행 가능한 코드를 복사해 줍니다.

GUI에서 항목을 편집하려면 — 필드 변경, 생성된 UpdateExpression 검토, 코드 복사 — DynoTable을 다운로드하세요.

References

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

Console 없이 DynamoDB 작업하기

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