에서 Azure Cosmos DB 문서 데이터베이스 사용 Xamarin.Forms
Azure Cosmos DB 문서 데이터베이스는 JSON 문서에 대한 짧은 대기 시간 액세스를 제공하는 NoSQL 데이터베이스로, 원활한 규모와 글로벌 복제본(replica) 필요로 하는 애플리케이션에 대해 빠르고 확장성이 뛰어난 데이터베이스 서비스를 제공합니다. 이 문서에서는 Azure Cosmos DB .NET Standard 클라이언트 라이브러리를 사용하여 Azure Cosmos DB 문서 데이터베이스를 애플리케이션에 Xamarin.Forms 통합하는 방법을 설명합니다.
Microsoft Azure Cosmos DB 비디오
Azure Cosmos DB 문서 데이터베이스 계정은 Azure 구독을 사용하여 프로비전할 수 있습니다. 각 데이터베이스 계정에는 0개 이상의 데이터베이스가 있을 수 있습니다. Azure Cosmos DB의 문서 데이터베이스는 문서 컬렉션 및 사용자를 위한 논리적 컨테이너입니다.
Azure Cosmos DB 문서 데이터베이스에는 0개 이상의 문서 컬렉션이 포함될 수 있습니다. 각 문서 컬렉션은 성능 수준이 다를 수 있으므로 자주 액세스하는 컬렉션에 대해 더 많은 처리량을 지정하고 자주 액세스하지 않는 컬렉션의 처리량을 줄입니다.
각 문서 컬렉션은 0개 이상의 JSON 문서로 구성됩니다. 컬렉션의 문서는 스키마가 없으므로 동일한 구조나 필드를 공유할 필요가 없습니다. 문서가 문서 컬렉션에 추가되면 Azure Cosmos DB는 자동으로 인덱싱하고 쿼리할 수 있게 됩니다.
개발을 위해 에뮬레이터를 통해 문서 데이터베이스를 사용할 수도 있습니다. 에뮬레이터를 사용하면 Azure 구독을 만들거나 비용을 발생시키지 않고 로컬에서 애플리케이션을 개발하고 테스트할 수 있습니다. 에뮬레이터에 대한 자세한 내용은 Azure Cosmos DB 에뮬레이터를 사용하여 로컬로 개발을 참조 하세요.
이 문서 및 함께 제공되는 샘플 애플리케이션은 작업이 Azure Cosmos DB 문서 데이터베이스에 저장되는 Todo 목록 애플리케이션을 보여 줍니다. 샘플 애플리케이션에 대한 자세한 내용은 샘플 이해를 참조하세요.
Azure Cosmos DB에 대한 자세한 내용은 Azure Cosmos DB 설명서를 참조 하세요.
설정
Azure Cosmos DB 문서 데이터베이스를 애플리케이션에 Xamarin.Forms 통합하는 프로세스는 다음과 같습니다.
- Azure Cosmos DB 계정을 만듭니다. 자세한 내용은 Azure Cosmos DB 계정 만들기를 참조 하세요.
- 솔루션의 플랫폼 프로젝트에 Xamarin.Forms Azure Cosmos DB .NET Standard 클라이언트 라이브러리 NuGet 패키지를 추가합니다.
- Azure Cosmos
Microsoft.Azure.Documents
Microsoft.Azure.Documents.Client
DB 계정에 액세스할 클래스에 대한 지시문 및Microsoft.Azure.Documents.Linq
네임스페이스를 추가using
합니다.
이러한 단계를 수행한 후 Azure Cosmos DB .NET Standard 클라이언트 라이브러리를 사용하여 문서 데이터베이스에 대한 요청을 구성하고 실행할 수 있습니다.
참고 항목
Azure Cosmos DB .NET Standard 클라이언트 라이브러리는 PCL(이식 가능한 클래스 라이브러리) 프로젝트가 아니라 플랫폼 프로젝트에만 설치할 수 있습니다. 따라서 샘플 애플리케이션은 코드 중복을 방지하기 위한 SAP(공유 액세스 프로젝트)입니다. 그러나 DependencyService
PCL 프로젝트에서 클래스를 사용하여 플랫폼별 프로젝트에 포함된 Azure Cosmos DB .NET Standard 클라이언트 라이브러리 코드를 호출할 수 있습니다.
Azure Cosmos DB 계정 사용
이 형식은 DocumentClient
Azure Cosmos DB 계정에 액세스하는 데 사용되는 엔드포인트, 자격 증명 및 연결 정책을 캡슐화하며 계정에 대한 요청을 구성하고 실행하는 데 사용됩니다. 다음 코드 예제에서는 이 클래스의 인스턴스를 만드는 방법을 보여 줍니다.
DocumentClient client = new DocumentClient(new Uri(Constants.EndpointUri), Constants.PrimaryKey);
Azure Cosmos DB Uri 및 기본 키를 생성자에 제공해야 DocumentClient
합니다. Azure Portal에서 가져올 수 있습니다. 자세한 내용은 Azure Cosmos DB 계정에 대한 커넥트 참조하세요.
데이터베이스 만들기
문서 데이터베이스는 문서 컬렉션 및 사용자에 대한 논리적 컨테이너이며 Azure Portal에서 만들거나 메서드를 사용하여 DocumentClient.CreateDatabaseIfNotExistsAsync
프로그래밍 방식으로 만들 수 있습니다.
public async Task CreateDatabase(string databaseName)
{
...
await client.CreateDatabaseIfNotExistsAsync(new Database
{
Id = databaseName
});
...
}
메서드는 CreateDatabaseIfNotExistsAsync
개체를 Database
인수로 지정하고 개체는 Database
해당 속성으로 Id
데이터베이스 이름을 지정합니다. 이 메서드는 CreateDatabaseIfNotExistsAsync
데이터베이스가 없는 경우 데이터베이스를 만들거나 데이터베이스가 이미 있는 경우 반환합니다. 그러나 샘플 애플리케이션은 메서드에서 반환된 CreateDatabaseIfNotExistsAsync
모든 데이터를 무시합니다.
참고 항목
메서드는 CreateDatabaseIfNotExistsAsync
개체를 Task<ResourceResponse<Database>>
반환하고 응답의 상태 코드를 검사 데이터베이스를 만들었는지 또는 기존 데이터베이스가 반환되었는지 확인할 수 있습니다.
문서 컬렉션 만들기
문서 컬렉션은 JSON 문서의 컨테이너이며 Azure Portal에서 만들거나 메서드를 사용하여 DocumentClient.CreateDocumentCollectionIfNotExistsAsync
프로그래밍 방식으로 만들 수 있습니다.
public async Task CreateDocumentCollection(string databaseName, string collectionName)
{
...
// Create collection with 400 RU/s
await client.CreateDocumentCollectionIfNotExistsAsync(
UriFactory.CreateDatabaseUri(databaseName),
new DocumentCollection
{
Id = collectionName
},
new RequestOptions
{
OfferThroughput = 400
});
...
}
이 메서드에는 CreateDocumentCollectionIfNotExistsAsync
두 개의 필수 인수인 데이터베이스 이름과 개체가 Uri
DocumentCollection
필요합니다. 개체는 DocumentCollection
이름이 속성으로 Id
지정된 문서 컬렉션을 나타냅니다. 이 메서드는 CreateDocumentCollectionIfNotExistsAsync
문서 컬렉션이 없는 경우 문서 컬렉션을 만들거나 문서 컬렉션이 이미 있는 경우 반환합니다. 그러나 샘플 애플리케이션은 메서드에서 반환된 CreateDocumentCollectionIfNotExistsAsync
모든 데이터를 무시합니다.
참고 항목
메서드는 CreateDocumentCollectionIfNotExistsAsync
개체를 Task<ResourceResponse<DocumentCollection>>
반환하고 응답의 상태 코드를 검사 문서 컬렉션이 만들어졌는지 또는 기존 문서 컬렉션이 반환되었는지 확인할 수 있습니다.
필요에 따라 메서드는 CreateDocumentCollectionIfNotExistsAsync
Azure Cosmos DB 계정에 발급된 요청에 대해 지정할 수 있는 옵션을 캡슐화하는 개체를 지정할 RequestOptions
수도 있습니다. 이 RequestOptions.OfferThroughput
속성은 문서 컬렉션의 성능 수준을 정의하는 데 사용되며 샘플 애플리케이션에서는 초당 400개의 요청 단위로 설정됩니다. 컬렉션이 자주 또는 자주 액세스되지 않는지에 따라 이 값을 늘리거나 줄여야 합니다.
Important
이 메서드는 CreateDocumentCollectionIfNotExistsAsync
가격 책정에 영향을 주는 예약된 처리량을 사용하여 새 컬렉션을 만듭니다.
문서 컬렉션 문서 검색
문서 쿼리를 만들고 실행하여 문서 컬렉션의 내용을 검색할 수 있습니다. 다음 메서드를 사용하여 문서 쿼리를 DocumentClient.CreateDocumentQuery
만듭니다.
public async Task<List<TodoItem>> GetTodoItemsAsync()
{
...
var query = client.CreateDocumentQuery<TodoItem>(collectionLink)
.AsDocumentQuery();
while (query.HasMoreResults)
{
Items.AddRange(await query.ExecuteNextAsync<TodoItem>());
}
...
}
이 쿼리는 지정된 컬렉션에서 모든 문서를 비동기적으로 검색하고 표시할 문서를 컬렉션에 List<TodoItem>
배치합니다.
이 메서드는 CreateDocumentQuery<T>
문서에 대해 쿼리해야 하는 컬렉션을 나타내는 인수를 지정 Uri
합니다. 이 예제 collectionLink
에서 변수는 문서를 검색할 문서 컬렉션을 나타내는 클래스 수준 필드 Uri
입니다.
Uri collectionLink = UriFactory.CreateDocumentCollectionUri(Constants.DatabaseName, Constants.CollectionName);
메서드는 CreateDocumentQuery<T>
동기적으로 실행되는 쿼리를 만들고 개체를 IQueryable<T>
반환합니다. 그러나 메서드는 AsDocumentQuery
개체 IDocumentQuery<T>
를 IQueryable<T>
비동기적으로 실행할 수 있는 개체로 변환합니다. 비동기 쿼리는 쿼리에서 반환할 IDocumentQuery<T>.ExecuteNextAsync
추가 결과가 있는지 여부를 나타내는 속성과 함께 IDocumentQuery<T>.HasMoreResults
문서 데이터베이스에서 결과의 다음 페이지를 검색하는 메서드를 사용하여 실행됩니다.
문서 컬렉션에 대한 쿼리에 필터링 조건자를 적용하는 쿼리에 절을 포함하여 Where
문서를 서버 쪽에서 필터링할 수 있습니다.
var query = client.CreateDocumentQuery<TodoItem>(collectionLink)
.Where(f => f.Done != true)
.AsDocumentQuery();
이 쿼리는 해당 속성이 같은 컬렉션 Done
에서 모든 문서를 검색합니다 false
.
문서 컬렉션에 문서 삽입
문서는 사용자 정의 JSON 콘텐츠이며 다음 메서드를 사용하여 문서 컬렉션 DocumentClient.CreateDocumentAsync
에 삽입할 수 있습니다.
public async Task SaveTodoItemAsync(TodoItem item, bool isNewItem = false)
{
...
await client.CreateDocumentAsync(collectionLink, item);
...
}
이 메서드는 CreateDocumentAsync
문서를 삽입할 컬렉션을 나타내는 인수와 object
삽입할 문서를 나타내는 인수를 지정 Uri
합니다.
문서 컬렉션에서 문서 바꾸기
문서 컬렉션에서 문서를 메서드로 DocumentClient.ReplaceDocumentAsync
바꿀 수 있습니다.
public async Task SaveTodoItemAsync(TodoItem item, bool isNewItem = false)
{
...
await client.ReplaceDocumentAsync(UriFactory.CreateDocumentUri(Constants.DatabaseName, Constants.CollectionName, item.Id), item);
...
}
이 메서드는 ReplaceDocumentAsync
바꿀 컬렉션의 문서를 나타내는 인수와 업데이트된 object
문서 데이터를 나타내는 인수를 지정 Uri
합니다.
문서 컬렉션에서 문서 삭제
다음 메서드를 사용하여 문서 컬렉션에서 문서를 삭제할 수 있습니다.DocumentClient.DeleteDocumentAsync
public async Task DeleteTodoItemAsync(string id)
{
...
await client.DeleteDocumentAsync(UriFactory.CreateDocumentUri(Constants.DatabaseName, Constants.CollectionName, id));
...
}
이 메서드는 DeleteDocumentAsync
삭제해야 하는 컬렉션의 문서를 나타내는 인수를 지정 Uri
합니다.
문서 컬렉션 삭제
다음 메서드를 사용하여 데이터베이스 DocumentClient.DeleteDocumentCollectionAsync
에서 문서 컬렉션을 삭제할 수 있습니다.
await client.DeleteDocumentCollectionAsync(collectionLink);
이 메서드는 DeleteDocumentCollectionAsync
삭제할 문서 컬렉션을 나타내는 인수를 지정 Uri
합니다. 이 메서드를 호출하면 컬렉션에 저장된 문서도 삭제됩니다.
데이터베이스 삭제
메서드를 사용하여 Azure Cosmos DB 데이터베이스 계정에서 데이터베이스를 삭제할 DocumentClient.DeleteDatabaesAsync
수 있습니다.
await client.DeleteDatabaseAsync(UriFactory.CreateDatabaseUri(Constants.DatabaseName));
이 메서드는 DeleteDatabaseAsync
삭제할 데이터베이스를 나타내는 인수를 지정 Uri
합니다. 이 메서드를 호출하면 데이터베이스에 저장된 문서 컬렉션과 문서 컬렉션에 저장된 문서도 삭제됩니다.
요약
이 문서에서는 Azure Cosmos DB .NET Standard 클라이언트 라이브러리를 사용하여 Azure Cosmos DB 문서 데이터베이스를 애플리케이션에 Xamarin.Forms 통합하는 방법을 설명했습니다. Azure Cosmos DB 문서 데이터베이스는 JSON 문서에 대한 짧은 대기 시간 액세스를 제공하는 NoSQL 데이터베이스로, 원활한 규모와 글로벌 복제본(replica) 필요로 하는 애플리케이션에 대해 빠르고 확장성이 뛰어난 데이터베이스 서비스를 제공합니다.