๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐ŸŒฟ Spring/Spring Data DynamoDB

[Spring Data DynamoDB] ํŽ˜์ด์ง• ์ •๋ฆฌ

by Lucy Oh 2024. 8. 3.
'POCHAK'์„ ๊ฐœ๋ฐœํ•˜๋ฉฐ Spring Data DynamoDB๋ฅผ ์‚ฌ์šฉํ•ด๋ณด์•˜๊ณ ,
๊ทธ ๊ณผ์ •์—์„œ ์ƒˆ๋กญ๊ฒŒ ์•Œ๊ฒŒ ๋œ ์ ์„ ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.

โ€ป ์ดํ›„ ํฌ์ฐฉ์€ ์„œ๋น„์Šค ํŠน์„ฑ์ƒ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ DynamoDB์—์„œ MySQL๋กœ ๋ณ€๊ฒฝ ํ›„ ๋‹ค์‹œ ๊ฐœ๋ฐœํ•˜์˜€์Šต๋‹ˆ๋‹ค.

- Spirng Data DynamoDB ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
- POCHAK GitHub Repository

 

DDB์—์„œ ํŽ˜์ด์ง•์ด ํ•„์š”ํ•œ ์ด์œ 

๊ณต์‹ ๋ฌธ์„œ์—๋„ ์–ธ๊ธ‰๋˜์–ด ์žˆ์ง€๋งŒ, DynamoDB์˜ ๋‹จ์ผ ์ฟผ๋ฆฌ ์ž‘์—…์€ ์ตœ๋Œ€ 1MB์˜ ๋ฐ์ดํ„ฐ๋งŒ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ์šฐ๋ฆฌ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํ”„๋กœํ•„ ํƒญ์—์„œ ์ž์‹ ์ด ์ฐํžŒ ๊ฒŒ์‹œ๊ธ€๊ณผ ์ฐ์€ ๊ฒŒ์‹œ๊ธ€์„ ์กฐํšŒํ•  ๋•Œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŽ˜์ด์ง•์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ํŒ๋‹จํ•˜์—ฌ ๋ฆฌํŒฉํ† ๋ง์„ ์ง„ํ–‰ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค!

  • ๋ฌผ๋ก  ์„ฑ๋Šฅ ์ธก๋ฉด๋„ ๊ณ ๋ คํ•ด๋ณด์•˜์„ ๋•Œ, ํŽ˜์ด์ง•์€ ์–ธ์  ๊ฐ€ ํ•ด์•ผ๋˜๋ฆฌ๋ผ ์ƒ๊ฐํ•˜๊ณ  ์žˆ์—ˆ์Œ ..

ํŽ˜์ด์ง• ํ•˜๋Š” ๋ฐฉ๋ฒ• - CLI

๋‹ค์Œ๊ณผ ๊ฐ™์ด page-size๋ฅผ ์ง€์ •ํ•˜๊ณ  ์ฟผ๋ฆฌ๋ฅผ ๋ณด๋‚ด๋ฉด?

aws dynamodb query --table-name Movies \
    --projection-expression "title" \
    --key-condition-expression "#y = :yyyy" \
    --expression-attribute-names '{"#y":"year"}' \
    --expression-attribute-values '{":yyyy":{"N":"1993"}}' \
    --page-size 5 \
    --debug

 

๋งŒ์•ฝ 5๊ฐœ ๊ฒฐ๊ณผ๊ฐ€ ๊ฒฐ๊ณผ ๊ทธ๋ฃน์˜ ์ „๋ถ€๊ฐ€ ์•„๋‹ˆ๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด LastEvaluatedKey๊ฐ€ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.

  • LastEvaluatedKey๋Š” ๋‹ค์Œ Query ์š”์ฒญ์— ๋Œ€ํ•œ ExclusiveStartKey๋กœ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ๋‹ค์Œ ๊ทธ๋ฃน์„ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค!
  • ๋งŒ์•ฝ ๋‹ค์Œ ๊ฒฐ๊ณผ๊ฐ’์ด ์—†์œผ๋ฉด LastEvaluatedKey์— null ๊ฐ’์ด ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.
2017-07-07 11:13:15,603 - MainThread - botocore.parsers - DEBUG - Response body:
b'{"Count":5,"Items":[{"title":{"S":"A Bronx Tale"}},
{"title":{"S":"A Perfect World"}},{"title":{"S":"Addams Family Values"}},
{"title":{"S":"Alive"}},{"title":{"S":"Benny & Joon"}}],
"LastEvaluatedKey":{"year":{"N":"1993"},"title":{"S":"Benny & Joon"}},
"ScannedCount":5}'

ํŽ˜์ด์ง•ํ•˜๊ธฐ - Java

DynamoDBQueryExpression<Publish> query = new DynamoDBQueryExpression<Publish>()
        .withKeyConditionExpression("#PK = :val1 and begins_with(#SK, :val2)")
        .withFilterExpression("#STATUS = :val3")
        .withExpressionAttributeValues(eav)
        .withExpressionAttributeNames(ean)
        .withLimit(12) // paging size
        .withExclusiveStartKey(exclusiveStartKey) // paging ์‹œ์ž‘ ํ‚ค ์„ค์ •
        .withScanIndexForward(false); // desc

 

  • limit : 12๊ฐœ๋กœ ํ•œ์ •
  • exclusiveStartKey : ์‹œ์ž‘ํ‚ค ์„ค์ • | null๋กœ ์„ค์ •ํ•  ๊ฒฝ์šฐ, ์ฒ˜์Œ๋ถ€ํ„ฐ ๊ฐ€์ ธ์˜ด.

exclusiveStartKey๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด Map ํ˜•ํƒœ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Œ.

Map<String, AttributeValue> exclusiveStartKey

์ฐธ๊ณ  ์ž๋ฃŒ

 

 

 

 

๋Œ“๊ธ€