-
AWS DynamoDB Document Client란?서버/AWS 2020. 3. 4. 12:53
Node.js로 AWS DynamoDB의 API를 사용할 때, 마주하는 게 있다.
그것은 Document Client인데, docClient라는 객체의 메서드인 get과 dynamoDB의 메서드인 getItem이 같은 일을 수행할 수 있다는 걸 보고 이 둘의 차이가 무엇일까 하는 의문이 들어 글을 작성하게 되었다.
먼저 공식 문서에서 제공하는 설명을 들어보자.
DynamoDB Document Client는 속성 값의 개념을 추상화하여 항목 작업을 간소화합니다. 이 추상화는 입력 파라미터로 제공되는 기본 JavaScript 유형에 주석을 달고, 주석이 달린 응답 데이터를 기본 JavaScript 유형으로 변환합니다.
음.. 감이 잘 오지가 않는다.. 이번엔 API의 문서 클래스에서 제공하는 설명을 들어보도록 하자.
The document client affords developers the use of native JavaScript types instead of AttributeValues to simplify the JavaScript development experience with Amazon DynamoDB. JavaScript objects passed in as parameters are marshalled into AttributeValue shapes required by Amazon DynamoDB. Responses from DynamoDB are unmarshalled into plain JavaScript objects by the DocumentClient. The DocumentClient, does not accept AttributeValues in favor of native JavaScript types.
JavaScript Type DynamoDB AttributeValue
String S Number N Boolean BOOL null NULL Array L Object M Buffer, File, Blob, ArrayBuffer,
DataView, and JavaScript typed arrays
B 첫 문장이 핵심인데, 즉 DynamoDB의 API를 사용할 때의 경우에 제공했던 Attribute Value가 JavaScript에서 사용하는 데이터 타입과 직관적이지 않기 때문에, 이를 Document Client를 통해 JavaScript의 데이터 타입을 그대로 사용할 수 있도록 한 것이다.
const params = { RequestItems: { /* required */ '<TableName>': { Keys: [ /* required */ { '<AttributeName>': someValue /* "str" | 10 | true | false | null | [1, "a"] | {a: "b"} */, /* '<AttributeName>': ... */ }, /* more items */ ], AttributesToGet: [ 'STRING_VALUE', /* more items */ ], ConsistentRead: true || false, ExpressionAttributeNames: { '<ExpressionAttributeNameVariable>': 'STRING_VALUE', /* '<ExpressionAttributeNameVariable>': ... */ }, ProjectionExpression: 'STRING_VALUE' }, /* '<TableName>': ... */ }, ReturnConsumedCapacity: INDEXES | TOTAL | NONE };
Document Client의 batchGet Operation
const params = { RequestItems: { /* required */ '<TableName>': { Keys: [ /* required */ { '<AttributeName>': { /* AttributeValue */ B: Buffer.from('...') || 'STRING_VALUE' /* Strings will be Base-64 encoded on your behalf */, BOOL: true || false, BS: [ Buffer.from('...') || 'STRING_VALUE' /* Strings will be Base-64 encoded on your behalf */, /* more items */ ], L: [ /* recursive AttributeValue */, /* more items */ ], M: { '<AttributeName>': /* recursive AttributeValue */, /* '<AttributeName>': ... */ }, N: 'STRING_VALUE', NS: [ 'STRING_VALUE', /* more items */ ], NULL: true || false, S: 'STRING_VALUE', SS: [ 'STRING_VALUE', /* more items */ ] }, /* '<AttributeName>': ... */ }, /* more items */ ], AttributesToGet: [ 'STRING_VALUE', /* more items */ ], ConsistentRead: true || false, ExpressionAttributeNames: { '<ExpressionAttributeNameVariable>': 'STRING_VALUE', /* '<ExpressionAttributeNameVariable>': ... */ }, ProjectionExpression: 'STRING_VALUE' }, /* '<TableName>': ... */ }, ReturnConsumedCapacity: INDEXES | TOTAL | NONE };
DynamoDB의 batchGetItem Operation
위 두 코드를 비교했을 때, 위의 표현식이 자바스크립트 개발자에게 좀 더 직관적임을 알 수 있다.
즉, 정리하자면 get, delete, query, update 등의 CRUD 작업은 DocumentClient를 사용하자!!
'서버 > AWS' 카테고리의 다른 글
DynamoDB Query 공식 문서 파헤치기 (0) 2020.03.04 AWS IAM(Identity and Access Management) 개념 정리 (0) 2020.03.03 AWS Lambda를 위한 동기/비동기 정리 (0) 2020.03.02