테스트모델.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
@ToString(callSuper = true)
@SuppressWarnings("serial")
@DynamoDBTable(tableName="TEST_DDB")
public class 테스트모델 extends 공통모델 {
@DynamoDBHashKey(attributeName="hash_key")
@Getter@Setter
private String hk;
@DynamoDBRangeKey(attributeName="sort_key")
@Getter@Setter
private String sk;
// GSI Partition Key 선언
@DynamoDBIndexHashKey(attributeName="GSI01_HK", globalSecondaryIndexName = "GSI_01")
@Getter@Setter
private String gsi01Hk;
// GSI Sort Key 선언
@DynamoDBIndexRangeKey(attributeName="GSI01_SK", globalSecondaryIndexName = "GSI_01")
@Getter@Setter
private String gsi01Sk;
@DynamoDBAttribute(attributeName="mall_nm")
@Getter@Setter
private String mallNm;
@DynamoDBAttribute(attributeName="mdia_cd")
@Getter@Setter
private String mdiaCd;
@DynamoDBAttribute(attributeName = "prir_rnkg")
@Getter@Setter
private String prirRnkg;
@DynamoDBAttribute(attributeName = "tgt_scn_typ_cd")
@Getter@Setter
private String tgtScnTypCd;
@DynamoDBAttribute(attributeName="dp_strt_dttm")
@Setter@Getter(onMethod_= {@DynamoDBTypeConverted( converter = DDBTimestampConverter.class )})
private Timestamp dpStrtDttm;
@DynamoDBAttribute(attributeName="dp_end_dttm")
@Setter@Getter(onMethod_= {@DynamoDBTypeConverted( converter = DDBTimestampConverter.class )})
private Timestamp dpEndDttm;
}
|
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs |
공통모델.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
@SuppressWarnings("serial")
@DynamoDBDocument
public class 공통모델 implements Serializable {
@DynamoDBAttribute(attributeName="reg_dttm")
private Timestamp regDttm;
@DynamoDBAttribute(attributeName="regr_id")
private String regrId;
@DynamoDBAttribute(attributeName="mod_dttm")
private Timestamp modDttm;
@DynamoDBAttribute(attributeName="modr_id")
private String modrId;
public String getRegrStDvsCd() {
return regrStDvsCd;
}
public void setRegrStDvsCd(String regrStDvsCd) {
this.regrStDvsCd = regrStDvsCd;
}
@DynamoDBTypeConverted( converter = DDBTimestampConverter.class )
public Timestamp getRegDttm() {
return regDttm;
}
public void setRegDttm(Timestamp regDttm) {
this.regDttm = regDttm;
}
public String getRegrId() {
return regrId;
}
public void setRegrId(String regrId) {
this.regrId = regrId;
}
public String getModrStDvsCd() {
return modrStDvsCd;
}
public void setModrStDvsCd(String modrStDvsCd) {
this.modrStDvsCd = modrStDvsCd;
}
@DynamoDBTypeConverted( converter = DDBTimestampConverter.class )
public Timestamp getModDttm() {
return modDttm;
}
public void setModDttm(Timestamp modDttm) {
this.modDttm = modDttm;
}
public String getModrId() {
return modrId;
}
public void setModrId(String modrId) {
this.modrId = modrId;
}
@Override
public String toString() {
return "[regrId=" + regrId + ", regDttm=" + regDttm
+ ", modrId=" + modrId + ", modDttm=" + modDttm + "]";
}
}
|
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs |
위 소스는 DynamoDB(줄여서 DDB)의 VO 의 소스코드입니다.
테스트모델.java 는 공통모델.java 를 extends 하고 있으며, 공통모델.java 에서는 여러 모델들에서 쓰일 등록자id, 등록일자 등의
공통 어트리뷰트를 정의하고 있습니다.
모델들에는 @SuppressWarning("serial") 어노테이션을 사용해 컴파일 시에 직렬화 가능 클래스에 대한 누락된 serialVersionUID 필드와
관련된 경고를 억제합니다.
또한 테스트모델에서는 게터와 세터 및 투스트링을 편하게 쓰기 위해 lombok 을 임포트하여 사용하고 있습니다.
따라서 @Getter 와 @Setter 어노테이션을 사용하였습니다.
눈여겨 볼 점은 각 어트리뷰트에 붙어있는 어노테이션의 의미입니다.
@DynamoDBHashKey(attributeName="hash_key") : DDB의 해쉬키에 해당하는 어트리뷰트에 붙이는 어노테이션입니다. 괄호안은 DDB 테이블의 어트리뷰트명 입니다. 각 모델에 필수로 존재하여야 합니다.
@DynamoDBRangeKey(attributeName="sort_key") : DDB의 정렬키에 해당하는 어트리뷰트에 붙이는 어노테이션입니다. 괄호안은 정렬키(소트키) 명 입니다. 정렬키를 따로 쓰지 않아도 되지만 쿼리 검색 시에 성능을 위해 사용해 줍시다. (범위 지정을 통해 쿼리 가능)
@DynamoDBAttribute(attributeName="mall_nm") : DDB의 어트리뷰트에 붙이는 어노테이션입니다. 괄호안은 어트리뷰트명 입니다.
다음은 GSI(글로벌 세컨더리 인덱스)와 관련된 어트리뷰트에서 사용하는 어노테이션입니다.
@DynamoDBIndexHashKey(attributeName="GSI01_HK", globalSecondaryIndexName = "GSI_01") : GSI 의 해쉬키에 붙이는 어노테이션 입니다. 첫번째 파라미터는 해쉬키의 어트리뷰트명, 두번째 파라미터는 어떤 인덱스를 사용할지 명시하는 GSI 명입니다.
@DynamoDBIndexRangeKey(attributeName="GSI01_SK", globalSecondaryIndexName = "GSI_01") : GSI 의 정렬키에 붙이는 어노테이션 입니다. 첫번째 파라미터는 정렬키의 어트리뷰트명, 두번째 파라미터는 어떤 인덱스를 사용할지 명시하는 GSI 명입니다.
그 외에도 유용하게 사용되는 어노테이션은 다음과 같습니다.
@DynamoDBDocument : @DynamoDBTable 과 유사한 기능을 가진 어노테이션입니다. 이 어노테이션이 붙은 클래스는 DDB 의 문서로 나타낼 수 있습니다. @DynamoDBTable 과의 차이점은 테이블명을 기재하지 않아도 된다는 점입니다. 때문에 공통모델에 사용되는 어노테이션입니다.
@DynamoDBTypeConverted( converter = DDBTimestampConverter.class ) : AWS DDB JDK 에서 제공하는 DynamoDBTypeConverter 를 DDBTimestampConverter 를 임플리먼트하여 제공하는 어노테이션입니다.
converter 에 설정해주는 클래스에 따라서 임의로 데이터 매핑을 시켜줍니다.
아래는 DDBTimestampConverter.java 의 코드입니다. 이 클래스를 이용해서 문자열을 타임스탬프로, 타임스탬프를 문자열로 바꿔줄 수 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
public class DDBTimestampConverter implements DynamoDBTypeConverter<String, Timestamp> {
@Override
public String convert(Timestamp object) {
return object.toString();
}
@Override
public Timestamp unconvert(String object) {
return Timestamp.valueOf(object);
}
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs |