Go(AWS SDK v2)에서의 DynamoDB UpdateItem
UpdateItem은 한 항목의 특정 속성을 변경하며(항목이 없으면 생성), 나머지는 그대로 둡니다. AWS SDK for Go v2에서는 dynamodb.UpdateItemInput에 UpdateExpression을 담아 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 = :updValue0은Genre를,#upd1 = :updValue1은Year를 설정). 모든 속성은ExpressionAttributeNames를 통해 별칭 처리되므로Year같은 예약어가 항상 안전합니다. - 숫자에 대한
ADD는 원자적 증가를 수행합니다(ADD #upd2 :updValue2는Awards에 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을 다운로드하세요.
Related examples
- DynamoDB UpdateItem in Java — AWS SDK for Java 2.x를 사용한 동일한 업데이트.
- DynamoDB PutItem in Go — 대신 항목 전체를 교체하기.
- DynamoDB update expressions —
SET,ADD,REMOVE,DELETE, 그리고 관용구. - Understanding ReturnValues — 각
ReturnValues옵션이 제공하는 것. - "Attribute name is a reserved keyword" — 여기서 별칭 맵이 선택 사항이 아닌 이유.
- "Invalid UpdateExpression" syntax errors — 흔한 SET/ADD 구문 실수를 풀어서 설명.
References
- UpdateItem — Amazon DynamoDB API Reference
- Use UpdateItem with an AWS SDK or CLI — Amazon DynamoDB Developer Guide
- dynamodb package — AWS SDK for Go v2 (pkg.go.dev)
- dynamodb/types package — AWS SDK for Go v2 (pkg.go.dev)
- expression package — AWS SDK for Go v2 (pkg.go.dev)
- Update expressions — Amazon DynamoDB Developer Guide
Last verified 2026-07-13 against the official AWS documentation linked above.