

# 레거시 DynamoDB 조건부 파라미터
<a name="LegacyConditionalParameters"></a>

이 문서에서는 DynamoDB의 레거시 조건부 파라미터에 대한 개요를 제공하며 이 대신 새 표현식 파라미터를 사용할 것을 권장합니다. AttributesToGet, AttributeUpdates, ConditionalOperator, Expected, KeyConditions, QueryFilter, and ScanFilter 등의 파라미터에 대해 자세히 설명하고, 새 표현식 파라미터를 대신 사용하는 방법에 대한 예를 보여줍니다.

**중요**  
가능하면 이러한 레거시 파라미터 대신 새 표현식 파라미터를 사용하는 것이 좋습니다. 자세한 내용은 [DynamoDB에서 표현식 사용](Expressions.md) 섹션을 참조하세요.  
또한 DynamoDB는 단일 호출에서 기존 조건부 파라미터와 표현식 파라미터의 혼용을 허용하지 않습니다. 예를 들어 `Query`과 `AttributesToGet`을 사용해 `ConditionExpression` 작업을 호출하면 오류가 발생합니다.

다음 표는 이러한 레거시 파라미터를 여전히 지원하는 DynamoDB API 작업과, 대신 사용할 수 있는 표현식 파라미터를 나타낸 것입니다. 이 표는 애플리케이션에서 표현식 파라미터를 대신 사용하도록 업데이트하려는 경우 유용합니다.


****  
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/amazondynamodb/latest/developerguide/LegacyConditionalParameters.html)

다음 단원에서는 기존 조건부 파라미터에 대한 자세한 내용을 제공합니다.

**Topics**
+ [AttributesToGet(레거시)](LegacyConditionalParameters.AttributesToGet.md)
+ [AttributeUpdates(레거시)](LegacyConditionalParameters.AttributeUpdates.md)
+ [ConditionalOperator(레거시)](LegacyConditionalParameters.ConditionalOperator.md)
+ [Expected(레거시)](LegacyConditionalParameters.Expected.md)
+ [KeyConditions(레거시)](LegacyConditionalParameters.KeyConditions.md)
+ [QueryFilter(레거시)](LegacyConditionalParameters.QueryFilter.md)
+ [ScanFilter(레거시)](LegacyConditionalParameters.ScanFilter.md)
+ [기존 파라미터를 이용한 조건 작성](LegacyConditionalParameters.Conditions.md)

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

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

레거시 조건 파라미터 `AttributesToGet`은 DynamoDB에서 검색되는 하나 이상의 속성 어레이입니다. 속성 이름을 제공하지 않으면 모든 속성이 반환됩니다. 요청한 속성을 찾을 수 없는 경우 결과에 표시되지 않습니다.

`AttributesToGet`을 사용하면 목록이나 맵 유형의 속성을 검색할 수 있지만 목록이나 맵 안의 개별 요소는 검색할 수 없습니다.

`AttributesToGet`은 할당 처리량에 영향을 주지 않습니다. DynamoDB는 애플리케이션에 반환되는 데이터 크기가 아닌 항목 크기를 기준으로 소비된 용량 단위를 결정합니다.

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

*Music* 테이블에서 항목을 검색하고 싶은데, 속성 중 일부만 반환되길 원한다고 가정합니다. 다음 `GetItem` 예제에서와 같이 `AttributesToGet` 요청을 AWS CLI 파라미터와 함께 사용할 수 있습니다.

```
aws dynamodb get-item \
    --table-name Music \
    --attributes-to-get '["Artist", "Genre"]' \
    --key '{
        "Artist": {"S":"No One You Know"},
        "SongTitle": {"S":"Call Me Today"}
    }'
```

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

```
aws dynamodb get-item \
    --table-name Music \
    --projection-expression "Artist, Genre" \
    --key '{
        "Artist": {"S":"No One You Know"},
        "SongTitle": {"S":"Call Me Today"}
    }'
```

# 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"}
    }'
