

# DynamoDB에서 표현식 사용 시 항목 속성 참조
<a name="Expressions.Attributes"></a>

이 섹션에서는 Amazon DynamoDB의 표현식에서 항목 속성을 참조하는 방법을 설명합니다. 여러 목록과 맵 내부에 깊이 중첩된 경우에도 속성에 대한 작업을 수행할 수 있습니다.

**Topics**
+ [최상위 속성](#Expressions.Attributes.TopLevelAttributes)
+ [중첩 속성](#Expressions.Attributes.NestedAttributes)
+ [문서 경로](#Expressions.Attributes.NestedElements.DocumentPathExamples)

**샘플 항목: ProductCatalog**  
이 페이지의 예에서는 `ProductCatalog` 테이블의 다음 샘플 항목을 사용합니다. 이 테이블에 대해서는 [DynamoDB에서 사용할 테이블 및 데이터 예제](AppendixSampleTables.md)에서 설명합니다.

```
{
    "Id": 123,
    "Title": "Bicycle 123",
    "Description": "123 description",
    "BicycleType": "Hybrid",
    "Brand": "Brand-Company C",
    "Price": 500,
    "Color": ["Red", "Black"],
    "ProductCategory": "Bicycle",
    "InStock": true,
    "QuantityOnHand": null,
    "RelatedItems": [
        341,
        472,
        649
    ],
    "Pictures": {
        "FrontView": "http://example.com/products/123_front.jpg",
        "RearView": "http://example.com/products/123_rear.jpg",
        "SideView": "http://example.com/products/123_left_side.jpg"
    },
    "ProductReviews": {
	    "FiveStar": [
	    		"Excellent! Can't recommend it highly enough! Buy it!",
	    		"Do yourself a favor and buy this."
	    ],
	    "OneStar": [
	    		"Terrible product! Do not buy this."
	    ]
    },
    "Comment": "This product sells out quickly during the summer",
    "Safety.Warning": "Always wear a helmet"
 }
```

다음 사항에 유의하세요.
+ 파티션 키 값(`Id`)은 `123`입니다. 정렬 키는 없습니다.
+ 대부분의 속성에는 `String`, `Number`, `Boolean` 및 `Null` 같은 스칼라 데이터 형식이 있습니다.
+ 속성 하나(`Color`)는`String Set`입니다.
+ 다음 속성은 문서 데이터 형식입니다.
  + `RelatedItems` 목록. 각 요소가 관련 제품의 `Id`입니다.
  + `Pictures` 맵. 각 요소가 이미지에 대한 간단한 설명이며, 해당 이미지 파일의 URL이 함께 제공됩니다.
  + `ProductReviews` 맵. 각 요소가 평점과 해당 평점에 상응하는 리뷰 목록을 나타냅니다. 처음에 이 맵은 별 5개 및 1개 리뷰로 채워집니다.

## 최상위 속성
<a name="Expressions.Attributes.TopLevelAttributes"></a>

속성이 다른 속성 내부에 포함되어 있지 않은 경우 이러한 속성을 *최상위*라고 합니다. `ProductCatalog` 항목의 경우 최상위 속성은 다음과 같습니다.
+ `Id`
+ `Title`
+ `Description`
+ `BicycleType`
+ `Brand`
+ `Price`
+ `Color`
+ `ProductCategory`
+ `InStock`
+ `QuantityOnHand`
+ `RelatedItems`
+ `Pictures`
+ `ProductReviews`
+ `Comment`
+ `Safety.Warning`

이러한 최상위 속성은 `Color`(목록), `RelatedItems`(목록), `Pictures`(맵) 및 `ProductReviews`(맵)를 제외하고 모두 스칼라입니다.

## 중첩 속성
<a name="Expressions.Attributes.NestedAttributes"></a>

속성이 다른 속성 내부에 포함되어 있는 경우 이러한 속성을 *중첩*이라고 합니다. 중첩 속성에 액세스하려면 *역참조 연산자*를 사용합니다.
+ `[n]` - 목록 요소의 경우
+ `.`(점) - 맵 요소의 경우

### 목록 요소에 액세스
<a name="Expressions.Attributes.NestedElements.AccessingListElements"></a>

목록 요소의 역참조 연산자는 **[*N*]**이며, 여기에서 *n*은 요소 번호입니다. 목록 요소는 0부터 시작되므로 [0]은 목록의 첫 번째 요소, [1]은 두 번째 요소를 나타냅니다. 여기 몇 가지 예가 있습니다:
+ `MyList[0]`
+ `AnotherList[12]`
+ `ThisList[5][11]`

`ThisList[5]` 요소 자체는 하나의 중첩된 목록입니다. 그러므로 `ThisList[5][11]`은 해당 목록의 열두 번째 요소를 나타냅니다.

대괄호 내부의 숫자는 음수가 아닌 정수여야 합니다. 그러므로 다음 표현식은 유효하지 않습니다.
+ `MyList[-1]`
+ `MyList[0.4]`

### 맵 요소에 액세스
<a name="Expressions.Attributes.NestedElements.AccessingMapElements"></a>

맵 요소의 역참조 연산자는 **.**(점)입니다. 점을 맵 내에서 요소 간 구분 기호로 사용합니다.
+ `MyMap.nestedField`
+ `MyMap.nestedField.deeplyNestedField`

## 문서 경로
<a name="Expressions.Attributes.NestedElements.DocumentPathExamples"></a>

표현식에서 *문서 경로*를 사용하여 DynamoDB에 속성을 찾을 위치를 알려 줍니다. 최상의 속성의 경우, 문서 경로는 단순히 속성 이름입니다. 중첩된 속성의 경우 역참조 연산자를 사용하여 문서 경로를 생성합니다.

문서 경로의 몇 가지 예는 다음과 같습니다. [DynamoDB에서 표현식 사용 시 항목 속성 참조](#Expressions.Attributes)에 표시된 항목을 참조하세요.
+ 최상위 스칼라 속성.

   `Description`
+ 최상위 목록 속성. (이 속성은 일부 요소만이 아닌 전체 목록을 반환합니다.)

  `RelatedItems`
+ `RelatedItems` 목록의 세 번째 요소입니다. 목록 요소는 0부터 시작합니다.

  `RelatedItems[2]`
+ 제품의 전면도 그림입니다.

  `Pictures.FrontView`
+ 모든 별 5개 리뷰입니다.

  `ProductReviews.FiveStar`
+ 별 5개 리뷰 중 첫 번째 리뷰입니다.

  `ProductReviews.FiveStar[0]`

**참고**  
문서 경로의 최대 깊이는 32입니다. 따라서 경로의 역참조 연산자 수는 이 제한을 초과할 수 없습니다.

다음 요구 사항을 충족하는 한 문서 경로에 모든 속성 이름을 사용할 수 있습니다.
+ 첫 번째 문자는 `a-z`, `A-Z` 또는 `0-9`여야 합니다.
+ 두 번째 문자(있는 경우)는 `a-z` 또는 `A-Z`여야 합니다.

**참고**  
속성 이름이 이 요구 사항을 충족하지 않으면 표현식 속성 이름을 자리 표시자로 정의해야 합니다.

자세한 내용은 [DynamoDB의 표현식 속성 이름(별칭)](Expressions.ExpressionAttributeNames.md) 섹션을 참조하세요.