Java(AWS SDK v2)에서의 DynamoDB UpdateItem
UpdateItem은 한 항목의 특정 속성을 변경하며(항목이 없으면 생성), 나머지는 그대로 둡니다. AWS SDK for Java 2.x에서는 updateExpression을 가진 UpdateItemRequest를 빌드합니다.
Code
import java.util.HashMap;
import java.util.Map;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
import software.amazon.awssdk.services.dynamodb.model.AttributeValue;
import software.amazon.awssdk.services.dynamodb.model.DynamoDbException;
import software.amazon.awssdk.services.dynamodb.model.ReturnValue;
import software.amazon.awssdk.services.dynamodb.model.UpdateItemRequest;
import software.amazon.awssdk.services.dynamodb.model.UpdateItemResponse;
public class UpdateItemExample {
public static void main(String[] args) {
try (DynamoDbClient ddb = DynamoDbClient.builder()
.region(Region.US_EAST_1)
.build()) {
Map<String, AttributeValue> key = new HashMap<>();
key.put("Artist", AttributeValue.builder().s("Arturo Sandoval").build());
key.put("SongTitle", AttributeValue.builder().s("Cubano Chant").build());
Map<String, String> names = new HashMap<>();
names.put("#upd0", "Genre");
names.put("#upd1", "Year");
names.put("#upd2", "Awards");
Map<String, AttributeValue> values = new HashMap<>();
values.put(":updValue0", AttributeValue.builder().s("Latin Jazz").build());
values.put(":updValue1", AttributeValue.builder().n("1994").build());
values.put(":updValue2", AttributeValue.builder().n("1").build());
UpdateItemRequest request = UpdateItemRequest.builder()
.tableName("Music")
.key(key)
.updateExpression("SET #upd0 = :updValue0, #upd1 = :updValue1 ADD #upd2 :updValue2")
.expressionAttributeNames(names)
.expressionAttributeValues(values)
.returnValues(ReturnValue.ALL_NEW)
.build();
UpdateItemResponse response = ddb.updateItem(request);
System.out.println(response.attributes()); // the item after the update
} catch (DynamoDbException e) {
System.err.println(e.getMessage());
}
}
}Explanation
key— 업데이트할 항목의 전체 기본 키입니다.updateExpression— 하나 이상의 절:- **
SET**은 속성을 할당합니다(#upd0 = :updValue0은Genre를,#upd1 = :updValue1은Year를 설정). 모든 속성은expressionAttributeNames를 통해 별칭 처리되므로Year같은 예약어가 항상 안전합니다. - 숫자에 대한
ADD는 원자적 증가를 수행합니다(ADD #upd2 :updValue2는Awards에 1을 더함) — 동시성 하에서 안전하며 읽기-수정-쓰기 경합이 없습니다.REMOVE는 속성을 삭제하고,DELETE는 집합에서 요소를 제거합니다.
- **
expressionAttributeValues—:placeholder→ 타입 지정AttributeValue맵입니다.returnValues(ReturnValue.ALL_NEW)— 업데이트 후의 전체 항목을response.attributes()로 반환합니다(또한UPDATED_NEW,ALL_OLD,UPDATED_OLD, 또는NONE).- Upsert 시맨틱 — 키가 존재하지 않으면
UpdateItem이 항목을 생성합니다. 업데이트만 하려면conditionExpression(예:attribute_exists(Artist))을 추가하세요. - 레거시
attributeUpdates맵보다 업데이트 표현식을 선호하세요 — 표현식은 하나의 요청에서 여러 절, 별칭, 조건을 지원합니다.
Do it visually
DynamoDB Expression Builder는 이름/값 맵과 함께 SET / ADD / REMOVE 절을 만들고 실행 가능한 코드를 복사해 줍니다.
GUI에서 항목을 편집하려면 — 필드 변경, 생성된 UpdateExpression 검토, 코드 복사 — DynoTable을 다운로드하세요.
Related examples
- DynamoDB UpdateItem in Go — AWS SDK for Go v2를 사용한 동일한 업데이트.
- DynamoDB PutItem in Java — 대신 항목 전체를 교체하기.
- 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
- DynamoDbClient — AWS SDK for Java 2.x API Reference
- UpdateItemRequest — AWS SDK for Java 2.x API Reference
- Update expressions — Amazon DynamoDB Developer Guide
Last verified 2026-07-13 against the official AWS documentation linked above.