

# AttributeUpdates(레거시)
<a name="LegacyConditionalParameters.AttributeUpdates"></a>

**참고**  
가능하면 이러한 레거시 파라미터 대신 새 표현식 파라미터를 사용하는 것이 좋습니다. 자세한 내용은 [DynamoDB에서 표현식 사용](Expressions.md) 섹션을 참조하세요. 이 파라미터를 대체하는 새 파라미터에 대한 자세한 내용은 [대신 *UpdateExpression*을 사용합니다.](#UpdateExpression.instead) 섹션을 참조하세요.

`UpdateItem` 작업에서, 레거시 조건 파라미터 `AttributeUpdates`에는 수정할 속성 이름, 각각에서 수행할 작업, 각각의 새 값이 포함되어 있습니다. 해당 테이블의 인덱스에 대한 인덱스 키 속성인 속성을 업데이트하는 경우, 속성 유형이 표 설명의 `AttributesDefinition`에 정의되어 있는 인덱스 키 유형과 일치해야 합니다. `UpdateItem`을 사용하여 다른 키가 아닌 속성을 업데이트할 수 있습니다.

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

각 `AttributeUpdates` 요소는 수정할 속성 이름 및 다음 파라미터로 구성됩니다.
+  `Value` - 이 속성의 새 값(해당되는 경우)입니다.
+  `Action` - 업데이트 수행 방법을 지정하는 값입니다. 이 작업은 데이터 유형이 숫자이거나 집합인 기존 속성에 대해서만 유효하므로, 다른 데이터 유형에는 `ADD`를 사용하지 마십시오.

  지정된 기본 키를 가진 항목이 테이블에 없으면, 다음 값이 다음 작업을 수행합니다.
  +  `PUT` - 지정된 속성을 항목에 추가합니다. 속성이 이미 있는 경우 새 값으로 바뀝니다.
  +  `DELETE` - 에 대해 지정된 값이 없는 경우, 속성과 해당 값을 제거합니다.`DELETE` 지정된 값의 데이터 유형은 기존 값의 데이터 유형과 일치해야 합니다.

    값 세트가 지정된 경우 해당 값이 이전 세트에서 제거됩니다. 예를 들어, 속성 값이 세트 `[a,b,c]`이고 `DELETE` 작업이 `[a,c]`를 지정하면, 최종 속성 값은 `[b]`가 됩니다. 빈 세트를 지정하면 오류가 발생합니다.
  +  `ADD` - 속성이 아직 없으면 지정된 값을 항목에 추가합니다. 속성이 있으면 `ADD`의 동작은 속성의 데이터 형식에 따라 달라집니다.
    + 기존 속성이 숫자이고 `Value`도 숫자이면 `Value`가 산술적으로 기존 속성에 추가됩니다. `Value`가 음수이면 기존 속성에서 차감됩니다.
**참고**  
`ADD`를 사용하여 업데이트 전에는 존재하지 않은 항목의 숫자 값을 증가 또는 감소시키는 경우, DynamoDB는 초기 값으로 0을 사용합니다.  
마찬가지로, `ADD`를 사용하여 업데이트 전에는 존재하지 않은 속성 값을 증가 또는 감소시키는 경우, DynamoDB는 초기 값으로 `0`을 사용합니다. 예를 들어, 업데이트하려는 항목에 *itemcount*라는 속성이 없는데, 그래도 이 속성에 숫자 `3`을 `ADD`하려고 한다고 가정합니다. DynamoDB는 *itemcount* 속성을 만들고, 초기 값을 `0`으로 설정하고, 마지막으로 `3`을 더합니다. 결과는 새로운 *itemcount* 속성이 되며, 그 값은 `3`이 됩니다.
    + 기존 데이터 형식이 세트이고 `Value`도 세트이면 `Value`가 기존 세트에 추가됩니다. 예를 들어, 속성 값이 세트 `[1,2]`이고 `ADD` 작업이 `[3]`을 지정하면, 최종 속성 값은 `[1,2,3]`이 됩니다. 세트 속성에 대한 `ADD` 작업이 지정되어 있으며 지정된 속성 유형이 기존 세트 유형과 일치하지 않는 경우 오류가 발생합니다.

      두 세트의 프리미티브 데이터 형식이 동일해야 합니다. 예를 들어, 기존 데이터 형식이 문자열 세트인 경우 `Value` 도 문자열 세트여야 합니다.

  지정된 키를 가진 항목이 테이블에 없으면, 다음 값이 다음 작업을 수행합니다.
  +  `PUT` - DynamoDB가 지정된 기본 키를 사용하여 새 항목을 만든 다음, 속성을 추가합니다.
  +  `DELETE` - 존재하지 않는 항목에서는 속성을 삭제할 수 없으므로 아무 변화가 없습니다. 작업은 성공하지만 DynamoDB가 새 항목을 만들지 않습니다.
  +  `ADD` - DynamoDB가 속성 값에 대해 제공된 기본 키와 숫자(또는 숫자 세트)로 항목을 만듭니다. 허용되는 유일한 데이터 형식은 숫자 및 숫자 집합입니다.

인덱스 키의 일부인 속성을 제공하는 경우, 해당 속성의 데이터 형식이 표 속성 설명에 있는 스키마의 데이터 형식과 일치해야 합니다.

## 대신 *UpdateExpression* 사용 - 예
<a name="UpdateExpression.instead"></a>

*Music* 테이블의 항목을 수정하려고 한다고 가정합니다. 다음 `UpdateItem` 예제에서와 같이 `AttributeUpdates` 요청을 AWS CLI 파라미터와 함께 사용할 수 있습니다.

```
aws dynamodb update-item \
    --table-name Music \
    --key '{
        "SongTitle": {"S":"Call Me Today"}, 
        "Artist": {"S":"No One You Know"}
    }' \
    --attribute-updates '{
        "Genre": {
            "Action": "PUT", 
            "Value": {"S":"Rock"}
        }   
    }'
```

대신에 `UpdateExpression`을 사용할 수 있습니다.

```
aws dynamodb update-item \
    --table-name Music \
    --key '{
        "SongTitle": {"S":"Call Me Today"}, 
        "Artist": {"S":"No One You Know"}
    }' \
    --update-expression 'SET Genre = :g' \ 
    --expression-attribute-values '{
        ":g": {"S":"Rock"}
    }'
```