

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