

# UpdateItem
<a name="API_UpdateItem_v20111205"></a>

**중요**  
***이 단원에서 언급되는 API 버전 2011-12-05는 사용 중단되었으며 새 애플리케이션에 사용해서는 안 됩니다.***  
 **현재 하위 수준 API에 대한 설명서는 [Amazon DynamoDB API 참조](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/) 섹션을 참조하세요.**

## 설명
<a name="API_UpdateItem_Description"></a>

기존 항목의 속성을 편집합니다. 조건부 업데이트를 수행할 수 있습니다(속성 이름-값 페어가 없는 경우 새로 삽입하거나 특정 예상 속성 값이 있는 경우 기존 이름-값 페어를 바꿉니다).

**참고**  
UpdateItem을 사용하여 기본 키 속성을 업데이트할 수 없습니다. 대신 해당 항목을 삭제하고 PutItem을 사용하여 새 속성이 포함된 새 항목을 만듭니다.

UpdateItem 작업에는 업데이트를 수행하는 방법을 정의하는 `Action` 파라미터가 포함되어 있습니다. 속성 값을 입력, 삭제 또는 추가할 수 있습니다.

속성 값은 null이 될 수 없습니다. 문자열과 이진 형식 속성 길이는 0보다 커야 합니다. 설정 유형 속성은 비어 있으면 안 됩니다. 값이 비어 있는 요청은 `ValidationException`으로 거부됩니다.

기존 항목에 지정된 기본 키가 있는 경우: 
+ **PUT** - 지정된 속성을 추가합니다. 속성이 이미 있는 경우 새 값으로 바뀝니다.
+ **DELETE** - 지정된 값이 없는 경우 속성과 해당 값을 제거합니다. 값 세트가 지정된 경우 지정된 세트의 값이 이전 세트에서 제거됩니다. 따라서 속성 값에 [a,b,c]가 포함되어 있고 삭제 작업에 [a,c]가 포함되어 있으면 최종 속성 값은 [b]가 됩니다. 지정된 값 유형은 기존 값 유형과 일치해야 합니다. 빈 세트를 지정하는 것은 유효하지 않습니다.
+ **ADD** - 숫자에 대해 또는 대상 속성이 세트(문자열 세트 포함)인 경우에만 추가 작업을 사용합니다. ADD는 대상 속성이 단일 문자열 값이거나 스칼라 이진 값인 경우에는 작동하지 않습니다. 지정된 값은 숫자 값에 추가(기존 숫자 값 증가 또는 감소)되거나 문자열 세트에 추가 값으로 추가됩니다. 값 세트가 지정된 경우 해당 값이 기존 세트에 추가됩니다. 예를 들어 원래 값이 [1,2]이고 제공한 값이 [3]이면 추가 작업 후 세트는 [4,5]가 아니라 [1,2,3]이 됩니다. 세트 속성에 대한 Add 작업이 지정되어 있으며 지정된 속성 유형이 기존 세트 유형과 일치하지 않는 경우 오류가 발생합니다.

  존재하지 않는 속성에 대해 ADD를 사용하면 해당 속성과 그 값이 항목에 추가됩니다.

항목이 지정된 기본 키와 일치하지 않는 경우: 
+ **PUT** - 지정된 기본 키가 포함된 새 항목을 만듭니다. 그런 다음 지정된 속성을 추가합니다.
+ **DELETE** - 아무 것도 발생하지 않습니다.
+ **ADD** - 속성 값에 대해 제공된 기본 키와 숫자(또는 숫자 세트)가 포함된 항목을 만듭니다. 문자열 또는 이진 형식에는 유효하지 않습니다. 

**참고**  
`ADD`를 사용하여 업데이트 전에는 존재하지 않은 항목의 숫자 값을 증가 또는 감소시키는 경우, DynamoDB는 초기 값으로 `0`을 사용합니다. 또한 `ADD`를 사용하여 항목을 업데이트함으로써 업데이트 전에는 존재하지 않은 속성의 숫자 값을 증가 또는 감소시키는 경우, DynamoDB는 초기 값으로 `0`을 사용합니다. 예를 들어, `ADD`를 사용하여 업데이트 전에는 존재하지 않은 속성에 `+3`을 추가합니다. DynamoDB는 `0`을 초기 값으로 사용하고 업데이트 후의 값은`3`입니다.