```

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

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

레거시 조건 파라미터 `ConditionalOperator`는 `Expected`, `QueryFilter` 또는 `ScanFilter` 맵의 조건에 적용하는 데 사용되는 논리 연산자입니다.
+ AND - 모든 조건이 true로 평가되면 전체 맵이 true로 평가됩니다.
+ OR - 조건 중 하나라도 true로 평가되면 전체 맵이 true로 평가됩니다.

`ConditionalOperator`를 생략하는 경우 `AND`가 기본값입니다.

전체 맵이 true로 평가되는 경우에만 작업이 성공합니다.

**참고**  
이 파라미터는 목록 또는 맵 유형의 속성을 지원하지 않습니다.

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

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

레거시 조건 파라미터 `Expected`는 `UpdateItem` 작업의 조건부 블록입니다. `Expected`는 속성/조건 페어의 맵입니다. 각 속성은 속성 이름, 비교 연산자 및 하나 이상의 값으로 구성됩니다. DynamoDB는 비교 연산자를 사용하여 속성을 제공된 값과 비교합니다. 각 `Expected` 요소에 대한 평가 결과는 true 또는 false입니다.

`Expected` 맵의 요소를 다수 지정하는 경우, 기본적으로 모든 조건이 true로 평가되어야 합니다. 즉, 조건은 `AND` 연산자를 사용하여 결합됩니다. (대신 `ConditionalOperator` 파라미터를 사용하여 조건을 OR로 연결할 수 있습니다. 이렇게 하는 경우 모든 조건이 아니라 조건 중 하나 이상이 true로 평가되어야 합니다.)

`Expected` 맵이 true로 평가되면 조건부 작업이 성공하지만, 그렇지 않으면 실패합니다.

 `Expected`는 다음을 포함합니다.
+  `AttributeValueList` - 제공된 속성에 대해 평가되는 하나 이상의 값. 목록에 있는 값의 개수는 사용되는 `ComparisonOperator`에 따라 달라집니다.

  숫자 유형의 경우 값 비교가 숫자입니다.

  크다, 같다 또는 작다 등의 문자열 값 비교는 UTF-8 이진 인코딩을 사용하는 유니코드를 기준으로 합니다. 예를 들어 `a`는 `A`보다 크고 `a`는 `B`보다 큽니다.

  이진수 유형의 경우, DynamoDB가 이진수 값을 비교할 때 이진수 데이터의 각 바이트를 부호가 없는 것으로 처리합니다.
+  `ComparisonOperator` - 의 속성을 평가하는 비교기입니다.`AttributeValueList` 비교를 수행하면 DynamoDB가 강력한 일관된 읽기(Strongly Consistent Read)를 사용합니다.

  다음 비교 연산자를 사용할 수 있습니다.

   `EQ | NE | LE | LT | GE | GT | NOT_NULL | NULL | CONTAINS | NOT_CONTAINS | BEGINS_WITH | IN | BETWEEN` 

  다음은 각 비교 연산자에 대한 설명입니다.
  +  `EQ` : 같음. `EQ`는 모든 데이터 형식(목록 및 맵 포함)에 대해 지원됩니다.

     `AttributeValueList`에는 문자열, 숫자, 이진수, 문자열 집합, 숫자 집합 또는 이진수 집합 유형의 `AttributeValue` 요소 하나만 포함될 수 있습니다. 요청에서 제공된 형식과 다른 형식의 `AttributeValue` 요소가 항목에 포함되어 있으면 값이 일치하지 않습니다. 예를 들어 `{"S":"6"}`은 `{"N":"6"}`과 같지 않습니다. 또한 `{"N":"6"}`은 `{"NS":["6", "2", "1"]}`과 같지 않습니다.
  +  `NE` : 같지 않음. `NE`는 모든 데이터 형식(목록 및 맵 포함)에 대해 지원됩니다.

     `AttributeValueList`에는 문자열, 숫자, 이진수, 문자열 집합, 숫자 집합 또는 이진수 집합 유형의 `AttributeValue` 하나만 포함될 수 있습니다. 항목에 요청에서 제공한 형식과 다른 형식의 `AttributeValue`가 포함되어 있으면 값이 일치하지 않습니다. 예를 들어 `{"S":"6"}`은 `{"N":"6"}`과 같지 않습니다. 또한 `{"N":"6"}`은 `{"NS":["6", "2", "1"]}`과 같지 않습니다.
  +  `LE` : 작거나 같음.

     `AttributeValueList`에는 문자열, 숫자, 이진수 유형의 `AttributeValue` 요소 하나만 포함될 수 있습니다(집합 유형 제외). 요청에서 제공된 형식과 다른 형식의 `AttributeValue` 요소가 항목에 포함되어 있으면 값이 일치하지 않습니다. 예를 들어 `{"S":"6"}`은 `{"N":"6"}`과 같지 않습니다. 또한 `{"N":"6"}`은 `{"NS":["6", "2", "1"]}`과 비교할 수 없습니다.
  +  `LT` : 작음.

     `AttributeValueList`에는 문자열, 숫자, 이진수 유형의 `AttributeValue` 하나만 포함될 수 있습니다(집합 유형 제외). 요청에서 제공된 형식과 다른 형식의 `AttributeValue` 요소가 항목에 포함되어 있으면 값이 일치하지 않습니다. 예를 들어 `{"S":"6"}`은 `{"N":"6"}`과 같지 않습니다. 또한 `{"N":"6"}`은 `{"NS":["6", "2", "1"]}`과 비교할 수 없습니다.
  +  `GE` : 크거나 같음.

     `AttributeValueList`에는 문자열, 숫자, 이진수 유형의 `AttributeValue` 요소 하나만 포함될 수 있습니다(집합 유형 제외). 요청에서 제공된 형식과 다른 형식의 `AttributeValue` 요소가 항목에 포함되어 있으면 값이 일치하지 않습니다. 예를 들어 `{"S":"6"}`은 `{"N":"6"}`과 같지 않습니다. 또한 `{"N":"6"}`은 `{"NS":["6", "2", "1"]}`과 비교할 수 없습니다.
  +  `GT` : 큼.

     `AttributeValueList`에는 문자열, 숫자, 이진수 유형의 `AttributeValue` 요소 하나만 포함될 수 있습니다(집합 유형 제외). 요청에서 제공된 형식과 다른 형식의 `AttributeValue` 요소가 항목에 포함되어 있으면 값이 일치하지 않습니다. 예를 들어 `{"S":"6"}`은 `{"N":"6"}`과 같지 않습니다. 또한 `{"N":"6"}`은 `{"NS":["6", "2", "1"]}`과 비교할 수 없습니다.
  +  `NOT_NULL` : 속성 있음. `NOT_NULL`은 모든 데이터 형식(목록 및 맵 포함)에 대해 지원됩니다.
**참고**  
이 연산자는 속성의 데이터 형식이 아닌 존재 여부를 테스트합니다. 속성 "`a`"의 데이터 형식이 null이고 `NOT_NULL`을 사용하여 평가하는 경우, 결과가 부울 `true`가 됩니다. 속성 "`a`"가 존재하기 때문에 이러한 결과가 나오는 것이며, 데이터 형식은 `NOT_NULL` 비교 연산자와 관련 없습니다.
  +  `NULL` : 속성 없음. `NULL`은 모든 데이터 형식(목록 및 맵 포함)에 대해 지원됩니다.
**참고**  
이 연산자는 속성의 데이터 형식이 아닌 비존재 여부를 테스트합니다. 속성 "`a`"의 데이터 형식이 null이고 `NULL`을 사용하여 평가하는 경우, 결과가 부울 `false`가 됩니다. 속성 "`a`"가 존재하기 때문에 이러한 결과가 나오는 것이며, 데이터 형식은 `NULL` 비교 연산자와 관련 없습니다.
  +  `CONTAINS`: 세트의 하위 시퀀스 또는 값 확인.

     `AttributeValueList`에는 문자열, 숫자, 이진수 유형의 `AttributeValue` 요소 하나만 포함될 수 있습니다(집합 유형 제외). 비교 대상의 속성이 문자열 유형이라면 연산자가 하위 문자열이 일치하는지 확인합니다. 비교 대상의 속성이 이진수 유형이라면 연산자가 대상에서 입력 이진수와 일치하는 부분 수열을 찾습니다. 비교 대상의 속성이 집합("`SS`", "`NS`" 또는 "`BS`")이라면 집합을 구성하는 어떤 요소든지 정확히 일치하는 것을 찾아야만 연산자가 true로 평가됩니다.

    CONTAINS는 목록의 경우 지원됩니다. "`a CONTAINS b`"를 평가할 때, "`a`"는 목록이 될 수 있지만, "`b`"는 집합, 맵 또는 목록이 될 수 없습니다.
  +  `NOT_CONTAINS`: 세트의 하위 시퀀스 부재 또는 값의 부재 확인.

     `AttributeValueList`에는 문자열, 숫자, 이진수 유형의 `AttributeValue` 요소 하나만 포함될 수 있습니다(집합 유형 제외). 비교 대상의 속성이 문자열이라면 연산자가 하위 문자열이 일치하지 않는지 확인합니다. 비교 대상의 속성이 이진수라면 연산자가 대상에서 입력 이진수와 일치하는 부분 수열이 없는지 확인합니다. 비교 대상의 속성이 집합("`SS`", "`NS`" 또는 "`BS`")이라면 집합을 구성하는 어떤 요소든지 정확히 일치하는 것을 찾지 못해야만(`does not`) 연산자가 true로 평가됩니다.

    NOT\$1CONTAINS는 목록의 경우 지원됩니다. "`a NOT CONTAINS b`"를 평가할 때, "`a`"는 목록이 될 수 있지만, "`b`"는 집합, 맵 또는 목록이 될 수 없습니다.
  +  `BEGINS_WITH`: 접두사 여부 확인.

     `AttributeValueList`에는 문자열 또는 이진수 유형의 `AttributeValue` 하나만 포함될 수 있습니다(숫자 또는 집합 유형 제외). 비교 대상의 속성은 문자열 또는 이진수 유형이 되어야 합니다(숫자 또는 집합 유형 제외).
  +  `IN`: 두 집합 안의 일치하는 요소 확인.

     `AttributeValueList`에는 문자열, 숫자 또는 이진수 유형 중 하나 이상의 `AttributeValue` 요소가 포함될 수 있습니다(집합 유형 제외). 이 속성들은 기존 집합 유형 항목 속성과 비교됩니다. 입력된 집합 요소 중 하나라도 항목 속성에 있으면 표현식은 true로 평가됩니다.
  +  `BETWEEN`: 첫 번째 값보다 크거나 같음 및 두 번째 값보다 작거나 같음.

     `AttributeValueList`에는 문자열, 숫자 또는 이진수(집합 유형 제외) 중에서 동일한 형식으로 2개의 `AttributeValue` 요소가 들어 있어야 합니다. 대상 값이 첫 번째 요소보다 크거나 같을 때, 그리고 두 번째 요소보다 작거나 같을 때 대상 속성이 일치합니다. 요청에서 제공된 형식과 다른 형식의 `AttributeValue` 요소가 항목에 포함되어 있으면 값이 일치하지 않습니다. 예를 들어 `{"S":"6"}`은 `{"N":"6"}`과 비교할 수 없습니다. 또한 `{"N":"6"}`은 `{"NS":["6", "2", "1"]}`과 비교할 수 없습니다.

다음 파라미터는 `AttributeValueList` 및 `ComparisonOperator` 대신 사용할 수 있습니다.
+  `Value` - DynamoDB가 속성과 값을 비교할 값.
+  `Exists` - DynamoDB가 조건부 작업을 시도하기 전에 값을 평가하도록 할 부울 값:
  + `Exists`가 `true`이면, DynamoDB가 속성 값이 테이블에 이미 있는지를 확인합니다. 있으면, 조건이 true로 평가되고, 없으면 조건이 false로 평가됩니다.
  + `Exists`가 `false`이면, DynamoDB가 속성 값이 테이블에 없다고(`not`) 가정합니다. 값이 실제로 없으면, 가정이 유효하고 조건이 true로 평가됩니다. 값이 있으면, 값이 없다는 가정에도 불구하고 조건이 false로 평가됩니다.

  `Exists`의 기본값은 `true`입니다.

`Value` 및 `Exists` 파라미터는 `AttributeValueList` 및 `ComparisonOperator`와 호환되지 않습니다. 두 파라미터 집합을 한 번에 사용하면 DynamoDB에서 `ValidationException` 예외를 반환합니다.

**참고**  
이 파라미터는 목록 또는 맵 유형의 속성을 지원하지 않습니다.

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

특정 조건이 true인 경우에만 *Music* 테이블의 항목을 수정하길 원한다고 가정합니다. 다음 `UpdateItem` 예제에서와 같이 `Expected` 요청을 AWS CLI 파라미터와 함께 사용할 수 있습니다.

```
aws dynamodb update-item \
    --table-name Music \
    --key '{
        "Artist": {"S":"No One You Know"},
        "SongTitle": {"S":"Call Me Today"} 
    }' \
    --attribute-updates '{
        "Price": {
            "Action": "PUT", 
            "Value": {"N":"1.98"}
        }
    }' \
    --expected '{
        "Price": {
            "ComparisonOperator": "LE", 
            "AttributeValueList": [ {"N":"2.00"} ]
        }
    }'
