

# AWS CLI를 사용하여 DynamoDB에서 글로벌 보조 인덱스 작업
<a name="GCICli"></a>

AWS CLI를 사용하여 하나 이상의 글로벌 보조 인덱스가 포함된 Amazon DynamoDB 테이블을 만들고, 테이블의 인덱스를 설명하고, 인덱스를 사용하여 쿼리를 수행할 수 있습니다.

**Topics**
+ [글로벌 보조 인덱스가 있는 테이블 생성](#GCICli.CreateTableWithIndex)
+ [기존 테이블에 글로벌 보조 인덱스 추가](#GCICli.CreateIndexAfterTable)
+ [글로벌 보조 인덱스가 있는 테이블 설명](#GCICli.DescribeTableWithIndex)
+ [글로벌 보조 인덱스 쿼리](#GCICli.QueryAnIndex)

## 글로벌 보조 인덱스가 있는 테이블 생성
<a name="GCICli.CreateTableWithIndex"></a>

글로벌 보조 인덱스는 테이블을 생성할 때 동시에 생성할 수 있습니다. 이렇게 하려면 `create-table` 파라미터를 사용하여 하나 이상의 글로벌 보조 인덱스 사양을 입력합니다. 다음 예제에서는 `GameTitleIndex`라는 글로벌 보조 인덱스가 있는 `GameScores`라는 테이블을 생성합니다. 기본 테이블은 파티션 키가 `UserId`이고 정렬 키가 `GameTitle`이므로 특정 게임의 개별 사용자 최고 점수를 효율적으로 찾을 수 있는 반면 GSI는 파티션 키가 `GameTitle`이고 정렬 키가 `TopScore`이므로 특정 게임의 전체 최고 점수를 빠르게 찾을 수 있습니다.

```
aws dynamodb create-table \
    --table-name GameScores \
    --attribute-definitions AttributeName=UserId,AttributeType=S \
                            AttributeName=GameTitle,AttributeType=S \
                            AttributeName=TopScore,AttributeType=N  \
    --key-schema AttributeName=UserId,KeyType=HASH \
                 AttributeName=GameTitle,KeyType=RANGE \
    --provisioned-throughput ReadCapacityUnits=10,WriteCapacityUnits=5 \
    --global-secondary-indexes \
        "[
            {
                \"IndexName\": \"GameTitleIndex\",
                \"KeySchema\": [{\"AttributeName\":\"GameTitle\",\"KeyType\":\"HASH\"},
                                {\"AttributeName\":\"TopScore\",\"KeyType\":\"RANGE\"}],
                \"Projection\":{
                    \"ProjectionType\":\"INCLUDE\",
                    \"NonKeyAttributes\":[\"UserId\"]
                },
                \"ProvisionedThroughput\": {
                    \"ReadCapacityUnits\": 10,
                    \"WriteCapacityUnits\": 5
                }
            }
        ]"
```

DynamoDB에서 테이블을 만들고 테이블 상태가 `ACTIVE`로 설정될 때까지 기다려야 합니다. 그런 다음 테이블에 데이터 항목을 입력할 수 있습니다. [describe table](https://docs.aws.amazon.com/cli/latest/reference/dynamodb/describe-table.html)을 사용하여 테이블 생성 상태를 결정할 수 있습니다.

## 기존 테이블에 글로벌 보조 인덱스 추가
<a name="GCICli.CreateIndexAfterTable"></a>

또한 글로벌 보조 인덱스를 테이블 생성 후 추가하거나 수정할 수도 있습니다. 이렇게 하려면 `update-table` 파라미터를 사용하여 하나 이상의 글로벌 보조 인덱스 사양을 입력합니다. 다음 예제에서는 앞의 예제와 같은 스키마를 사용하지만 테이블이 이미 생성되었고 나중에 GSI를 추가한다고 가정합니다.

```
aws dynamodb update-table \
    --table-name GameScores \
    --attribute-definitions AttributeName=TopScore,AttributeType=N  \
    --global-secondary-index-updates \
        "[
            {
                \"Create\": {
                    \"IndexName\": \"GameTitleIndex\",
                    \"KeySchema\": [{\"AttributeName\":\"GameTitle\",\"KeyType\":\"HASH\"},
                                    {\"AttributeName\":\"TopScore\",\"KeyType\":\"RANGE\"}],
                    \"Projection\":{
                        \"ProjectionType\":\"INCLUDE\",
                        \"NonKeyAttributes\":[\"UserId\"]
                    }
                }
            }
        ]"
```

## 글로벌 보조 인덱스가 있는 테이블 설명
<a name="GCICli.DescribeTableWithIndex"></a>

테이블의 글로벌 보조 인덱스에 관한 자세한 내용은 `describe-table` 파라미터를 참조하세요. 각 인덱스에 대해 인덱스의 이름, 키 스키마 및 프로젝션된 속성에 액세스할 수 있습니다.

```
aws dynamodb describe-table --table-name GameScores
```

## 글로벌 보조 인덱스 쿼리
<a name="GCICli.QueryAnIndex"></a>

테이블을 `query`할 때와 거의 동일한 방식으로 글로벌 보조 인덱스에서 `query` 작업을 사용할 수 있습니다. 인덱스 이름, 인덱스 정렬 키의 쿼리 기준, 반환하려는 속성을 지정해야 합니다. 이 예제에서 인덱스는 `GameTitleIndex`이고 인덱스 정렬 키는 `GameTitle`입니다.

인덱스로 프로젝션된 속성만 반환됩니다. 키가 아닌 속성을 선택하도록 이 쿼리를 수정할 수도 있지만, 그렇게 하려면 비교적 많은 비용이 드는 테이블 가져오기 작업이 필요합니다. 테이블 가져오기에 대한 자세한 내용은 [속성 프로젝션](GSI.md#GSI.Projections) 단원을 참조하세요.

```
aws dynamodb query --table-name GameScores\
    --index-name GameTitleIndex \
    --key-condition-expression "GameTitle = :v_game" \
    --expression-attribute-values '{":v_game":{"S":"Alien Adventure"} }'
```