DynamoDB에 사용되는 Java 주석 - Amazon DynamoDB

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

DynamoDB에 사용되는 Java 주석

이 단원에서는 클래스 및 속성을 Amazon DynamoDB의 테이블 및 속성으로 매핑하는 데 사용되는 주석을 설명합니다.

해당 Javadoc 설명서는 AWS SDK for Java API 참조주석 유형 요약 단원을 참조하세요.

참고

다음 주석에서 DynamoDBTableDynamoDBHashKey만 필요합니다.

DynamoDBAttribute

속성을 테이블 속성으로 매핑합니다. 기본적으로 각 클래스 속성은 이름이 동일한 항목 속성으로 매핑됩니다. 하지만 이름이 다를 경우에는 이 주석을 사용하여 클래스 속성을 테이블 속성으로 매핑할 수 있습니다. 아래 Java 코드 조각에서는 DynamoDBAttributeBookAuthors 속성을 테이블의 속성 이름으로 매핑하고 있습니다.Authors

@DynamoDBAttribute(attributeName = "Authors") public List<String> getBookAuthors() { return BookAuthors; } public void setBookAuthors(List<String> BookAuthors) { this.BookAuthors = BookAuthors; }

DynamoDBMapper가 객체를 테이블에 저장할 때는 Authors를 속성 이름으로 사용합니다.

DynamoDB AutoGeneratedKey

파티션 키 또는 정렬 키 속성을 자동 생성되는 것으로 표시합니다. DynamoDBMapper는 이러한 속성을 저장할 때 임의의 UUID를 생성합니다. String 속성만 자동 생성된 키로 표시될 수 있습니다.

다음 예제에서는 자동 생성된 키를 사용하는 방법을 보여줍니다.