```

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

```
aws dynamodb update-item \
    --table-name Music \
    --key '{
        "Artist": {"S":"No One You Know"},
        "SongTitle": {"S":"Call Me Today"} 
    }' \
    --update-expression 'SET Price = :p1' \
    --condition-expression 'Price <= :p2' \
    --expression-attribute-values '{
        ":p1": {"N":"1.98"},
        ":p2": {"N":"2.00"}
    }'
```

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

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

레거시 조건 파라미터 `KeyConditions`에는 `Query` 작업의 선택 기준이 포함됩니다. 테이블에 있는 쿼리의 경우, 테이블 기본 키 속성에 있는 조건만 가질 수 있습니다. `EQ` 조건으로 파티션 키 이름 및 값을 제공해야 합니다. 정렬 키의 두 번째 조건은 옵션으로 입력할 수 있습니다.

**참고**  
정렬 키 조건을 제공하지 않으면 파티션 키가 일치하는 모든 항목이 검색됩니다. `FilterExpression` 또는 `QueryFilter`가 있는 경우 항목이 검색된 후 적용됩니다.

인덱스에 있는 쿼리의 경우, 인덱스 키 속성에 있는 조건만 가질 수 있습니다. `EQ` 조건으로 인덱스 파티션 키 이름 및 값을 제공해야 합니다. 인덱스 정렬 키의 두 번째 조건은 옵션으로 입력할 수 있습니다.

각 `KeyConditions` 요소는 비교할 속성 이름 및 다음 파라미터로 구성됩니다.
+  `AttributeValueList` - 제공된 속성에 대해 평가되는 하나 이상의 값. 목록에 있는 값의 개수는 사용되는 `ComparisonOperator`에 따라 달라집니다.

  숫자 유형의 경우 값 비교가 숫자입니다.

  크다, 같다 또는 작다 등의 문자열 값 비교는 UTF-8 이진 인코딩을 사용하는 유니코드를 기준으로 합니다. 예를 들어 `a`는 `A`보다 크고 `a`는 `B`보다 큽니다.

  Binary의 경우, DynamoDB가 이진수 값을 비교할 때 이진수 데이터의 각 바이트를 부호가 없는 것으로 처리합니다.
+  `ComparisonOperator` - 속성을 평가하는 비교기. 예: 같다, 크다, 작다.

  `KeyConditions`의 경우 다음 비교 연산자만 지원됩니다.

   `EQ | LE | LT | GE | GT | BEGINS_WITH | BETWEEN` 

  다음은 이러한 비교 연산자에 대한 설명입니다.
  +  `EQ` : 같음.

     `AttributeValueList`에는 문자열, 숫자, 이진수 유형의 `AttributeValue` 하나만 포함될 수 있습니다(집합 유형 제외). 요청에서 지정한 형식과 다른 형식의 `AttributeValue` 요소가 항목에 포함되어 있으면 값이 일치하지 않습니다. 예를 들어 `{"S":"6"}`은 `{"N":"6"}`과 같지 않습니다. 또한 `{"N":"6"}`은 `{"NS":["6", "2", "1"]}`과 같지 않습니다.
  +  `LE` : 작거나 같음.

     `AttributeValueList`에는 문자열, 숫자, 이진수 유형의 `AttributeValue` 요소 하나만 포함될 수 있습니다(집합 유형 제외). 요청에서 제공된 형식과 다른 형식의 `AttributeValue` 요소가 항목에 포함되어 있으면 값이 일치하지 않습니다. 예를 들어 `{"S":"6"}`은 `{"N":"6"}`과 같지 않습니다. 또한 `{"N":"6"}`은 `{"NS":["6", "2", "1"]}`과 비교할 수 없습니다.
  +  `LT` : 작음.

     `AttributeValueList`에는 문자열, 숫자, 이진수 유형의 `AttributeValue` 하나만 포함될 수 있습니다(집합 유형 제외). 요청에서 제공된 형식과 다른 형식의 `AttributeValue` 요소가 항목에 포함되어 있으면 값이 일치하지 않습니다. 예를 들어 `{"S":"6"}`은 `{"N":"6"}`과 같지 않습니다. 또한 `{"N":"6"}`은 `{"NS":["6", "2", "1"]}`과 비교할 수 없습니다.
  +  `GE` : 크거나 같음.

     `AttributeValueList`에는 문자열, 숫자, 이진수 유형의 `AttributeValue` 요소 하나만 포함될 수 있습니다(집합 유형 제외). 요청에서 제공된 형식과 다른 형식의 `AttributeValue` 요소가 항목에 포함되어 있으면 값이 일치하지 않습니다. 예를 들어 `{"S":"6"}`은 `{"N":"6"}`과 같지 않습니다. 또한 `{"N":"6"}`은 `{"NS":["6", "2", "1"]}`과 비교할 수 없습니다.
  +  `GT` : 큼.

     `AttributeValueList`에는 문자열, 숫자, 이진수 유형의 `AttributeValue` 요소 하나만 포함될 수 있습니다(집합 유형 제외). 요청에서 제공된 형식과 다른 형식의 `AttributeValue` 요소가 항목에 포함되어 있으면 값이 일치하지 않습니다. 예를 들어 `{"S":"6"}`은 `{"N":"6"}`과 같지 않습니다. 또한 `{"N":"6"}`은 `{"NS":["6", "2", "1"]}`과 비교할 수 없습니다.
  +  `BEGINS_WITH`: 접두사 여부 확인.

     `AttributeValueList`에는 문자열 또는 이진수 유형의 `AttributeValue` 하나만 포함될 수 있습니다(숫자 또는 집합 유형 제외). 비교 대상의 속성은 문자열 또는 이진수 유형이 되어야 합니다(숫자 또는 집합 유형 제외).
  +  `BETWEEN`: 첫 번째 값보다 크거나 같음 및 두 번째 값보다 작거나 같음.

     `AttributeValueList`에는 문자열, 숫자 또는 이진수(집합 유형 제외) 중에서 동일한 형식으로 2개의 `AttributeValue` 요소가 들어 있어야 합니다. 대상 값이 첫 번째 요소보다 크거나 같을 때, 그리고 두 번째 요소보다 작거나 같을 때 대상 속성이 일치합니다. 요청에서 제공된 형식과 다른 형식의 `AttributeValue` 요소가 항목에 포함되어 있으면 값이 일치하지 않습니다. 예를 들어 `{"S":"6"}`은 `{"N":"6"}`과 비교할 수 없습니다. 또한 `{"N":"6"}`은 `{"NS":["6", "2", "1"]}`과 비교할 수 없습니다.

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

*Music* 테이블의 파티션 키와 동일한 파티션 키가 있는 여러 항목을 검색하길 원한다고 가정합니다. 다음 `Query` 예제에서와 같이 `KeyConditions` 요청을 AWS CLI 파라미터와 함께 사용할 수 있습니다.

```
aws dynamodb query \
    --table-name Music \
    --key-conditions '{
        "Artist":{
            "ComparisonOperator":"EQ",
            "AttributeValueList": [ {"S": "No One You Know"} ]
        },
        "SongTitle":{
            "ComparisonOperator":"BETWEEN",
            "AttributeValueList": [ {"S": "A"}, {"S": "M"} ]
        }
    }'