이 작업의 사용에 대한 자세한 내용은 [DynamoDB의 항목 및 속성 작업](WorkingWithItems.md) 단원을 참조하세요.

## 요청
<a name="API_UpdateItem_RequestParameters"></a>

### 구문
<a name="API_UpdateItem_RequestParameters.syntax"></a>

```
// This header is abbreviated.
// For a sample of a complete header, see DynamoDB 하위 수준 API.
POST / HTTP/1.1 
x-amz-target: DynamoDB_20111205.UpdateItem
content-type: application/x-amz-json-1.0

{"TableName":"Table1",
    "Key":
        {"HashKeyElement":{"S":"AttributeValue1"},
        "RangeKeyElement":{"N":"AttributeValue2"}},
    "AttributeUpdates":{"AttributeName3":{"Value":{"S":"AttributeValue3_New"},"Action":"PUT"}},
    "Expected":{"AttributeName3":{"Value":{"S":"AttributeValue3_Current"}}},
    "ReturnValues":"ReturnValuesConstant"
}
```


****  

|  명칭  |  설명  |  필수 | 
| --- | --- | --- | 
|  TableName  |  업데이트할 항목이 포함된 테이블 이름입니다. 유형: 문자열  |  예  | 
|  Key  | 항목을 정의하는 기본 키입니다. 기본 키에 대한 자세한 내용은 [프라이머리 키](HowItWorks.CoreComponents.md#HowItWorks.CoreComponents.PrimaryKey) 단원을 참조하세요.형식: 해당 값에 대한 `HashKeyElement` 및 해당 값에 대한 `RangeKeyElement`의 맵 | 예 | 
| AttributeUpdates | 업데이트의 새 값 및 작업에 대한 속성 이름의 맵입니다. 속성 이름은 수정할 속성을 지정하며, 기본 키 속성은 포함할 수 없습니다.형식: 속성 업데이트에 대한 속성 이름, 값 및 작업의 맵. |  | 
| AttributeUpdates:Action | 업데이트 수행 방법을 지정합니다. 가능한 값은 `PUT`(기본), `ADD` 또는 `DELETE`입니다. 의미는 UpdateItem 설명에 있습니다.유형: 문자열기본값: `PUT` | 아니요 | 
| Expected  | 조건부 업데이트의 속성을 지정합니다. `Expected` 파라미터를 사용하면 속성 이름뿐만 아니라, DynamoDB에서 속성 값이 이미 존재하는지 또는 속성 값이 존재하며 이를 변경하기 전에 특정 값이 있는지 확인해야 하는지 여부를 제공할 수 있습니다.형식: 속성 이름의 맵 | 아니요 | 
| Expected:AttributeName  | 조건부 입력에 대한 속성 이름입니다.유형: 문자열 | 아니요 | 
| Expected:AttributeName: ExpectedAttributeValue | 이 파라미터를 사용하여 속성 이름-값 페어의 값이 존재할지 여부를 지정합니다.다음 JSON 표기법은 항목의 "Color" 속성이 없을 경우 해당 항목을 업데이트합니다.<pre>"Expected" :<br />	{"Color":{"Exists":false}}</pre>다음 JSON 표기법은 항목을 업데이트하기 전에 이름이 "Color"인 속성의 기존 값이 "Yellow"인지 여부를 확인합니다.<pre>"Expected" : <br />	{"Color":{"Exists":true},{"Value":{"S":"Yellow"}}}</pre>기본적으로 `Expected` 파라미터를 사용하고 `Value`를 제공하는 경우 DynamoDB는 속성이 존재하고 바꿀 현재 값이 있는 것으로 가정합니다. 따라서 `{"Exists":true}`가 내재되어 있으므로 지정하지 않아도 됩니다. 요청을 다음과 같이 줄일 수 있습니다.<pre>"Expected" : <br />	{"Color":{"Value":{"S":"Yellow"}}}</pre> 확인할 속성 값이 없을 때 `{"Exists":true}`를 지정하면 DynamoDB는 오류를 반환합니다.  | 아니요 | 
| ReturnValues  | 속성 이름-값 페어가 `UpdateItem` 요청으로 업데이트되기 전에 이를 가져오려면 이 파라미터를 사용합니다. 가능한 파라미터 값은 `NONE`(기본) 또는 `ALL_OLD`, `UPDATED_OLD`, `ALL_NEW` 또는 `UPDATED_NEW`입니다. `ALL_OLD`가 지정되어 있으며 `UpdateItem`이 속성 이름-값 페어를 덮어쓴 경우, 이전 항목의 내용이 반환됩니다. 이 파라미터가 제공되지 않거나 `NONE`인 경우, 아무 것도 반환되지 않습니다. `ALL_NEW`가 지정된 경우, 해당 항목에 대한 새 버전의 모든 속성이 반환됩니다. `UPDATED_NEW`가 지정된 경우, 업데이트된 속성의 새 버전만 반환됩니다.유형: 문자열 | 아니요 | 

## 응답
<a name="API_UpdateItem_CommonResponseElements"></a>

### 구문
<a name="API_UpdateItem_CommonResponseElements.syntax"></a>

다음 구문 예는 요청에 `ALL_OLD`의 `ReturnValues` 파라미터가 지정되어 있다고 가정합니다. 그렇지 않을 경우 응답에는 `ConsumedCapacityUnits` 요소만 있습니다.

```
HTTP/1.1 200 
x-amzn-RequestId: 8966d095-71e9-11e0-a498-71d736f27375 
content-type: application/x-amz-json-1.0
content-length: 140

{"Attributes":{
	"AttributeName1":{"S":"AttributeValue1"},
	"AttributeName2":{"S":"AttributeValue2"},
	"AttributeName3":{"S":"AttributeValue3"},
	"AttributeName5":{"B":"dmFsdWU="}
	},
"ConsumedCapacityUnits":1
}
```


****  

|  명칭  |  설명  | 
| --- | --- | 
|  Attributes  | 속성 이름-값 페어의 맵입니다. 단 `ReturnValues` 파라미터가 요청에서 `NONE` 이외의 값으로 지정된 경우만 해당됩니다.형식: 속성 이름-값 페어의 맵 | 
| ConsumedCapacityUnits | 작업에서 사용한 쓰기 용량 단위의 수입니다. 이 값은 할당 처리량에 적용되는 수를 나타냅니다. 자세한 정보는 [DynamoDB 프로비저닝된 용량 모드](provisioned-capacity-mode.md) 섹션을 참조하세요. 형식: 숫자 | 

## 특수 오류
<a name="API_UpdateItem_SpecialErrors"></a>


****  

|  Error  |  설명  | 
| --- | --- | 
|  ConditionalCheckFailedException  | 조건부 확인이 실패했습니다. 속성("\$1 name \$1") 값은 ("\$1 value \$1")이지만 ("\$1 expValue \$1")로 예상되었습니다. | 
| ResourceNotFoundExceptions  | 지정된 항목 또는 속성을 찾을 수 없습니다. | 

## 예시
<a name="API_UpdateItem_Examples"></a>

AWS SDK를 사용하는 예는 [DynamoDB의 항목 및 속성 작업](WorkingWithItems.md) 단원을 참조하세요.

### 샘플 요청
<a name="API_UpdateItem_Examples_Request"></a>

```
// This header is abbreviated. For a sample of a complete header, see DynamoDB 하위 수준 API.
POST / HTTP/1.1 
x-amz-target: DynamoDB_20111205.UpdateItem
content-type: application/x-amz-json-1.0 

{"TableName":"comp5",
    "Key":
        {"HashKeyElement":{"S":"Julie"},"RangeKeyElement":{"N":"1307654350"}},
    "AttributeUpdates":
        {"status":{"Value":{"S":"online"},
        "Action":"PUT"}},
    "Expected":{"status":{"Value":{"S":"offline"}}},
    "ReturnValues":"ALL_NEW"
}
```

### 샘플 응답
<a name="API_UpdateItem_Examples_Response"></a>

```
HTTP/1.1 200 OK
x-amzn-RequestId: 5IMHO7F01Q9P7Q6QMKMMI3R3QRVV4KQNSO5AEMVJF66Q9ASUAAJG
content-type: application/x-amz-json-1.0
content-length: 121
Date: Fri, 26 Aug 2011 21:05:00 GMT

{"Attributes":
    {"friends":{"SS":["Lynda, Aaron"]},
    "status":{"S":"online"},
    "time":{"N":"1307654350"},
    "user":{"S":"Julie"}},
"ConsumedCapacityUnits":1
}
```

## 관련 작업
<a name="API_UpdateItem_Related_Actions"></a>
+  [PutItem](API_PutItem_v20111205.md) 
+  [DeleteItem](API_DeleteItem_v20111205.md) 