DynamoDB에서 작동하는 프로그래밍 인터페이스
각각의 AWS SDK
다음 단원에서는 AWS SDK for Java를 예제로 삼아 사용 가능한 몇 가지 인터페이스를 중점적으로 살펴봅니다. (AWS SDK에 따라 일부 인터페이스는 사용할 수 없습니다.)
DynamoDB에서 작동하는 하위 수준 인터페이스
모든 언어별 AWS SDK는 하위 수준 DynamoDB API 요청과 매우 비슷한 메서드를 사용하여 Amazon DynamoDB용 하위 수준 인터페이스를 제공합니다.
경우에 따라 데이터 형식 서술자(예: 문자열의 경우 N
, 숫자의 경우 S
)을(를) 사용하여 속성의 데이터 형식을 식별해야 합니다.
참고
하위 수준 인터페이스는 모든 언어별 AWS SDK에서 제공됩니다.
다음 Java 프로그램은 AWS SDK for Java의 하위 수준 인터페이스를 사용합니다.
import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.dynamodb.model.DynamoDbException; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; import software.amazon.awssdk.services.dynamodb.model.AttributeValue; import software.amazon.awssdk.services.dynamodb.model.GetItemRequest; import java.util.HashMap; import java.util.Map; import java.util.Set; /** * Before running this Java V2 code example, set up your development * environment, including your credentials. * * For more information, see the following documentation topic: * * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html * * To get an item from an Amazon DynamoDB table using the AWS SDK for Java V2, * its better practice to use the * Enhanced Client, see the EnhancedGetItem example. */ public class GetItem { public static void main(String[] args) { final String usage = """ Usage: <tableName> <key> <keyVal> Where: tableName - The Amazon DynamoDB table from which an item is retrieved (for example, Music3).\s key - The key used in the Amazon DynamoDB table (for example, Artist).\s keyval - The key value that represents the item to get (for example, Famous Band). """; if (args.length != 3) { System.out.println(usage); System.exit(1); } String tableName = args[0]; String key = args[1]; String keyVal = args[2]; System.out.format("Retrieving item \"%s\" from \"%s\"\n", keyVal, tableName); Region region = Region.US_EAST_1; DynamoDbClient ddb = DynamoDbClient.builder() .region(region) .build(); getDynamoDBItem(ddb, tableName, key, keyVal); ddb.close(); } public static void getDynamoDBItem(DynamoDbClient ddb, String tableName, String key, String keyVal) { HashMap<String, AttributeValue> keyToGet = new HashMap<>(); keyToGet.put(key, AttributeValue.builder() .s(keyVal) .build()); GetItemRequest request = GetItemRequest.builder() .key(keyToGet) .tableName(tableName) .build(); try { // If there is no matching item, GetItem does not return any data. Map<String, AttributeValue> returnedItem = ddb.getItem(request).item(); if (returnedItem.isEmpty()) System.out.format("No item found with the key %s!\n", key); else { Set<String> keys = returnedItem.keySet(); System.out.println("Amazon DynamoDB table attributes: \n"); for (String key1 : keys) { System.out.format("%s: %s\n", key1, returnedItem.get(key1).toString()); } } } catch (DynamoDbException e) { System.err.println(e.getMessage()); System.exit(1); } } }
DynamoDB에서 작동하는 문서 인터페이스
많은 AWS SDK는 테이블과 인덱스에서 데이터 영역 작업(생성, 읽기, 업데이트, 삭제)을 수행할 수 있는 문서 인터페이스를 제공합니다. 문서 인터페이스를 사용하면 데이터 형식 서술자를 지정할 필요가 없습니다. 데이터 형식은 데이터 자체의 의미론으로 암시됩니다. 이러한 AWS SDK는 JSON 문서를 기본 Amazon DynamoDB 데이터 형식으로, 또 그 반대로 쉽게 변환하는 메서드도 제공합니다.
참고
문서 인터페이스는 AWS SDK for Java
다음 Java 프로그램은 AWS SDK for Java의 문서 인터페이스를 사용합니다. 이 프로그램은 Music
테이블을 나타내는 Table
객체를 생성한 다음 해당 객체에게 GetItem
을 사용하여 노래를 검색하라고 요청합니다. 그런 다음 프로그램은 해당 노래가 발표된 연도를 인쇄합니다.
com.amazonaws.services.dynamodbv2.document.DynamoDB
클래스는 DynamoDB 문서 인터페이스를 구현합니다. DynamoDB
가 어떻게 하위 수준 클라이언트(AmazonDynamoDB
)를 둘러싼 래퍼 역할을 하는지에 유의하세요.
package com.amazonaws.codesamples.gsg; import com.amazonaws.services.dynamodbv2.AmazonDynamoDB; import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClientBuilder; import com.amazonaws.services.dynamodbv2.document.DynamoDB; import com.amazonaws.services.dynamodbv2.document.GetItemOutcome; import com.amazonaws.services.dynamodbv2.document.Table; public class MusicDocumentDemo { public static void main(String[] args) { AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard().build(); DynamoDB docClient = new DynamoDB(client); Table table = docClient.getTable("Music"); GetItemOutcome outcome = table.getItemOutcome( "Artist", "No One You Know", "SongTitle", "Call Me Today"); int year = outcome.getItem().getInt("Year"); System.out.println("The song was released in " + year); } }
DynamoDB에서 작동하는 객체 지속성 인터페이스
일부 AWS SDK는 직접 데이터 영역 작업을 수행하지 않는 객체 지속성 인터페이스를 제공합니다. 그 대신 Amazon DynamoDB 테이블 및 인덱스의 항목을 나타내는 객체를 생성하고 이러한 객체와 상호 작용합니다. 이를 통해 데이터베이스 중심 코드가 아니라 객체 중심 코드를 만들 수 있습니다.
참고
객체 지속성 인터페이스는 Java 및 .NET용 AWS SDK에서 제공됩니다. 자세한 내용은 DynamoDB의 DynamoDB에 대한 높은 수준의 프로그래밍 인터페이스를 참조하세요.
import com.example.dynamodb.Customer; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClient; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbTable; import software.amazon.awssdk.enhanced.dynamodb.Key; import software.amazon.awssdk.enhanced.dynamodb.TableSchema; import software.amazon.awssdk.enhanced.dynamodb.model.GetItemEnhancedRequest; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; import software.amazon.awssdk.services.dynamodb.model.DynamoDbException;
import com.example.dynamodb.Customer; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClient; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbTable; import software.amazon.awssdk.enhanced.dynamodb.Key; import software.amazon.awssdk.enhanced.dynamodb.TableSchema; import software.amazon.awssdk.enhanced.dynamodb.model.GetItemEnhancedRequest; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; import software.amazon.awssdk.services.dynamodb.model.DynamoDbException; /* * Before running this code example, create an Amazon DynamoDB table named Customer with these columns: * - id - the id of the record that is the key. Be sure one of the id values is `id101` * - custName - the customer name * - email - the email value * - registrationDate - an instant value when the item was added to the table. These values * need to be in the form of `YYYY-MM-DDTHH:mm:ssZ`, such as 2022-07-11T00:00:00Z * * Also, ensure that you have set up your development environment, including your credentials. * * For information, see this documentation topic: * * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html */ public class EnhancedGetItem { public static void main(String[] args) { Region region = Region.US_EAST_1; DynamoDbClient ddb = DynamoDbClient.builder() .region(region) .build(); DynamoDbEnhancedClient enhancedClient = DynamoDbEnhancedClient.builder() .dynamoDbClient(ddb) .build(); getItem(enhancedClient); ddb.close(); } public static String getItem(DynamoDbEnhancedClient enhancedClient) { Customer result = null; try { DynamoDbTable<Customer> table = enhancedClient.table("Customer", TableSchema.fromBean(Customer.class)); Key key = Key.builder() .partitionValue("id101").sortValue("tred@noserver.com") .build(); // Get the item by using the key. result = table.getItem( (GetItemEnhancedRequest.Builder requestBuilder) -> requestBuilder.key(key)); System.out.println("******* The description value is " + result.getCustName()); } catch (DynamoDbException e) { System.err.println(e.getMessage()); System.exit(1); } return result.getCustName(); } }