```

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

```
aws dynamodb query \
    --table-name Music \
    --key-condition-expression 'Artist = :a AND SongTitle BETWEEN :t1 AND :t2' \
    --expression-attribute-values '{
        ":a": {"S": "No One You Know"}, 
        ":t1": {"S": "A"}, 
        ":t2": {"S": "M"}
    }'
```

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

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

`Query` 작업에서 레거시 조건 파라미터 `QueryFilter`는 항목이 읽히고 원하는 값만 반환한 후 쿼리 결과를 평가하는 조건입니다.

이 파라미터는 목록 또는 맵 유형의 속성을 지원하지 않습니다.

**참고**  
`QueryFilter`는 항목이 이미 읽힌 후에 적용되므로 필터링 프로세스로 인해 읽기 용량 단위를 추가로 사용하지 않습니다.

`QueryFilter` 맵에 조건을 다수 제공하는 경우, 기본적으로 모든 조건이 true로 평가됩니다. 즉, 조건은 `AND` 연산자를 사용하여 결합됩니다. (대신 [ConditionalOperator(레거시)](LegacyConditionalParameters.ConditionalOperator.md) 파라미터를 사용하여 조건을 OR로 연결할 수 있습니다. 이렇게 하는 경우 모든 조건이 아니라 조건 중 하나 이상이 true로 평가되어야 합니다.)

`QueryFilter`에는 키 속성을 사용할 수 없습니다. 파티션 키 또는 정렬 키에는 필터 조건을 정의할 수 없습니다.

각 `QueryFilter` 요소는 비교할 속성 이름 및 다음 파라미터로 구성됩니다.
+  `AttributeValueList` - 제공된 속성에 대해 평가되는 하나 이상의 값. 목록에 있는 값의 개수는 `ComparisonOperator`에 지정된 연산자에 따라 달라집니다.

  숫자 유형의 경우 값 비교가 숫자입니다.

  크다, 같다 또는 작다 등의 문자열 값 비교는 UTF-8 이진 인코딩을 기준으로 합니다. 예를 들어 `a`는 `A`보다 크고 `a`는 `B`보다 큽니다.

  이진수 유형의 경우, DynamoDB가 이진수 값을 비교할 때 이진수 데이터의 각 바이트를 부호가 없는 것으로 처리합니다.

  JSON에 데이터 형식을 지정하는 방법에 대한 자세한 내용은 [DynamoDB 하위 수준 API](Programming.LowLevelAPI.md) 단원을 참조하십시오.
+  `ComparisonOperator` - 속성을 평가하는 비교기. 예: 같다, 크다, 작다.

  다음 비교 연산자를 사용할 수 있습니다.

   `EQ | NE | LE | LT | GE | GT | NOT_NULL | NULL | CONTAINS | NOT_CONTAINS | BEGINS_WITH | IN | BETWEEN` 

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

*Music* 테이블을 쿼리하는데 일치하는 항목에 조건을 적용하고 싶다고 가정합니다. 다음 `Query` 예제에서와 같이 `QueryFilter` 요청을 AWS CLI 파라미터와 함께 사용할 수 있습니다.

```
aws dynamodb query \
    --table-name Music \
    --key-conditions '{
        "Artist": {
            "ComparisonOperator": "EQ",
            "AttributeValueList": [ {"S": "No One You Know"} ]
        }   
    }' \
    --query-filter '{
        "Price": {
            "ComparisonOperator": "GT",
            "AttributeValueList": [ {"N": "1.00"} ]
        }   
    }'
