

이제 Xamarin용 AWS Mobile SDK가에 포함됩니다 AWS SDK for .NET. 이 안내서에서는 Xamarin용 모바일 SDK의 아카이브된 버전을 참조합니다.

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Amazon DynamoDB
<a name="dynamodb"></a>

## What is Amazon DynamoDB?
<a name="what-is-amazon-dynamodb"></a>

 [Amazon DynamoDB](https://aws.amazon.com/dynamodb/)은 속도가 빠르고 확장성이 뛰어난 비 관계형 데이터베이스 서비스입니다. DynamoDB는 기존 데이터 스토리지의 확장성 제한을 없애면서도 낮은 지연 시간과 예측 가능한 성능을 유지합니다.

## 핵심 개념
<a name="key-concepts"></a>

DynamoDB 데이터 모델 개념에는 테이블, 항목 및 속성이 포함됩니다.

### 테이블
<a name="tables"></a>

Amazon DynamoDB에서 데이터베이스는 테이블의 모음입니다. 테이블은 항목 집합이고, 그리고 각 항목은 속성 집합입니다.

관계형 데이터베이스에서는 테이블 이름, 기본 키, 열 이름 목록 및 데이터 형식 등의 테이블 스키마가 사전에 정의되어 있습니다. 테이블에 저장되는 레코드 역시 모두 동일한 열 집합을 가져야 합니다. 대조적으로 DynamoDB에서는 테이블에 기본 키만 있으면 되며, 모든 속성 이름과 데이터 형식을 사전에 정의할 필요도 없습니다.

테이블 작업에 대한 자세한 내용은 [DynamoDB의 테이블 작업](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithTables.html)을 참조하세요.

### 항목 및 속성
<a name="items-and-attributes"></a>

DynamoDB 테이블의 각 항목은 크기가 400KB로 제한되기는 하지만 속성은 몇 개든지 가질 수 있습니다. 항목 크기는 속성 이름 길이와 값의 길이(이진수와 UTF-8 길이)를 더하여 결정됩니다.

각 항목 속성은 이름-값 페어입니다. 또한 단일 값이나 다중 값의 집합이 되기도 합니다. 예들 들어 서적 항목은 제목과 저자 속성, 두 가지를 가질 수 있습니다. 서적마다 제목은 하나지만 저자가 다수일 수도 있습니다. 이러한 다중 값 속성은 집합을 이루지만 중복 값은 허용되지 않습니다.

예를 들어 DynamoDB에 제품 카탈로그를 저장한다고 가정하겠습니다. Id 속성을 기본 키로 하여 ProductCatalog 테이블을 생성할 수 있습니다. 기본 키는 각 항목의 고유 식별자입니다. 따라서 테이블의 두 제품이 동일한 기본 ID를 가질 수는 없습니다.

항목 작업에 대한 자세한 내용은 [DynamoDB의 항목 작업](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithItems.html)을 참조하세요.

### 데이터 타입
<a name="data-types"></a>

Amazon DynamoDB는 다음 데이터 형식을 지원합니다.
+  **스칼라 형식** – 숫자, 문자열, 이진수, 부울 및 null
+  **다중 값 형식** – 문자열 집합, 숫자 집합 및 이진수 집합
+  **문서 형식** – 목록 및 맵

스칼라 데이터 형식, 다중 값 데이터 형식 및 문서 데이터 형식에 대한 자세한 내용은 [DynamoDB 데이터 형식](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DataModel.html#DataModel.DataTypes)을 참조하세요.

### 프라이머리 키
<a name="primary-key"></a>

테이블을 생성할 때는 테이블 이름 외에도 테이블의 기본 키를 지정해야 합니다. 프라이머리 키는 테이블의 각 항목을 나타내는 고유 식별자입니다. 따라서 두 항목이 동일한 키를 가질 수는 없습니다. DynamoDB는 다음과 같이 두 가지 형식의 기본 키를 지원합니다.
+  **해시 기본 키**: 기본 키가 한 가지 속성인 해시 속성으로 구성됩니다. DynamoDB는 이 기본 키 속성을 기반으로 정렬되지 않은(unordered) 해시 인덱스를 빌드합니다. 테이블의 각 항목은 해시 키 값을 기준으로 고유 식별됩니다.
+  **해시 및 범위 키**: 기본 키가 두 가지 속성으로 구성됩니다. 첫 번째 속성은 해시 속성이고, 두 번째는 범위 속성입니다. DynamoDB는 해시 기본 키 속성을 기반으로 정렬되지 않은(unordered) 해시 인덱스를 빌드하고, 범위 기본 키 속성을 기반으로 정렬된 범위 인덱스를 빌드합니다. 테이블의 각 항목은 해시 키 값을 기준으로 고유 식별됩니다. 두 항목이 동일한 해시 키 값을 가질 수는 있지만 범위 키 값은 서로 달라야 합니다.

### 보조 인덱스
<a name="secondary-indexes"></a>

해시 및 범위 키와 함께 테이블을 생성하면 옵션으로 해당 테이블에 보조 인덱스를 하나 이상 정의할 수 있습니다. 보조 인덱스를 사용하면 기본 키에 대한 쿼리는 물론이고 대체 키를 사용하여 테이블의 데이터도 쿼리할 수 있습니다.

DynamoDB는 로컬 보조 인덱스와 글로벌 보조 인덱스 두 유형의 보조 인덱스를 지원합니다.
+  **로컬 보조 인덱스**: 해시 키는 테이블과 같지만 범위 키는 다른 인덱스입니다.
+  **글로벌 보조 인덱스**: 해시 및 범위 키가 테이블과 다를 수 있는 인덱스입니다.

테이블당 최대 5개의 글로벌 보조 인덱스 및 5개의 로컬 보조 인덱스를 정의할 수 있습니다. 자세한 내용은 DynamoDB 개발자 안내서의 [DynamoDB에서 보조 인덱스를 사용하여 데이터 액세스 향상](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/SecondaryIndexes.html)을 참조하세요.

### Query and Scan
<a name="query-and-scan"></a>

항목에 액세스하기 위해 기본 키를 사용하는 방법 외에도 Amazon DynamoDB는 데이터를 검색할 수 있는 두 가지 API인 쿼리와 스캔을 제공합니다. DynamoDB 개발자 안내서에서 [쿼리 및 스캔 지침](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/QueryAndScanGuidelines.html)을 읽고 몇 가지 모범 사례를 숙지하는 것이 좋습니다.

#### Query
<a name="query"></a>

쿼리 작업은 기본 키 속성 값만 사용하여 테이블 또는 보조 인덱스의 항목을 찾습니다. 따라서 해시 키 속성 이름과 검색할 개별 값은 직접 입력해야 합니다. 범위 키 속성 이름과 값은 옵션으로 입력할 수 있으며, 비교 연산자를 사용하여 검색 결과의 범위를 좁힐 수도 있습니다.

샘플 쿼리는 다음을 참조하세요.
+  [문서 모델 사용](dynamodb-integration-docmodel.md) 
+  [객체 지속성 모델 사용](dynamodb-integration-objectpersistencemodel.md) 
+  [DynamoDB 서비스 수준 API 사용](dynamodb-integration-lowlevelapi.md) 

쿼리에 대한 자세한 내용은 DynamoDB 개발자 안내서의 [쿼리](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/QueryAndScan.html#QueryAndScan.Query)를 참조하세요.

#### 스캔
<a name="scan"></a>

스캔 작업은 테이블 또는 보조 인덱스의 모든 항목을 읽어옵니다. 기본적으로 스캔 작업은 테이블이나 인덱스에 속한 항목의 데이터 속성을 모두 반환합니다. 하지만 스캔 작업에서 ProjectionExpression 파라미터를 사용하면 모두가 아닌 일부 속성만 가져올 수 있습니다.

샘플 스캔은 다음을 참조하세요.
+  [문서 모델 사용](dynamodb-integration-docmodel.md) 
+  [객체 지속성 모델 사용](dynamodb-integration-objectpersistencemodel.md) 
+  [DynamoDB 서비스 수준 API 사용](dynamodb-integration-lowlevelapi.md) 

스캔에 대한 자세한 내용은 DynamoDB 개발자 안내서의 [스캔](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/QueryAndScan.html#QueryAndScan.Scan)을 참조하세요.

## 프로젝트 설정
<a name="project-setup"></a>

### 사전 조건
<a name="prerequisites"></a>

애플리케이션에서 DynamoDB를 사용하려면 프로젝트에 SDK를 추가해야 합니다. 이렇게 하려면 [.NET 및 Xamarin용 AWS Mobile SDK 설정](setup.md)의 지침을 따르세요.

### DynamoDB 테이블 생성
<a name="create-a-dynamodb-table"></a>

테이블을 생성하려면 [DynamoDB 콘솔](https://console.aws.amazon.com/dynamodb/home)로 이동하여 다음 단계를 수행합니다.

1. **테이블 만들기**를 클릭합니다.

1. 테이블의 이름을 입력합니다.

1. 기본 키 유형으로 **해시**를 선택합니다.

1. 형식을 선택하고 해시 속성 이름에 값을 입력합니다. **계속**을 클릭합니다.

1. 글로벌 보조 인덱스를 사용하려면 **인덱스 추가** 페이지에서 **인덱스 유형**을 "글로벌 보조 인덱스"로 설정하고 **인덱스 해시 키** 아래에서 보조 인덱스의 값을 입력합니다. 그러면 기본 인덱스와 보조 인덱스를 모두 사용하여 쿼리 및 스캔할 수 있습니다. **테이블에 인덱스 추가**를 클릭하고 **계속**을 클릭합니다. 글로벌 보조 인덱스 사용을 건너뛰려면 **계속**을 클릭합니다.

1. 읽기 및 쓰기 용량을 원하는 수준으로 설정합니다. 용량 구성에 대한 자세한 내용은 [Amazon DynamoDB의 프로비저닝된 처리량](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ProvisionedThroughputIntro.html)을 참조하세요. **계속**을 클릭합니다.

1. 다음 화면에서 필요한 경우 처리량 경보를 생성할 알림 이메일을 입력합니다. **계속**을 클릭합니다.

1. 요약 페이지에서 **생성**을 클릭합니다. DynamoDB가 데이터베이스를 생성합니다.

### DynamoDB에 대한 권한 설정
<a name="set-permissions-for-dynamodb"></a>

애플리케이션에서 DynamoDB를 사용하려면 올바른 권한을 설정해야 합니다. 다음 IAM 정책은 사용자가 [ARN](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html)으로 정의되는 특정 DynamoDB 테이블 내 항목에 대해 삭제, 가져오기, 내보내기, 쿼리, 스캔 및 업데이트 작업을 수행하도록 허용합니다.

```
{
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "dynamodb:DeleteItem",
        "dynamodb:GetItem",
        "dynamodb:PutItem",
        "dynamodb:Query",
        "dynamodb:Scan",
        "dynamodb:UpdateItem"
      ],
      "Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/MyTable"
    }
  ]
}
```

[IAM 콘솔](https://console.aws.amazon.com/iam/)에서 정책을 수정할 수 있습니다. 앱의 필요에 따라 허용되는 작업을 추가 또는 제거해야 합니다.

IAM 정책에 대한 자세한 내용은 [IAM 사용](https://docs.aws.amazon.com/IAM/latest/UserGuide/IAM_Introduction.html)을 참조하세요.

DynamoDB 고유 정책에 대한 자세한 내용은 DynamoDB 개발자 안내서의 [IAM을 사용하여 DynamoDB 리소스에 대한 액세스 제어](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/UsingIAMWithDDB.html)를 참조하세요.

## 애플리케이션에 DynamoDB 통합
<a name="integrating-dynamodb-with-your-application"></a>

.NET 및 Xamarin용 AWS Mobile SDK는 DynamoDB에서의 작업을 위한 상위 수준 라이브러리를 제공합니다. 또한 하위 수준 DynamoDB API에 대해 직접 요청을 생성할 수 있지만, 대부분의 사용 사례에서는 상위 수준 라이브러리가 권장됩니다. AmazonDynamoDBClient는 상위 수준 라이브러리에서 특히 유용한 부분입니다. 이 클래스를 사용하여 다양한 생성, 읽기, 업데이트 및 삭제(CRUD) 작업을 수행하고 쿼리를 실행할 수 있습니다.

.NET 및 Xamarin용 AWS Mobile SDK에서는 DynamoDB 작업을 위해 .NET용 AWS SDK에서 API를 사용하여 호출할 수 있습니다. 모든 API는 AWSSDK.dll로 사용할 수 있습니다. .NET용 AWS SDK 다운로드에 대한 자세한 내용은 [.NET용 AWS SDK](https://aws.amazon.com/sdk-for-net/)를 참조하세요.

Xamarin 애플리케이션에서 DynamoDB와 상호 작용할 수 있는 방법은 세 가지가 있습니다.
+  **문서 모델**: 이 API는 하위 수준 DyanmoDB API를 중심으로 래퍼 클래스를 제공하여 프로그래밍 작업을 더욱 간소화합니다. 테이블과 문서가 주요 래퍼 클래스입니다. 문서 모델은 항목 생성, 검색, 업데이트 및 삭제 등의 데이터 작업에 사용됩니다. 이 API는 Amazon.DynamoDB.DocumentModel 네임스페이스에서 사용할 수 있습니다.
+  **객체 지속성 모델**: 객체 지속성 API를 사용하면 클라이언트 쪽 클래스를 DynamoDB 테이블로 매핑할 수 있습니다. 그러면 각 객체 인스턴스도 해당 테이블 항목으로 매핑됩니다. 이 API의 DynamoDBContext 클래스는 클라이언트 측 객체를 테이블에 저장하거나, 항목을 객체로 가져오거나, 쿼리 및 스캔을 실행할 수 있는 메서드를 제공합니다. 객체 지속성 모델은 항목 생성, 검색, 업데이트 및 삭제 등의 데이터 작업에 사용됩니다. 먼저 서비스 클라이언트 API를 사용하여 테이블을 생성한 다음 객체 지속성 모델을 사용하여 클래스를 테이블로 매핑해야 합니다. 이 API는 Amazon.DynamoDB.DataModel 네임스페이스에서 사용할 수 있습니다.
+  **서비스 클라이언트 API**: 이 프로토콜 수준 API는 DynamoDB API에 밀접하게 매핑됩니다. 테이블 및 항목 생성부터 업데이트, 삭제에 이르기까지 모든 테이블 및 항목 작업에는 이 하위 수준 API를 사용할 수 있습니다. 또한 테이블에 대한 쿼리나 스캔도 가능합니다. 이 API는 Amazon.DynamoDB 네임스페이스에서 사용할 수 있습니다.

다음 주제에서 세 방법을 자세히 살펴봅니다.

**Topics**