@DynamoDBTable(tableName="AutoGeneratedKeysExample") public class AutoGeneratedKeys { private String id; private String payload; @DynamoDBHashKey(attributeName = "Id") @DynamoDBAutoGeneratedKey public String getId() { return id; } public void setId(String id) { this.id = id; } @DynamoDBAttribute(attributeName="payload") public String getPayload() { return this.payload; } public void setPayload(String payload) { this.payload = payload; } public static void saveItem() { AutoGeneratedKeys obj = new AutoGeneratedKeys(); obj.setPayload("abc123"); // id field is null at this point DynamoDBMapper mapper = new DynamoDBMapper(dynamoDBClient); mapper.save(obj); System.out.println("Object was saved with id " + obj.getId()); } }

DynamoDB AutoGeneratedTimestamp

자동으로 타임스탬프를 생성합니다.

@DynamoDBAutoGeneratedTimestamp(strategy=DynamoDBAutoGenerateStrategy.ALWAYS) public Date getLastUpdatedDate() { return lastUpdatedDate; } public void setLastUpdatedDate(Date lastUpdatedDate) { this.lastUpdatedDate = lastUpdatedDate; }

원하는 경우 전략 속성을 제공하여 자동 생성 전략을 정의할 수 있습니다. 기본값은 ALWAYS입니다.

DynamoDBDocument

클래스를 Amazon DynamoDB 문서로 직렬화할 수 있음을 나타냅니다.

예를 들어, JSON 문서를 Map 형식(M)의 DynamoDB 속성으로 매핑하려는 경우 다음 코드 예제에서는 Map 유형의 중첩된 속성(Pictures)을 포함하는 항목을 정의합니다.

public class ProductCatalogItem { private Integer id; //partition key private Pictures pictures; /* ...other attributes omitted... */ @DynamoDBHashKey(attributeName="Id") public Integer getId() { return id;} public void setId(Integer id) {this.id = id;} @DynamoDBAttribute(attributeName="Pictures") public Pictures getPictures() { return pictures;} public void setPictures(Pictures pictures) {this.pictures = pictures;} // Additional properties go here. @DynamoDBDocument public static class Pictures { private String frontView; private String rearView; private String sideView; @DynamoDBAttribute(attributeName = "FrontView") public String getFrontView() { return frontView; } public void setFrontView(String frontView) { this.frontView = frontView; } @DynamoDBAttribute(attributeName = "RearView") public String getRearView() { return rearView; } public void setRearView(String rearView) { this.rearView = rearView; } @DynamoDBAttribute(attributeName = "SideView") public String getSideView() { return sideView; } public void setSideView(String sideView) { this.sideView = sideView; } } }

그러면 다음 예제와 같이 새 ProductCatalog 항목을 Pictures와 함께 저장할 수 있습니다.

ProductCatalogItem item = new ProductCatalogItem(); Pictures pix = new Pictures(); pix.setFrontView("http://example.com/products/123_front.jpg"); pix.setRearView("http://example.com/products/123_rear.jpg"); pix.setSideView("http://example.com/products/123_left_side.jpg"); item.setPictures(pix); item.setId(123); mapper.save(item);

결과로 얻은 ProductCatalog 항목은 다음과 같을 것입니다(JSON 형식).

{ "Id" : 123 "Pictures" : { "SideView" : "http://example.com/products/123_left_side.jpg", "RearView" : "http://example.com/products/123_rear.jpg", "FrontView" : "http://example.com/products/123_front.jpg" } }

DynamoDB HashKey

클래스 속성을 테이블의 파티션 키 속성으로 매핑합니다. 속성은 스칼라 문자열, 숫자 또는 이진수 형식 중 하나여야 합니다. 속성은 컬렉션 형식일 수 없습니다.

ProductCatalog 테이블이 있고 이 테이블에서 기본 키로 Id를 사용하는 경우 다음 Java 코드에서는 CatalogItem 클래스를 정의하고 @DynamoDBHashKey 태그를 사용하여 해당 Id 속성을 ProductCatalog 테이블의 기본 키로 매핑합니다.

@DynamoDBTable(tableName="ProductCatalog") public class CatalogItem { private Integer Id; @DynamoDBHashKey(attributeName="Id") public Integer getId() { return Id; } public void setId(Integer Id) { this.Id = Id; } // Additional properties go here. }

DynamoDBIgnore

DynamoDBMapper 인스턴스에게 연동되어 있는 속성을 무시하라고 지시합니다. 그러면 데이터를 테이블에 저장할 때도 DynamoDBMapper는 이 속성을 테이블에 저장하지 않습니다.

모델링되지 않은 속성의 클래스 필드 또는 getter 메서드에 적용됩니다. 클래스 필드에 주석이 직접 적용되는 경우 해당 getter 및 setter를 동일한 클래스에 선언해야 합니다.

DynamoDB IndexHashKey

클래스 속성을 글로벌 보조 인텍스의 파티션 키로 매핑합니다. 속성은 스칼라 문자열, 숫자 또는 이진수 형식 중 하나여야 합니다. 속성은 컬렉션 형식일 수 없습니다.

이 주석은 글로벌 보조 인덱스를 Query해야 하는 경우 사용합니다. 이때는 인덱스 이름(globalSecondaryIndexName)을 지정해야 합니다. 클래스 속성 이름이 인덱스 파티션 키와 다른 경우 인덱스 속성 이름(attributeName)도 지정해야 합니다.

DynamoDB IndexRangeKey

클래스 속성을 글로벌 보조 인덱스 또는 로컬 보조 인덱스의 정렬 키로 매핑합니다. 속성은 스칼라 문자열, 숫자 또는 이진수 형식 중 하나여야 합니다. 속성은 컬렉션 형식일 수 없습니다.

이 주석은 로컬 보조 주석 또는 글로벌 보조 주석을 Query해야 하고 인덱스 정렬 키를 사용해 결과를 구체화하고 싶을 때 사용합니다. 이때는 인덱스 이름(globalSecondaryIndexName 또는 localSecondaryIndexName)을 지정해야 합니다. 그리고 클래스 속성 이름과 인덱스 정렬 키가 다른 경우에는 인덱스 속성 이름(attributeName)도 지정해야 합니다.

DynamoDB RangeKey

클래스 속성을 테이블의 정렬 키 속성으로 매핑합니다. 속성은 스칼라 문자열, 숫자 또는 이진수 형식 중 하나여야 합니다. 속성은 컬렉션 형식일 수 없습니다.

기본 키가 복합형(파티션 키 및 정렬 키)일 경우 이 태그를 사용하여 클래스 필드를 정렬 키로 매핑할 수 있습니다. 예를 들어, 포럼 스레드에 대한 회신을 저장하는 Reply 테이블이 있는 경우 스레드마다 다수의 댓글을 가질 수 있습니다. 따라서 이 테이블의 기본 키는 ThreadIdReplyDateTime입니다. ThreadId는 파티션 키이고, ReplyDateTime은 정렬 키입니다.

다음은 Reply 클래스를 정의하여 Reply 테이블에 매핑하는 Java 코드입니다. 코드 조각을 보면 @DynamoDBHashKey@DynamoDBRangeKey 태그를 사용하여 기본 키에 매핑되는 클래스 속성을 식별하고 있습니다.

@DynamoDBTable(tableName="Reply") public class Reply { private Integer id; private String replyDateTime; @DynamoDBHashKey(attributeName="Id") public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } @DynamoDBRangeKey(attributeName="ReplyDateTime") public String getReplyDateTime() { return replyDateTime; } public void setReplyDateTime(String replyDateTime) { this.replyDateTime = replyDateTime; } // Additional properties go here. }

DynamoDBTable

DynamoDB의 대상 테이블을 식별합니다. 예를 들어, 다음 Java 코드는 Developer 클래스를 정의하여 DynamoDB의 People 테이블에 매핑합니다.

@DynamoDBTable(tableName="People") public class Developer { ...}

@DynamoDBTable 주석은 상속이 가능합니다. Developer 클래스에서 상속되는 새 클래스도 People 테이블로 매핑됩니다. 예를 들어 Lead 클래스를 Developer 클래스에서 상속하여 생성한다고 가정하겠습니다. Developer 클래스를 People 테이블로 매핑했기 때문에 Lead 클래스 객체도 동일한 테이블에 저장됩니다.

@DynamoDBTable 또한 재정의가 가능합니다. 기본적으로 Developer 클래스에서 상속되는 새 클래스는 모두 동일한 People 테이블로 매핑됩니다. 하지만 이 기본 매핑을 재정의할 수도 있습니다. 예를 들어, Developer 클래스에서 상속되는 클래스를 생성하는 경우 다음 Java 코드 예제와 같이 @DynamoDBTable 주석을 추가하여 해당 클래스를 다른 테이블로 명시적으로 매핑할 수 있습니다.

@DynamoDBTable(tableName="Managers") public class Manager extends Developer { ...}

DynamoDB TypeConverted

속성을 사용자 지정 유형 변환기를 사용하는 것으로 표시하는 주석 DynamoDBTypeConverter에 추가 속성을 전달하기 위한 사용자 정의 주석에 작성할 수 있습니다.

DynamoDBTypeConverter 인터페이스를 사용하면 자체적인 임의 데이터 형식을 DynamoDB에서 기본적으로 지원되는 데이터 형식으로 매핑할 수 있습니다. 자세한 정보는 임의 데이터 매핑을 참조하세요.

DynamoDBTyped

표준 속성 형식 바인딩을 재정의하는 주석 표준 형식에서 해당 형식에 기본 속성 바인딩을 적용할 경우 주석이 필요하지 않습니다.

DynamoDB VersionAttribute

낙관적 잠금 버전 번호를 저장하는 클래스 속성을 식별합니다. DynamoDBMapper는 새로운 항목을 저장할 때 버전 번호를 이 속성에 할당한 후 항목을 업데이트할 때마다 버전 번호를 올립니다. 여기서는 숫자 스칼라 형식만 지원됩니다. 데이터 형식에 대한 자세한 내용은 데이터 타입 단원을 참조하세요. 버전 관리에 대한 자세한 내용은 버전 번호를 이용한 낙관적 잠금 섹션을 참조하십시오.