```

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

```
aws dynamodb query \
    --table-name Music \
    --key-condition-expression 'Artist = :a' \
    --filter-expression 'Price > :p' \
    --expression-attribute-values '{
        ":p": {"N":"1.00"}, 
        ":a": {"S":"No One You Know"}
    }'
```

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

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

`Scan` 작업에서 레거시 조건 파라미터 `ScanFilter`는 원하는 값만 반환한 후 쿼리 결과를 평가하는 조건입니다.

**참고**  
이 파라미터는 목록 또는 맵 유형의 속성을 지원하지 않습니다.

`ScanFilter` 맵에 조건을 다수 지정하는 경우, 기본적으로 모든 조건이 true로 평가됩니다. 즉, 조건이 모두 AND로 연결됩니다. (대신 [ConditionalOperator(레거시)](LegacyConditionalParameters.ConditionalOperator.md) 파라미터를 사용하여 조건을 OR로 연결할 수 있습니다. 이렇게 하는 경우 모든 조건이 아니라 조건 중 하나 이상이 true로 평가되어야 합니다.)

각 `ScanFilter` 요소는 비교할 속성 이름 및 다음 파라미터로 구성됩니다.
+  `AttributeValueList` - 제공된 속성에 대해 평가되는 하나 이상의 값. 목록에 있는 값의 개수는 `ComparisonOperator`에 지정된 연산자에 따라 달라집니다.

  숫자 유형의 경우 값 비교가 숫자입니다.

  크다, 같다 또는 작다 등의 문자열 값 비교는 UTF-8 이진 인코딩을 기준으로 합니다. 예를 들어 `a`는 `A`보다 크고 `a`는 `B`보다 큽니다.

  Binary의 경우, DynamoDB가 이진수 값을 비교할 때 이진수 데이터의 각 바이트를 부호가 없는 것으로 처리합니다.

  JSON에 데이터 형식을 지정하는 방법에 대한 자세한 내용은 [DynamoDB 하위 수준 API](Programming.LowLevelAPI.md) 단원을 참조하십시오.
+  `ComparisonOperator` - 속성을 평가하는 비교기. 예: 같다, 크다, 작다.

  다음 비교 연산자를 사용할 수 있습니다.

   `EQ | NE | LE | LT | GE | GT | NOT_NULL | NULL | CONTAINS | NOT_CONTAINS | BEGINS_WITH | IN | BETWEEN` 

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

*Music* 테이블을 검색하는데 일치하는 항목에 조건을 적용하고 싶다고 가정합니다. 다음 `Scan` 예제에서와 같이 `ScanFilter` 요청을 AWS CLI 파라미터와 함께 사용할 수 있습니다.

```
aws dynamodb scan \
    --table-name Music \
    --scan-filter '{
        "Genre":{
            "AttributeValueList":[ {"S":"Rock"} ],
            "ComparisonOperator": "EQ"
        }
    }'
