

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

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

# 객체 지속성 모델 사용
<a name="dynamodb-integration-objectpersistencemodel"></a>

.NET 및 Xamarin용 AWS Mobile SDK는 객체 지속성 모델을 제공하므로 이것으로 클라이언트 측 클래스를 DynamoDB 테이블에 매핑할 수 있습니다. 그러면 각 객체 인스턴스도 해당 테이블의 항목으로 매핑됩니다. 클라이언트 쪽 객체를 테이블에 저장하기 위해 객체 지속성 모델에서는 DynamoDB에 대한 진입점인 DynamoDBContext 클래스를 제공합니다. 이 클래스는 DynamoDB로 연결하는 역할을 하기 때문에 테이블에 액세스하여 다양한 CRUD 작업이 가능할 뿐만 아니라 쿼리를 실행할 수 있습니다.

객체 지속성 모델은 테이블을 생성, 업데이트 또는 삭제할 수 있는 API를 제공하지 않으며 데이터 작업만 제공합니다. 테이블을 생성, 업데이트 및 삭제하려면 하위 수준 API를 사용해야 합니다. 하위 수준 API를 사용하는 방법에 대한 자세한 내용은 [DynamoDB 서비스 수준 API 사용](dynamodb-integration-lowlevelapi.md)을 참조하세요.

## 개요
<a name="overview"></a>

객체 지속성 모델은 속성 세트를 제공하여 클라이언트 측 클래스를 테이블로 매핑할 수 있으며, 속성/필드를 테이블 속성으로 매핑할 수 있습니다. 객체 지속성 모델은 클래스 속성 및 테이블 속성 간 명시적 매핑과 기본 매핑 모두를 지원합니다.
+  **명시적 매핑**: 속성을 기본 키에 매핑하기 위해서는 DynamoDBHashKey 및 DynamoDBRangeKey 객체 지속성 모델 속성을 사용해야 합니다. 또한, 기본이 아닌 키 속성의 경우, 클래스의 속성 이름과 이를 매핑하려는 해당 테이블 속성이 같지 않다면 DynamoDBProperty 속성을 명시적으로 추가하여 매핑을 정의해야 합니다.
+  **기본 매핑** - 기본적으로 객체 지속성 모델은 클래스 속성을 같은 이름의 테이블 속성으로 매핑합니다.

각 클래스 속성을 전부 하나씩 매핑할 필요는 없습니다. DynamoDBIgnore 속성을 추가하여 이러한 속성을 확인할 수 있습니다. 객체의 인스턴스를 저장 및 검색하면 이 속성으로 표시된 속성이 모두 생략됩니다.

## 지원되는 데이터 형식
<a name="supported-data-types"></a>

객체 지속성 모델은 여러 개의 기본 .NET 데이터 유형, 컬렉션 및 임의 데이터 유형을 지원합니다. 모델이 지원하는 기본 데이터 유형은 다음과 같습니다.
+ bool
+ 바이트
+ char
+ DateTime
+ decimal, double, float
+ Int16, Int32, Int64
+ SByte
+ 문자열
+ UInt16, UInt32, UInt64

객체 지속성 모델은 .NET 컬렉션 형식도 지원하지만 다음과 같은 제한 사항이 있습니다.
+ 컬렉션 형식은 ICollection 인터페이스를 구현해야 합니다.
+ 컬렉션 형식은 지원되는 기본 유형으로 구성되어야 합니다. 예를 들면 ICollection<string>, ICollection<bool>과 같습니다.
+ 컬렉션 형식은 파라미터가 없는 생성자를 사용할 수 있어야 합니다.

객체 지속성 모델에 대한 자세한 내용은 [.NET 객체 지속성 모델](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DotNetSDKHighLevel.html)을 참조하세요.

## DynamoDB 클라이언트 생성
<a name="create-a-dynamodb-client"></a>

DynamoDB 클라이언트를 생성하는 방법:

```
var client = new AmazonDynamoDBClient(credentials,region);
DynamoDBContext context = new DynamoDBContext(client);
```

## CRUD 연산
<a name="crud-operations"></a>

### 객체 저장
<a name="save-an-object"></a>

객체를 생성합니다.

```
[DynamoDBTable("Books")]
public class Book {
  [DynamoDBHashKey] // Hash key.
  public string Id {
    get;
    set;
  }

  [DynamoDBGlobalSecondaryIndexHashKey]
  public string Author {
    get;
    set;
  }

  [DynamoDBGlobalSecondaryIndexRangeKey]
  public string Title {
    get;
    set;
  }
  public string ISBN {
    get;
    set;
  }
  public int Price {
    get;
    set;
  }
  public string PageCount {
    get;
    set;
  }
}

Book myBook = new Book
{
    Id = id,
    Author = "Charles Dickens",
    Title = "Oliver Twist",
    ISBN = "111-1111111001",
    Price = 10,
    PageCount = 300
};
```

DynamoDB 테이블에 객체를 저장합니다.

```
context.Save(myBook);
```

### 객체 검색
<a name="retrieve-an-object"></a>

객체를 검색하는 방법:

```
Book retrievedBook = context.Load<Book>(1);
```

### 객체 업데이트
<a name="update-an-object"></a>

객체를 업데이트하는 방법:

```
Book retrievedBook = context.Load<Book>(1);
retrievedBook.ISBN = "111-1111111001";
context.Save(retrievedBook);
```

### 객체 삭제
<a name="delete-an-object"></a>

객체를 삭제하려면:

```
Book retrievedBook = context.Load<Book>(1);
context.Delete(retrievedBook);
```

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

저자가 "Charles Dickens"인 모든 도서를 쿼리하고 가져오는 방법은 다음과 같습니다.

```
public async Task QueryAsync(AWSCredentials credentials, RegionEndpoint region) {
  var client = new AmazonDynamoDBClient(credentials, region);
  DynamoDBContext context = new DynamoDBContext(client);

  var search = context.FromQueryAsync < Book > (new Amazon.DynamoDBv2.DocumentModel.QueryOperationConfig() {
    IndexName = "Author-Title-index",
    Filter = new Amazon.DynamoDBv2.DocumentModel.QueryFilter("Author", Amazon.DynamoDBv2.DocumentModel.QueryOperator.Equal, "Charles Dickens")
  });

  Console.WriteLine("items retrieved");

  var searchResponse = await search.GetRemainingAsync();
  searchResponse.ForEach((s) = > {
    Console.WriteLine(s.ToString());
  });
}
```

아래의 스캔 코드 예제는 테이블에서 모든 도서를 반환합니다.

```
public async Task ScanAsync(AWSCredentials credentials, RegionEndpoint region) {
  var client = new AmazonDynamoDBClient(credentials, region);
  DynamoDBContext context = new DynamoDBContext(client);

  var search = context.FromScanAsync < Book > (new Amazon.DynamoDBv2.DocumentModel.ScanOperationConfig() {
   ConsistentRead = true
  });

  Console.WriteLine("items retrieved");

  var searchResponse = await search.GetRemainingAsync();
  searchResponse.ForEach((s) = > {
   Console.WriteLine(s.ToString());
  });
}
```