Amazon DynamoDB - AWS Mobile SDK

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

Amazon DynamoDB

What is Amazon DynamoDB?

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

핵심 개념

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

테이블

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

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

테이블 작업에 대한 자세한 내용은 DynamoDB의 테이블 작업을 참조하세요.

항목 및 속성

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

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

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

항목 작업에 대한 자세한 내용은 DynamoDB의 항목 작업을 참조하세요.

데이터 유형

Amazon DynamoDB는 다음 데이터 형식을 지원합니다.

  • 스칼라 형식 – 숫자, 문자열, 이진수, 부울 및 null

  • 다중 값 형식 – 문자열 집합, 숫자 집합 및 이진수 집합

  • 문서 형식 – 목록 및 맵

스칼라 데이터 형식, 다중 값 데이터 형식 및 문서 데이터 형식에 대한 자세한 내용은 DynamoDB 데이터 형식을 참조하세요.

기본 키

테이블을 생성할 때는 테이블 이름 외에도 테이블의 기본 키를 지정해야 합니다. 기본 키는 테이블의 각 항목을 나타내는 고유 식별자입니다. 따라서 두 항목이 동일한 키를 가질 수는 없습니다. DynamoDB는 다음과 같이 두 가지 형식의 기본 키를 지원합니다.

  • 해시 기본 키: 기본 키가 한 가지 속성인 해시 속성으로 구성됩니다. DynamoDB는 이 기본 키 속성을 기반으로 정렬되지 않은(unordered) 해시 인덱스를 빌드합니다. 테이블의 각 항목은 해시 키 값을 기준으로 고유 식별됩니다.

  • 해시 및 범위 키: 기본 키가 두 가지 속성으로 구성됩니다. 첫 번째 속성은 해시 속성이고, 두 번째는 범위 속성입니다. DynamoDB는 해시 기본 키 속성을 기반으로 정렬되지 않은(unordered) 해시 인덱스를 빌드하고, 범위 기본 키 속성을 기반으로 정렬된 범위 인덱스를 빌드합니다. 테이블의 각 항목은 해시 키 값을 기준으로 고유 식별됩니다. 두 항목이 동일한 해시 키 값을 가질 수는 있지만 범위 키 값은 서로 달라야 합니다.

보조 인덱스

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

DynamoDB는 로컬 보조 인덱스와 글로벌 보조 인덱스 두 유형의 보조 인덱스를 지원합니다.

  • 로컬 보조 인덱스: 해시 키는 테이블과 같지만 범위 키는 다른 인덱스입니다.

  • 글로벌 보조 인덱스: 해시 및 범위 키가 테이블과 다를 수 있는 인덱스입니다.

테이블당 최대 5개의 글로벌 보조 인덱스 및 5개의 로컬 보조 인덱스를 정의할 수 있습니다. 자세한 내용은 DynamoDB 개발자 안내서의 DynamoDB에서 보조 인덱스를 사용하여 데이터 액세스 향상을 참조하세요.

Query and Scan

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

쿼리

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

샘플 쿼리는 다음을 참조하세요.

쿼리에 대한 자세한 내용은 DynamoDB 개발자 안내서의 쿼리를 참조하세요.

스캔

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

샘플 스캔은 다음을 참조하세요.

스캔에 대한 자세한 내용은 DynamoDB 개발자 안내서의 스캔을 참조하세요.

프로젝트 설정

필수 조건

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

DynamoDB 테이블 생성

테이블을 생성하려면 DynamoDB 콘솔로 이동하여 다음 단계를 수행합니다.

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

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

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

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

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

  6. 읽기 및 쓰기 용량을 원하는 수준으로 설정합니다. 용량 구성에 대한 자세한 내용은 Amazon DynamoDB의 프로비저닝된 처리량을 참조하세요. 계속을 클릭합니다.

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

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

DynamoDB에 대한 권한 설정

애플리케이션에서 DynamoDB를 사용하려면 올바른 권한을 설정해야 합니다. 다음 IAM 정책은 사용자가 ARN으로 정의되는 특정 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 콘솔에서 정책을 수정할 수 있습니다. 앱의 필요에 따라 허용되는 작업을 추가 또는 제거해야 합니다.

IAM 정책에 대한 자세한 내용은 IAM 사용을 참조하세요.

DynamoDB 고유 정책에 대한 자세한 내용은 DynamoDB 개발자 안내서의 IAM을 사용하여 DynamoDB 리소스에 대한 액세스 제어를 참조하세요.

애플리케이션에 DynamoDB 통합

.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를 참조하세요.

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 네임스페이스에서 사용할 수 있습니다.

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

주제