```

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

```
aws dynamodb scan \
    --table-name Music \
    --filter-expression 'Genre = :g' \
    --expression-attribute-values '{
        ":g": {"S":"Rock"} 
    }'
```

# 기존 파라미터를 이용한 조건 작성
<a name="LegacyConditionalParameters.Conditions"></a>

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

다음 단원에서는 `Expected`, `QueryFilter`, `ScanFilter` 등 기존 파라미터를 사용해 조건을 작성하는 방법에 대해서 살펴봅니다.

**참고**  
그 외에 새로운 애플리케이션은 표현식 파라미터를 사용해야 합니다. 자세한 내용은 [DynamoDB에서 표현식 사용](Expressions.md) 섹션을 참조하세요.

## 단순 조건
<a name="LegacyConditionalParameters.Simple"></a>

속성 값만 알고 있으면 직접 조건을 작성하여 테이블 속성과 비교할 수 있습니다. 조건의 평가 방법은 항상 true 또는 false이며, 다음과 같이 구성됩니다.
+ `ComparisonOperator` - 초과, 미만, 같음 등
+ `AttributeValueList`(선택 사항) - 비교할 속성 값. 사용하는 `ComparisonOperator`에 따라 `AttributeValueList`에는 값이 1개, 2개 또는 그 이상이 저장되거나, 하나도 저장되지 않을 수 있습니다.

다음 단원에서는 이러한 파라미터를 조건에 사용하는 몇 가지 예제와 함께 여러 비교 연산자에 대해서 설명합니다.

### 속성 값이 없는 비교 연산자
<a name="LegacyConditionalParameters.Conditions.Simple.NoAttributeValues"></a>
+ `NOT_NULL` - 속성이 존재하는 경우 true
+ `NULL` - 속성이 존재하지 않는 경우 true.

위 연산자는 속성의 존재 여부를 확인하는 데 사용됩니다. 비교할 값이 없기 때문에 `AttributeValueList`를 지정할 필요도 없습니다.

**예제**

다음은 *Dimensions* 속성이 존재하는 경우 true로 평가되는 표현식입니다.

```
...
    "Dimensions": {
         ComparisonOperator: "NOT_NULL"
    }
