

# DynamoDB의 테이블 및 데이터 작업
<a name="WorkingWithTables"></a>

이 단원에서는 AWS Command Line Interface(AWS CLI) 및 AWS SDK를 사용하여 Amazon DynamoDB에서 테이블을 생성하고, 업데이트하고, 삭제하는 방법에 대해 설명합니다.

**참고**  
AWS Management Console을 사용하여 이와 동일한 작업을 수행할 수도 있습니다. 자세한 내용은 [콘솔 사용](AccessingDynamoDB.md#ConsoleDynamoDB) 섹션을 참조하세요.

또한 이 단원에서는 DynamoDB Auto Scaling을 사용하거나 프로비저닝된 처리량을 수동으로 설정하여 처리 용량에 대한 추가 정보도 제공합니다.

**Topics**
+ [DynamoDB 테이블에 대한 기본 작업](WorkingWithTables.Basics.md)
+ [DynamoDB에서 테이블 클래스 선택 시 고려 사항](WorkingWithTables.tableclasses.md)
+ [DynamoDB의 리소스에 태그 및 레이블 추가](Tagging.md)

# DynamoDB 테이블에 대한 기본 작업
<a name="WorkingWithTables.Basics"></a>

다른 데이터베이스 시스템과 마찬가지로 Amazon DynamoDB는 데이터를 테이블에 저장합니다. 몇 가지 기본 작업을 사용하여 테이블을 관리할 수 있습니다.

**Topics**
+ [테이블 생성](#WorkingWithTables.Basics.CreateTable)
+ [테이블 설명](#WorkingWithTables.Basics.DescribeTable)
+ [테이블 업데이트](#WorkingWithTables.Basics.UpdateTable)
+ [테이블 삭제](#WorkingWithTables.Basics.DeleteTable)
+ [삭제 보호 기능 사용](#WorkingWithTables.Basics.DeletionProtection)
+ [테이블 이름 나열](#WorkingWithTables.Basics.ListTables)
+ [프로비저닝된 처리량 할당량 설명](#WorkingWithTables.Basics.DescribeLimits)

## 테이블 생성
<a name="WorkingWithTables.Basics.CreateTable"></a>

`CreateTable` 작업을 사용하여 Amazon DynamoDB에서 테이블을 생성합니다. 테이블을 생성하려면 다음 정보를 제공해야 합니다.
+ **테이블 이름 **– . 이름은 DynamoDB 이름 지정 규칙에 맞아야 하고, 현재의 AWS 계정과 리전에서 고유해야 합니다. 예를 들어 미국 동부(버지니아 북부)에서 `People` 테이블을 생성하고 유럽(아일랜드)에서 또 하나의 `People` 테이블을 생성할 수 있습니다. 하지만 이 두 테이블은 서로 완전히 다릅니다. 자세한 내용은 [Amazon DynamoDB에서 지원되는 데이터 형식 및 이름 지정 규칙](HowItWorks.NamingRulesDataTypes.md) 섹션을 참조하세요.
+ **기본 키 **– 속성 한 개(파티션 키) 또는 두 개(파티션 키와 정렬 키)로 기본 키를 구성할 수 있습니다. `HASH`(파티션 키) 및 `RANGE`(정렬 키)에 대해 속성 이름과 데이터 유형, 그리고 각 속성의 역할을 입력해야 합니다. 자세한 내용은 [프라이머리 키](HowItWorks.CoreComponents.md#HowItWorks.CoreComponents.PrimaryKey) 섹션을 참조하세요.
+ **처리량 설정(프로비저닝된 테이블의 경우)** 프로비저닝된 모드를 사용 중인 경우 테이블의 초기 읽기 및 쓰기 처리량 설정을 지정해야 합니다. 나중에 이러한 설정을 수정하거나 DynamoDB Auto Scaling을 활성화하여 설정을 자동으로 관리할 수 있습니다. 자세한 내용은 [DynamoDB 프로비저닝된 용량 모드](provisioned-capacity-mode.md) 및 [DynamoDB Auto Scaling을 사용하여 자동으로 처리량 용량 관리](AutoScaling.md)(을)를 참조하세요.

### 예 1: 온디맨드 테이블 생성
<a name="create-payperrequest-example"></a>

온디맨드 모드를 사용하여 동일한 `Music` 테이블을 생성하려면

```
aws dynamodb create-table \
    --table-name Music \
    --attribute-definitions \
        AttributeName=Artist,AttributeType=S \
        AttributeName=SongTitle,AttributeType=S \
    --key-schema \
        AttributeName=Artist,KeyType=HASH \
        AttributeName=SongTitle,KeyType=RANGE \
    --billing-mode=PAY_PER_REQUEST
```

다음과 같이 `CreateTable` 작업은 이 테이블의 메타데이터를 반환합니다.

```
{
    "TableDescription": {
        "TableArn": "arn:aws:dynamodb:us-east-1:123456789012:table/Music",
        "AttributeDefinitions": [
            {
                "AttributeName": "Artist",
                "AttributeType": "S"
            },
            {
                "AttributeName": "SongTitle",
                "AttributeType": "S"
            }
        ],
        "ProvisionedThroughput": {
            "NumberOfDecreasesToday": 0,
            "WriteCapacityUnits": 0,
            "ReadCapacityUnits": 0
        },
        "TableSizeBytes": 0,
        "TableName": "Music",
        "BillingModeSummary": {
            "BillingMode": "PAY_PER_REQUEST"
        },
        "TableStatus": "CREATING",
        "TableId": "12345678-0123-4567-a123-abcdefghijkl",
        "KeySchema": [
            {
                "KeyType": "HASH",
                "AttributeName": "Artist"
            },
            {
                "KeyType": "RANGE",
                "AttributeName": "SongTitle"
            }
        ],
        "ItemCount": 0,
        "CreationDateTime": 1542397468.348
    }
}
```

**중요**  
 온디맨드 테이블에서 `DescribeTable`을 호출할 경우 읽기 용량 단위와 쓰기 용량 단위는 0으로 설정됩니다.

### 예 2: 프로비저닝된 테이블 생성
<a name="create-provisioned-example"></a>

다음 AWS CLI 예제에서는 테이블(`Music`)을 생성하는 방법을 보여 줍니다. 기본 키는 `Artist`(파티션 키)와 `SongTitle`(정렬 키)로 구성되며, 각각의 데이터 형식은 `String`입니다. 이 테이블의 최대 처리량은 읽기 용량 단위 10개, 쓰기 용량 단위 5개입니다.

```
aws dynamodb create-table \
    --table-name Music \
    --attribute-definitions \
        AttributeName=Artist,AttributeType=S \
        AttributeName=SongTitle,AttributeType=S \
    --key-schema \
        AttributeName=Artist,KeyType=HASH \
        AttributeName=SongTitle,KeyType=RANGE \
    --provisioned-throughput \
        ReadCapacityUnits=10,WriteCapacityUnits=5
```

다음과 같이 `CreateTable` 작업은 이 테이블의 메타데이터를 반환합니다.

```
{
    "TableDescription": {
        "TableArn": "arn:aws:dynamodb:us-east-1:123456789012:table/Music",
        "AttributeDefinitions": [
            {
                "AttributeName": "Artist",
                "AttributeType": "S"
            },
            {
                "AttributeName": "SongTitle",
                "AttributeType": "S"
            }
        ],
        "ProvisionedThroughput": {
            "NumberOfDecreasesToday": 0,
            "WriteCapacityUnits": 5,
            "ReadCapacityUnits": 10
        },
        "TableSizeBytes": 0,
        "TableName": "Music",
        "TableStatus": "CREATING",
        "TableId": "12345678-0123-4567-a123-abcdefghijkl",
        "KeySchema": [
            {
                "KeyType": "HASH",
                "AttributeName": "Artist"
            },
            {
                "KeyType": "RANGE",
                "AttributeName": "SongTitle"
            }
        ],
        "ItemCount": 0,
        "CreationDateTime": 1542397215.37
    }
}
```

`TableStatus` 요소는 테이블의 현재 상태(`CREATING`)를 나타냅니다. `ReadCapacityUnits` 및 `WriteCapacityUnits`에 지정한 값에 따라 테이블을 생성하는 데 시간이 걸릴 수 있습니다. 이 값이 크면 DynamoDB에서 테이블에 더 많은 리소스를 할당해야 합니다.

### 예 3: DynamoDB Standard-Infrequent Access 테이블 클래스를 사용하여 테이블 생성
<a name="create-infrequent-access-example"></a>

DynamoDB Standard-Infrequent Access 테이블 클래스를 사용하여 동일한 `Music` 테이블을 생성하려면

```
aws dynamodb create-table \
    --table-name Music \
    --attribute-definitions \
        AttributeName=Artist,AttributeType=S \
        AttributeName=SongTitle,AttributeType=S \
    --key-schema \
        AttributeName=Artist,KeyType=HASH \
        AttributeName=SongTitle,KeyType=RANGE \
    --provisioned-throughput \
        ReadCapacityUnits=10,WriteCapacityUnits=5 \
    --table-class STANDARD_INFREQUENT_ACCESS
```

다음과 같이 `CreateTable` 작업은 이 테이블의 메타데이터를 반환합니다.

```
{
    "TableDescription": {
        "TableArn": "arn:aws:dynamodb:us-east-1:123456789012:table/Music",
        "AttributeDefinitions": [
            {
                "AttributeName": "Artist",
                "AttributeType": "S"
            },
            {
                "AttributeName": "SongTitle",
                "AttributeType": "S"
            }
        ],
        "ProvisionedThroughput": {
            "NumberOfDecreasesToday": 0,
            "WriteCapacityUnits": 5,
            "ReadCapacityUnits": 10
        },
        "TableClassSummary": {
            "LastUpdateDateTime": 1542397215.37,
            "TableClass": "STANDARD_INFREQUENT_ACCESS"
        },
        "TableSizeBytes": 0,
        "TableName": "Music",
        "TableStatus": "CREATING",
        "TableId": "12345678-0123-4567-a123-abcdefghijkl",
        "KeySchema": [
            {
                "KeyType": "HASH",
                "AttributeName": "Artist"
            },
            {
                "KeyType": "RANGE",
                "AttributeName": "SongTitle"
            }
        ],
        "ItemCount": 0,
        "CreationDateTime": 1542397215.37
    }
}
```

## 테이블 설명
<a name="WorkingWithTables.Basics.DescribeTable"></a>

테이블에 대한 세부 정보를 보려면 `DescribeTable` 작업을 사용합니다. 테이블 이름을 입력해야 합니다. `DescribeTable` 출력은 `CreateTable` 출력의 형식과 동일합니다. 여기에는 테이블이 생성된 타임스탬프, 해당 키 스키마, 해당 프로비저닝된 처리량 설정, 해당 예상 크기 및 보조 인덱스(있는 경우)가 포함됩니다.

**중요**  
 온디맨드 테이블에서 `DescribeTable`을 호출할 경우 읽기 용량 단위와 쓰기 용량 단위는 0으로 설정됩니다.

**Example**  

```
aws dynamodb describe-table --table-name Music
```

`TableStatus`가 `CREATING`에서 `ACTIVE`로 변경되면 테이블을 사용할 준비가 된 것입니다.

**참고**  
`CreateTable` 요청 직후에 `DescribeTable` 요청을 실행하면 DynamoDB는 오류(`ResourceNotFoundException`)를 반환할 수 있습니다. 이는 `DescribeTable`이 eventually consistent query를 사용하여 당장은 테이블 메타데이터를 이용할 수 없기 때문입니다. 이때는 몇 초 기다린 후 `DescribeTable` 요청을 다시 실행하십시오.  
요금을 청구하기 위해 DynamoDB 스토리지 비용에는 100바이트의 항목별 오버헤드가 포함됩니다. (자세한 내용은 [DynamoDB 요금](https://aws.amazon.com/dynamodb/pricing/)을 참조하세요.) 이렇게 항목별로 추가된 100바이트는 용량 단위 계산이나 `DescribeTable` 작업에 사용되지 않습니다.

## 테이블 업데이트
<a name="WorkingWithTables.Basics.UpdateTable"></a>

`UpdateTable` 작업을 통해 다음 중 하나를 수행할 수 있습니다.
+ 테이블의 프로비저닝된 처리량 설정을 수정합니다(프로비저닝된 모드 테이블의 경우).
+ 테이블의 읽기/쓰기 용량 모드를 변경합니다.
+ 테이블에서 전역 보조 인덱스를 조작합니다([DynamoDB에서 글로벌 보조 인덱스 사용](GSI.md) 참조).
+ 테이블에서 DynamoDB Streams를 활성화하거나 비활성화합니다([DynamoDB Streams에 대한 변경 데이터 캡처](Streams.md) 참조).

**Example**  
다음 AWS CLI 예제는 테이블의 프로비저닝된 처리량 설정을 수정하는 방법을 보여줍니다.  

```
aws dynamodb update-table --table-name Music \
    --provisioned-throughput ReadCapacityUnits=20,WriteCapacityUnits=10
```

**참고**  
`UpdateTable` 요청을 실행하면 테이블 상태가 `AVAILABLE`에서 `UPDATING`으로 바뀝니다. `UPDATING` 상태라고 해도 테이블 사용에는 제한이 없습니다. 이 프로세스가 끝나면 테이블 상태가 다시 `UPDATING`에서 `AVAILABLE`로 바뀝니다.

**Example**  
다음 AWS CLI 예제는 테이블의 읽기/쓰기 용량 모드를 온디맨드 모드로 수정하는 방법을 보여줍니다.  

```
aws dynamodb update-table --table-name Music \
    --billing-mode PAY_PER_REQUEST
```

## 테이블 삭제
<a name="WorkingWithTables.Basics.DeleteTable"></a>

`DeleteTable` 작업으로 미사용 테이블을 제거할 수 있습니다. 테이블 삭제 작업은 취소할 수 없습니다. AWS Management Console을 사용하여 테이블을 삭제하려면 [6단계: (선택 사항) DynamoDB 테이블을 삭제하여 리소스 정리](getting-started-step-6.md) 섹션을 참조하세요.

**Example**  
다음 AWS CLI 예제는 대기열을 삭제하는 방법을 보여줍니다.  

```
aws dynamodb delete-table --table-name Music
```

`DeleteTable` 요청을 실행하면 테이블의 상태가 `ACTIVE`에서 `DELETING`으로 바뀝니다. 사용하는 리소스(예: 테이블에 저장된 데이터, 테이블의 스트림 또는 인덱스 등)에 따라 테이블을 삭제하는 데 시간이 걸릴 수 있습니다.

`DeleteTable` 작업이 종료되면 DynamoDB에는 해당 테이블이 더 이상 존재하지 않습니다.

## 삭제 보호 기능 사용
<a name="WorkingWithTables.Basics.DeletionProtection"></a>

삭제 보호 속성을 사용하여 테이블이 실수로 삭제되지 않도록 보호할 수 있습니다. 테이블에 이 속성을 활성화하면 관리자가 일반적인 테이블 관리 작업을 수행하는 동안 테이블이 실수로 삭제되는 것을 방지할 수 있습니다. 이렇게 하면 정상적인 비즈니스 운영이 중단되는 것을 방지하는 데 도움이 됩니다.

 테이블 소유자 또는 권한이 부여된 관리자가 각 테이블의 삭제 보호 속성을 제어합니다. 모든 테이블의 삭제 보호 속성은 기본적으로 해제되어 있습니다. 여기에는 글로벌 복제본과 백업에서 복원된 테이블이 포함됩니다. 테이블에 대한 삭제 보호가 비활성화되면 Identity and Access Management(IAM) 정책에 의해 승인된 모든 사용자가 테이블을 삭제할 수 있습니다. 삭제 보호가 활성화된 테이블은 그 누구도 삭제할 수 없습니다.

이 설정을 변경하려면 테이블의 **추가 설정**으로 이동하여 **삭제 보호** 패널로 이동한 다음, **삭제 보호 활성화**를 선택합니다.

삭제 보호 속성은 DynamoDB 콘솔, API, CLI/SDK 및 CloudFormation에서 지원됩니다. `CreateTable` API는 테이블 생성 시 삭제 보호 속성을 지원하고, `UpdateTable` API는 기존 테이블의 삭제 보호 속성 변경을 지원합니다.

**참고**  
AWS 계정이 삭제되면 테이블을 포함한 해당 계정의 모든 데이터도 90일 이내에 삭제됩니다.
DynamoDB가 테이블을 암호화하는 데 사용된 고객 관리형 키에 액세스할 수 없는 경우에도 테이블은 여전히 아카이브됩니다. 아카이브에는 테이블을 백업하고 원본을 삭제하는 작업이 포함됩니다.

## 테이블 이름 나열
<a name="WorkingWithTables.Basics.ListTables"></a>

`ListTables` 작업은 현재 AWS 계정 및 리전의 DynamoDB 테이블 이름을 반환합니다.

**Example**  
다음 AWS CLI 예제는 DynamoDB 테이블 이름을 나열하는 방법을 보여 줍니다.  

```
aws dynamodb list-tables
```

## 프로비저닝된 처리량 할당량 설명
<a name="WorkingWithTables.Basics.DescribeLimits"></a>

`DescribeLimits` 작업은 현재 AWS 계정 및 리전의 현재 읽기 및 쓰기 용량 할당량을 반환합니다.

**Example**  
다음 AWS CLI 예제는 현재 프로비저닝된 처리량 할당량을 설명하는 방법을 보여줍니다.  

```
aws dynamodb describe-limits
```
출력을 통해 현재 AWS 계정 및 리전에 대한 읽기 및 쓰기 용량 단위의 상한 할당량을 확인할 수 있습니다.

이러한 할당량과 할당량 증가를 요청하는 방법에 대한 자세한 내용은 [처리량 기본 할당량](ServiceQuotas.md#default-limits-throughput) 단원을 참조하십시오.

# DynamoDB에서 테이블 클래스 선택 시 고려 사항
<a name="WorkingWithTables.tableclasses"></a>

DynamoDB는 비용을 최적화할 수 있도록 설계된 두 가지 테이블 클래스를 제공합니다. DynamoDB Standard 테이블 클래스가 기본값이며 대다수의 워크로드에 권장됩니다. DynamoDB Standard-Infrequent Access(DynamoDB Standard-IA) 테이블 클래스는 스토리지 비용이 많이 드는 테이블에 최적화되어 있습니다. 예를 들어 애플리케이션 로그, 이전 소셜 미디어 게시물, 전자 상거래 주문 내역 및 과거 게임 성과 같이 자주 액세스하지 않는 데이터를 저장하는 테이블은 Standard-IA 테이블 클래스에 적합합니다.

모든 DynamoDB 테이블은 테이블 클래스와 연결됩니다. 테이블과 연결된 모든 보조 인덱스는 동일한 테이블 클래스를 사용합니다. 테이블을 생성할 때 테이블 클래스를 설정하고(기본적으로 DynamoDB Standard), AWS Management Console, AWS CLI 또는 AWS SDK를 사용하여 기존 테이블의 테이블 클래스를 업데이트할 수 있습니다. DynamoDB는 또한 단일 리전 테이블(글로벌 테이블이 아닌 테이블)에 대해 AWS CloudFormation을 사용하여 테이블 클래스를 관리하는 것을 지원합니다. 각 테이블 클래스는 데이터 스토리지와 읽기 및 쓰기 요청에 대해 서로 다른 요금이 적용됩니다. 테이블의 테이블 클래스를 선택할 경우 다음 사항에 유의하세요.
+ DynamoDB Standard 테이블 클래스는 DynamoDB Standard-IA보다 낮은 처리량 비용을 제공하며 처리량이 가장 중요한 테이블에서는 가장 비용 효율적인 옵션입니다.
+ DynamoDB Standard-IA 테이블 클래스는 DynamoDB Standard보다 저렴한 스토리지 비용을 제공하며 스토리지 비용이 가장 큰 테이블에 가장 비용 효율적인 옵션입니다. 스토리지가 DynamoDB Standard 테이블 클래스를 사용하는 테이블의 처리량(읽기 및 쓰기) 비용의 50%를 초과하는 경우 DynamoDB Standard-IA 테이블 클래스를 사용하면 총 테이블 비용을 절감할 수 있습니다.
+ DynamoDB Standard-IA 테이블은 DynamoDB Standard 테이블과 성능, 내구성 및 가용성이 동일합니다.
+ DynamoDB Standard와 DynamoDB Standard-IA 테이블 클래스 간을 전환할 때 애플리케이션 코드를 변경할 필요가 없습니다. 테이블에서 사용하는 테이블 클래스와 관계없이 동일한 DynamoDB API와 서비스 엔드포인트를 사용합니다.
+ DynamoDB Standard-IA 테이블은 자동 크기 조정, 온디맨드 모드, 유지 시간(TTL), 온디맨드 백업, PITR(특정 시점으로 복구) 및 글로벌 보조 인덱스와 같은 기존 DynamoDB 기능과 모두 호환됩니다.

테이블의 가장 비용 효율적인 테이블 클래스는 테이블의 예상 스토리지 및 처리량 사용 패턴에 따라 달라집니다. AWS 비용 및 사용 보고서와 AWS Cost Explorer를 사용하여 테이블의 과거 스토리지 및 처리량 비용 및 사용량을 확인할 수 있습니다. 이 기록 데이터를 사용하여 테이블에 가장 비용 효율적인 테이블 클래스를 결정할 수 있습니다. AWS 비용 및 사용 보고서와 AWS Cost Explorer 사용에 대한 자세한 내용은 [AWS Billing and Cost Management 설명서](https://docs.aws.amazon.com/account-billing/index.html)를 참조하세요. 테이블 클래스 요금 세부 정보는 [Amazon DynamoDB 요금](https://aws.amazon.com/dynamodb/pricing/on-demand/)을 참조하세요.

**참고**  
테이블 클래스 업데이트는 백그라운드 프로세스입니다. 테이블 클래스 업데이트 중에도 여전히 테이블에 정상적으로 액세스할 수 있습니다. 테이블 클래스를 업데이트하는 시간은 테이블 트래픽, 스토리지 크기 및 기타 관련 변수에 따라 다릅니다. 30일 후행 기간에는 테이블에 대한 테이블 클래스 업데이트가 2개 이상 허용되지 않습니다.

# DynamoDB의 리소스에 태그 및 레이블 추가
<a name="Tagging"></a>

Amazon DynamoDB 리소스에 *태그*를 사용하여 레이블을 지정할 수 있습니다. 태그를 사용하면 용도, 소유자, 환경 또는 다른 기준 등 다양한 방식으로 리소스를 분류할 수 있습니다. 태그를 사용하면 다음이 가능합니다.
+ 지정한 태그를 기반으로 리소스를 신속하게 식별합니다.
+ AWS 청구서를 태그별로 구분할 수 있습니다.
**참고**  
태그가 지정된 테이블과 관련된 로컬 보조 인덱스(LSI) 및 글로벌 보조 인덱스(GSI)는 동일한 태그로 레이블이 자동 지정됩니다. 현재 DynamoDB Streams 사용량에 태그를 지정할 수 없습니다.

태그 지정은 Amazon EC2, Amazon S3, DynamoDB 등의 AWS 서비스에서 지원됩니다. 효율적으로 태그를 지정하면 특정 태그와 연결하여 서비스 전체에 대해 생성된 보고서를 통해 비용을 분석할 수 있습니다.

태그 지정을 시작하려면 다음을 수행합니다.

1. [DynamoDB의 태그 지정 제한 사항](#TaggingRestrictions)를 파악합니다.

1. [DynamoDB에서 리소스 태그 지정](Tagging.Operations.md)를 사용하여 태그를 생성합니다.

1. [DynamoDB 태그를 사용하여 비용 할당 보고서 생성](#CostAllocationReports)를 사용하여 활성 태그당 AWS 비용을 추적합니다.

끝으로, 최적화된 태깅 전략을 따르는 것이 좋습니다. 자세한 내용은 [AWS 태깅 전략](https://d0.awsstatic.com/aws-answers/AWS_Tagging_Strategies.pdf)을 참조하세요.

## DynamoDB의 태그 지정 제한 사항
<a name="TaggingRestrictions"></a>

 각 태그는 사용자가 정의하는 키와 값으로 구성됩니다. 다음과 같은 제한 사항이 있습니다.
+  각 DynamoDB 테이블은 동일한 키에 대해 한 가지 태그만을 사용합니다. 기존 태그(동일한 키)를 추가하는 경우 기존 태그 값이 새 값으로 업데이트됩니다.
+  태그 키와 값은 대소문자를 구분합니다.
+  최대 키 길이는 유니코드 문자 128자입니다.
+ 최대 값 길이는 유니코드 문자 256자입니다.
+  허용되는 문자는 문자, 공백, 숫자, 특수 문자(`+ - = . _ : /`)입니다.
+  리소스당 최대 태그 수는 50개입니다.
+ 테이블의 모든 태그에 지원되는 최대 크기는 10KB입니다.
+ AWS 할당 태그 이름과 값에는 사용자가 할당할 수 없는 `aws:` 접두사가 자동으로 할당됩니다. AWS 할당 태그 이름은 태그 제한인 50개 또는 최대 크기 제한인 10KB에 포함되지 않습니다. 비용 할당 보고서에는 사용자가 지정한 태그 이름인 `user:` 접두사가 포함됩니다.
+  태그를 소급해서 적용할 수 없습니다.

# DynamoDB에서 리소스 태그 지정
<a name="Tagging.Operations"></a>

Amazon DynamoDB 콘솔 또는 AWS Command Line Interface(AWS CLI)를 사용하여 태그를 추가, 나열, 편집 또는 삭제할 수 있습니다. 이러한 사용자 정의 태그를 활성화하면 AWS 결제 및 비용 관리 콘솔에 표시되어 비용 할당을 추적할 수 있습니다. 자세한 내용은 [DynamoDB 태그를 사용하여 비용 할당 보고서 생성](Tagging.md#CostAllocationReports) 섹션을 참조하세요.

 일괄 편집을 위해 AWS Management Console에서 Tag Editor를 사용할 수 있습니다. 자세한 내용은 [Tag Editor 작업](https://docs.aws.amazon.com/awsconsolehelpdocs/latest/gsg/tag-editor.html)을 참조하세요.

 대신 DynamoDB API를 사용하려면 [Amazon DynamoDB API 참조](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/)의 다음 작업을 참조하세요.
+ [TagResource](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_TagResource.html)
+ [UntagResource](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UntagResource.html)
+ [ListTagsOfResource](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ListTagsOfResource.html)

**Topics**
+ [태그별로 필터링할 사용 권한 설정](#Tagging.Operations.permissions)
+ [신규 또는 기존 테이블에 태그 추가(AWS Management Console)](#Tagging.Operations.using-console)
+ [신규 또는 기존 테이블에 태그 추가(AWS CLI)](#Tagging.Operations.using-cli)

## 태그별로 필터링할 사용 권한 설정
<a name="Tagging.Operations.permissions"></a>

태그를 사용하여 DynamoDB 콘솔에서 테이블 목록을 필터링하려면 사용자의 정책에 다음 작업에 대한 액세스 권한이 포함되어 있는지 확인합니다.
+ `tag:GetTagKeys`
+ `tag:GetTagValues`

아래 단계에 따라 사용자에게 새 IAM 정책을 연결하여 이러한 작업에 액세스할 수 있습니다.

1. 관리자로 [IAM 콘솔](https://console.aws.amazon.com/iam/)로 이동합니다.

1. 왼쪽 탐색 창에서 “정책”을 선택합니다.

1. “정책 생성”을 선택합니다.

1. 다음 정책을 JSON 편집기에 붙여넣습니다.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "tag:GetTagKeys",
                   "tag:GetTagValues"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------

1. 마법사를 완료하고 정책에 이름을 할당합니다(예: `TagKeysAndValuesReadAccess`).

1. 왼쪽 탐색 메뉴에서 “사용자”를 선택합니다.

1. 목록에서 DynamoDB 콘솔에 액세스하는 데 일반적으로 사용하는 사용자를 선택합니다.

1. “Add permissions(권한 추가)”를 선택합니다.

1. “Attach existing policies directly(기존 정책 직접 연결)”를 선택합니다.

1. 목록에서 이전에 생성한 정책을 선택합니다.

1. 마법사를 완료합니다.

## 신규 또는 기존 테이블에 태그 추가(AWS Management Console)
<a name="Tagging.Operations.using-console"></a>

DynamoDB 콘솔을 사용하여 생성한 신규 테이블에 태그를 추가하거나 기존 테이블에 태그를 추가, 편집 또는 삭제할 수 있습니다.

**생성 시 리소스에 태그를 지정하려면(콘솔)**

1. AWS Management Console에 로그인하고 [https://console.aws.amazon.com/dynamodb/](https://console.aws.amazon.com/dynamodb/)에서 DynamoDB 콘솔을 엽니다.

1. 탐색 창에서 **테이블**을 선택한 다음 **테이블 생성**을 선택합니다.

1. **Create DynamoDB table(DynamoDB 테이블 만들기)** 페이지에서 이름과 기본 키를 입력합니다. **태그(Tags)** 섹션에서 **새 태그 추가(Add new tag)**를 선택하고 사용하려는 태그를 입력합니다.

   태그 구조에 대한 자세한 내용은 [DynamoDB의 태그 지정 제한 사항](Tagging.md#TaggingRestrictions) 섹션을 참조하세요.

   테이블 생성에 대한 자세한 내용은 [DynamoDB 테이블에 대한 기본 작업](WorkingWithTables.Basics.md) 단원을 참조하세요.

**기존 리소스에 태그를 지정하려면(콘솔)**

[https://console.aws.amazon.com/dynamodb/](https://console.aws.amazon.com/dynamodb/)에서 DynamoDB 콘솔을 엽니다.

1. 탐색 창에서 **테이블**을 선택합니다.

1. 목록에서 테이블을 선택한 다음 **추가 설정(Additional settings)** 탭을 선택합니다. 페이지 하단의 **태그(Tags)** 섹션에서 태그를 추가, 편집 또는 삭제할 수 있습니다.

## 신규 또는 기존 테이블에 태그 추가(AWS CLI)
<a name="Tagging.Operations.using-cli"></a>

다음 예제에서는 AWS CLI를 사용하여 테이블 및 인덱스 생성 시 태그를 지정하고 기존 리소스에 태그를 지정하는 방법을 보여줍니다.

**생성 시 리소스에 태그를 지정하려면(AWS CLI)**
+ 다음 예제에서는 새 `Movies` 테이블을 생성하고 값이 `Owner`인 `blueTeam` 태그를 추가합니다.

  ```
  aws dynamodb create-table \
      --table-name Movies \
      --attribute-definitions AttributeName=Title,AttributeType=S \
      --key-schema AttributeName=Title,KeyType=HASH \
      --provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5 \
      --tags Key=Owner,Value=blueTeam
  ```

**기존 리소스에 태그를 지정하려면(AWS CLI)**
+ 다음 예제에서는 `Owner` 테이블에 대해 값이 `blueTeam`인 `Movies` 태그를 추가합니다.

  ```
  aws dynamodb tag-resource \
      --resource-arn arn:aws:dynamodb:us-east-1:123456789012:table/Movies \
      --tags Key=Owner,Value=blueTeam
  ```

**테이블에 대한 태그를 모두 나열하려면(AWS CLI)**
+ 다음 예제는 `Movies` 테이블과 연결된 모든 태그를 나열합니다.

  ```
  aws dynamodb list-tags-of-resource \
      --resource-arn arn:aws:dynamodb:us-east-1:123456789012:table/Movies
  ```

## DynamoDB 태그를 사용하여 비용 할당 보고서 생성
<a name="CostAllocationReports"></a>

AWS에서는 태그를 사용하여 비용 할당 보고서에서 리소스 비용을 구성합니다. AWS에서는 두 가지 비용 할당 태그 유형을 제공합니다.
+ AWS 생성 태그 AWS는 사용자를 위해 태그를 정의, 생성 및 적용합니다.
+ 사용자 정의 태그로, 사용자가 태그를 정의, 생성 또는 적용합니다.

두 유형의 태그 모두 개별적으로 활성화해야만 Cost Explorer나 비용 할당 보고서에 표시됩니다.

 AWS 생성 태그 활성화 방법 

1.  AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/billing/home\$1/](https://console.aws.amazon.com/billing/home#/.)에서 Billing and Cost Management 콘솔을 엽니다.

1.  탐색 창에서 **비용 할당 태그**를 선택합니다.

1.  **AWS 생성 비용 할당 태그**에서 **활성화**를 선택합니다.

 사용자 정의 태그 활성화 방법 

1.  AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/billing/home\$1/](https://console.aws.amazon.com/billing/home#/.)에서 Billing and Cost Management 콘솔을 엽니다.

1.  탐색 창에서 **비용 할당 태그**를 선택합니다.

1.  **사용자 정의 비용 할당 태그**에서 **활성화**를 선택합니다.

 태그를 생성하여 활성화한 후 AWS에서는 사용 내역 및 비용별로 집계한 태그를 사용하여 비용 할당 보고서를 만듭니다. 비용 할당 보고서에는 각 결제 기간의 모든 AWS 비용이 포함되어 있습니다. 보고서에 태그가 지정된 리소스와 태그가 지정되지 않은 리소스가 모두 포함되어 있어 리소스에 대한 요금을 알아보기 쉽게 정리할 수 있습니다.

**참고**  
 현재 DynamoDB에서 이전한 모든 데이터에 대해 비용 할당 보고서의 태그로 구분되지는 않습니다.

 자세한 내용은 [비용 할당 태그 사용](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html)을 참조하세요.