...
```

### 속성 값이 하나인 비교 연산자
<a name="LegacyConditionalParameters.Conditions.Simple.OneAttributeValue"></a>
+ `EQ` - 속성이 값과 같으면 true

  `AttributeValueList`에는 값이 하나만 저장되며, 이 값의 형식으로는 문자열, 숫자, 이진수, 문자열 집합, 숫자 집합 또는 이진수 집합이 될 수 있습니다. 요청에서 지정한 형식과 다른 형식의 값이 항목에 저장되면 값은 일치하지 않습니다. 예를 들어 문자열 `"3"`은 숫자 `3`과 다릅니다. 또한 숫자 `3`은 숫자 집합 `[3, 2, 1]`과 다릅니다.
+ `NE` - 속성이 값과 같지 않으면 true

  `AttributeValueList`에는 값이 하나만 저장되며, 이 값의 형식으로는 문자열, 숫자, 이진수, 문자열 집합, 숫자 집합 또는 이진수 집합이 될 수 있습니다. 요청에서 지정한 형식과 다른 형식의 값이 항목에 저장되면 값은 일치하지 않습니다.
+ `LE` - 속성이 값보다 작거나 같으면 true

  `AttributeValueList`에는 값이 하나만 저장되며, 이 값의 형식으로는 문자열, 숫자, 이진수가 될 수 있습니다(집합 제외). 요청에서 지정한 형식과 다른 형식의 `AttributeValue` 값이 항목에 저장되면 값은 일치하지 않습니다.
+ `LT` - 속성이 값보다 작으면 true

  `AttributeValueList`에는 값이 하나만 저장되며, 이 값의 형식으로는 문자열, 숫자, 이진수가 될 수 있습니다(집합 제외). 요청에서 지정한 형식과 다른 형식의 값이 항목에 저장되면 값은 일치하지 않습니다.
+ `GE` - 속성이 값보다 크거나 같으면 true

  `AttributeValueList`에는 값이 하나만 저장되며, 이 값의 형식으로는 문자열, 숫자, 이진수가 될 수 있습니다(집합 제외). 요청에서 지정한 형식과 다른 형식의 값이 항목에 저장되면 값은 일치하지 않습니다.
+ `GT` - 속성이 값보다 크면 true

  `AttributeValueList`에는 값이 하나만 저장되며, 이 값의 형식으로는 문자열, 숫자, 이진수가 될 수 있습니다(집합 제외). 요청에서 지정한 형식과 다른 형식의 값이 항목에 저장되면 값은 일치하지 않습니다.
+ `CONTAINS` - 값이 집합 내에 저장되거나, 하나의 값이 다른 값에 저장되는 경우 true

  `AttributeValueList`에는 값이 하나만 저장되며, 이 값의 형식으로는 문자열, 숫자, 이진수가 될 수 있습니다(집합 제외). 비교 대상의 속성이 문자열이라면 연산자가 하위 문자열이 일치하는지 확인합니다. 비교 대상의 속성이 이진수라면 연산자가 대상에서 입력 이진수와 일치하는 부분 수열을 찾습니다. 그리고, 비교 대상의 속성이 집합이라면 집합을 구성하는 어떤 요소든지 정확히 일치하는 것을 찾아야만 연산자가 true로 평가됩니다.
+ `NOT_CONTAINS` - 값이 집합 내에 저장되지 *않거나*, 혹은 하나의 값이 다른 값에 저장되지 않는 경우 true

  `AttributeValueList`에는 값이 하나만 저장되며, 이 값의 형식으로는 문자열, 숫자, 이진수가 될 수 있습니다(집합 제외). 비교 대상의 속성이 문자열이라면 연산자가 하위 문자열이 일치하지 않는지 확인합니다. 비교 대상의 속성이 이진수라면 연산자가 대상에서 입력 이진수와 일치하는 부분 수열이 없는지 확인합니다. 그리고, 비교 대상의 속성이 집합이라면 집합을 구성하는 어떤 항이든지 정확히 일치하는 것을 *찾지 못할 때* 연산자가 true로 평가됩니다.
+ `BEGINS_WITH` - 속성 중 첫 번째 일부 문자가 입력한 값과 일치하는 경우 true 숫자를 비교할 때는 이 연산자를 사용할 수 없습니다.

  `AttributeValueList`에 문자열 또는 이진수(숫자 또는 집합 제외) 중 한 가지 형식의 값만 저장됩니다. 비교 대상의 속성은 문자열 또는 이진수가 되어야 합니다(숫자 또는 집합 제외).

위의 연산자들은 모두 속성과 값을 비교하는 데 사용됩니다. `AttributeValueList`는 단일 값으로 구성하여 지정해야 합니다. 대부분 연산자에서 이 값은 스칼라가 되어야 하지만 `EQ`와 `NE` 연산자는 집합도 지원합니다.

**예제**

다음과 같은 경우에 한해 아래 표현식들은 true로 평가됩니다.
+ 제품 가격이 100보다 큰 경우

  ```
  ...
      "Price": {
          ComparisonOperator: "GT",
          AttributeValueList: [ {"N":"100"} ]
      }
  ...
  ```
+ 제품 카테고리가 "Bo"로 시작되는 경우

  ```
  ...
      "ProductCategory": {
          ComparisonOperator: "BEGINS_WITH",
          AttributeValueList: [ {"S":"Bo"} ]
      }
  ...
  ```
+ 제품이 빨간색, 녹색 또는 검은색으로 출시되는 경우

  ```
  ...
      "Color": {
          ComparisonOperator: "EQ",
          AttributeValueList: [
              [ {"S":"Black"}, {"S":"Red"}, {"S":"Green"} ]
          ]
      }
  ...
  ```
**참고**  
집합 데이터 형식을 비교할 때 요소의 순서는 중요하지 않습니다. DynamoDB는 요청에서 지정한 순서와 상관없이 동일한 값 집합이 포함된 항목만 반환합니다.

### 속성 값이 2개인 비교 연산자
<a name="LegacyConditionalParameters.Conditions.Simple.TwoAttributeValues"></a>
+ `BETWEEN` - 값이 엔드포인트를 포함해 하한선과 상한선 사이에 있는 경우 true.

  `AttributeValueList`에는 문자열, 숫자 또는 이진수(집합 제외) 중 동일한 형식의 요소 2개가 저장되어야 합니다. 대상 값이 첫 번째 요소보다 크거나 같을 때, 그리고 두 번째 요소보다 작거나 같을 때 대상 속성이 일치합니다. 요청에서 지정한 형식과 다른 형식의 값이 항목에 저장되면 값은 일치하지 않습니다.

위 연산자는 속성 값이 범위를 벗어나지 않았는지 확인할 때 사용됩니다. `AttributeValueList`에는 문자열, 숫자 또는 이진수 중 동일한 형식의 스칼라 요소 2개가 저장되어야 합니다.

 **예제**

다음은 제품 가격이 100에서 200 사이인 경우에 true로 평가되는 표현식입니다.

```
...
    "Price": {
        ComparisonOperator: "BETWEEN",
        AttributeValueList: [ {"N":"100"}, {"N":"200"} ]
    }
...
```

### 속성 값이 *n*개인 비교 연산자
<a name="LegacyConditionalParameters.Conditions.Simple.NAttributeValues"></a>
+ `IN` - 값이 열거 목록의 값 중 하나라도 같으면 true. 이 목록에서는 집합이 아닌 스칼라 값만 지원됩니다. 대상 속성이 일치하려면 형식이 동일하고 값도 정확해야 합니다.

  `AttributeValueList`에는 문자열, 숫자 또는 이진수(집합 제외) 중 한 가지 형식의 요소가 하나 이상 저장됩니다. 이 속성들은 집합을 제외한 형식의 기존 항목 속성과 비교됩니다. 입력된 집합 요소 중 *하나라도* 항목 속성에 있으면 표현식은 true로 평가됩니다.

  `AttributeValueList`에는 문자열, 숫자 또는 이진수(집합 제외) 중 한 가지 형식의 값이 하나 이상 저장됩니다. 비교 대상 속성이 일치하려면 형식이 동일하고 값도 정확해야 합니다. 문자열은 문자열 세트와 일치하지 않습니다.

위 연산자는 열거 목록 내 입력 값의 유무를 확인할 때 사용됩니다. `AttributeValueList`에서 스칼라 값은 얼마든지 지정할 수 있지만 모두 데이터 형식이 동일해야 합니다.

 **예제**

다음은 *Id* 값이 201, 203 또는 205인 경우 true로 평가되는 표현식입니다.

```
...
    "Id": {
        ComparisonOperator: "IN",
        AttributeValueList: [ {"N":"201"}, {"N":"203"}, {"N":"205"} ]
    }
...
```

## 다수의 조건 사용
<a name="LegacyConditionalParameters.Conditions.Multiple"></a>

DynamoDB에서는 다수의 조건을 결합하여 복잡한 표현식을 작성할 수 있습니다. [ConditionalOperator(레거시)](LegacyConditionalParameters.ConditionalOperator.md)를 옵션으로 최소 2개 이상의 표현식을 입력하면 가능합니다.

기본적으로 조건을 다수 지정할 때 전체 표현식이 true로 평가되려면 *모든* 조건이 true로 평가되어야 합니다. 다시 말해서 묵시적으로 *AND* 연산이 발생합니다.

 **예제**

다음은 제품이 최소 600페이지가 넘는 서적인 경우에 true로 평가되는 표현식입니다. 두 조건 모두 묵시적으로 *AND*가 사용되기 때문에 true로 평가되어야 합니다.

```
... 
    "ProductCategory": { 
        ComparisonOperator: "EQ",
        AttributeValueList: [ {"S":"Book"} ]
    },
    "PageCount": { 
        ComparisonOperator: "GE",
        AttributeValueList: [ {"N":600"} ]
    }
...
```

[ConditionalOperator(레거시)](LegacyConditionalParameters.ConditionalOperator.md)는 *AND* 연산의 발생 여부를 명확히 할 때 사용됩니다. 다음 예제는 위 예제와 똑같이 동작합니다.

```
...   
    "ConditionalOperator" : "AND",
    "ProductCategory": { 
        "ComparisonOperator": "EQ",
        "AttributeValueList": [ {"N":"Book"} ]
    },
    "PageCount": { 
        "ComparisonOperator": "GE",
        "AttributeValueList": [ {"N":600"} ]
    }
...
```

그 밖에도 `ConditionalOperator`를 *OR*로 설정할 수 있습니다. 이 말은 조건 중 *적어도 하나*는 true로 평가되어야 한다는 의미입니다.

 **예제**

 다음은 제품이 산악 자전거인 경우, 특정 브랜드 이름인 경우, 혹은 가격이 100보다 큰 경우에 true로 평가되는 표현식입니다.

```
... 
    ConditionalOperator : "OR",
    "BicycleType": { 
        "ComparisonOperator": "EQ",
        "AttributeValueList": [ {"S":"Mountain" ]
    },
    "Brand": { 
        "ComparisonOperator": "EQ",
        "AttributeValueList": [ {"S":"Brand-Company A" ]
    },
    "Price": { 
        "ComparisonOperator": "GT",
        "AttributeValueList": [ {"N":"100"} ]
    }
...
```

**참고**  
복잡한 표현식에서는 첫 번째 조건부터 마지막 조건까지 차례대로 처리됩니다.  
단일 표현식에서는 AND와 OR를 함께 사용할 수 없습니다.

## 기타 조건부 연산자
<a name="LegacyConditionalParameters.Conditions.Other"></a>

이전 DynamoDB 버전에서는 `Expected` 파라미터의 조건부 쓰기 동작이 달랐습니다. `Expected` 맵의 각 항목은 다음 파라미터와 함께 DynamoDB가 확인하는 속성 이름을 나타냈습니다.
+ `Value` - 속성과 비교할 값
+ `Exists` - 작업에 앞서 값의 존재 여부를 확인

`Value` 및 `Exists` 옵션은 앞으로도 DynamoDB에서 지원되지만 등식 조건이나 속성의 존재 여부를 테스트하는 용도로만 사용할 수 있습니다. 따라서 대신에 `ComparisonOperator`와 `AttributeValueList` 사용을 권장합니다. 이 두 가지 옵션은 훨씬 광범위한 조건을 작성할 수 있기 때문입니다.

**Example**  
`DeleteItem`은 서적의 출판 중단 여부를 확인하며, 이 조건이 true인 경우에 한해 해당 항목을 삭제할 수 있습니다. 다음은 기존 조건을 사용하는 AWS CLI 예입니다.  

```
aws dynamodb delete-item \
    --table-name ProductCatalog \
    --key '{
        "Id": {"N":"600"}
    }' \
    --expected '{
        "InPublication": { 
            "Exists": true, 
            "Value": {"BOOL":false} 
        } 
    }'
```
다음은 위 예제와 동일하지만 기존 조건을 사용하지 않는 예제입니다.  

```
aws dynamodb delete-item \
    --table-name ProductCatalog \
    --key '{
        "Id": {"N":"600"}
    }' \
    --expected '{
        "InPublication": { 
            "ComparisonOperator": "EQ", 
            "AttributeValueList": [ {"BOOL":false} ]
        } 
    }'
```

**Example**  
`PutItem` 작업은 동일한 기본 키 속성으로 기존 항목을 덮어쓰지 못하도록 보호합니다. 아래 예제에서는 기존 조건을 사용하고 있습니다.  

```
aws dynamodb put-item \
    --table-name ProductCatalog \
    --item '{
      "Id": {"N":"500"},
        "Title": {"S":"Book 500 Title"}
    }' \
    --expected '{
        "Id": { "Exists": false } 
    }'
```
다음은 위 예제와 동일하지만 기존 조건을 사용하지 않는 예제입니다.  

```
aws dynamodb put-item \
    --table-name ProductCatalog \
    --item '{
      "Id": {"N":"500"},
        "Title": {"S":"Book 500 Title"}
    }' \
    --expected '{
        "Id": { "ComparisonOperator": "NULL" } 
    }'
```

**참고**  
`Expected` 맵의 조건일 때는 기존 `Value` 및 `Exists` 옵션을 `ComparisonOperator` 및 `AttributeValueList`와 함께 사용할 수 없습니다. 함께 사용하면 조건부 쓰기가 오류를 일으킵니다.