DynamoDB์ ๊ตฌ์กฐ
๋ค์ด๋๋ชจ๋ ๋ถ์ฐ DB ํ๊ฒฝ์ ์์ด์ ์ค์ํ ์ ๋ฐ์ ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ
์ค ํ๋๋ค.
๊ทธ ๊ฐ๋ต์ ์ธ ๊ตฌ์กฐ์ ๋ํด์ ์ ๋ฆฌํด๋ณธ๋ค.
์ญ์ฌ
DynamoDB๋ ์ฒ์๋ถํฐ ์๋น์ค๋ก ๊ณต๊ฐํ๋ ค๊ณ ๋ง๋ ๊ฒ ์๋๋ผ, ์๋ง์กด์์ ๋ด๋ถ ์์คํ
๊ด๋ฆฌ์ฉ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ ๊ณ ๋ํํ๋ ๊ฒ์ด ์ด์ฉ๋ค๋ณด๋ ๊ณต๊ฐ ์๋น์ค๊ฐ ๋ ๊ฒ์ด๋ค.
์๋ง์กด๋ ์ฒ์์๋ RDB๋ฅผ ์ฐ๋ค๊ฐ, ๋์ค์๋ ํ๋ง๋ค ๊ฐ๋ฒผ์ด Dynamo์ ํ๋กํ ํ์
- KV DB๋ฅผ ๋จ์ผ ๋
ธ๋๋ก ๋์์ ๊ตฌ์ฑํ๊ณค ํ์๋ค. ๊ทธ๋ฌ๋ค๊ฐ ๋งค๋ฒ ์ค์นํ๊ณ ๊ตฌ์ฑํ๋๊ฒ ๋ถํธํ๋๊น ์ด๋์ ๋ ์ฎ๋ค๋ณด๋ ๋ถ์ฐ DB๊ฐ ํ์ํ ๊ฒ์ด๋ค.
์ด๊ฒ AWS ์๋น์ค๋ก์ ์ถ์๋๊ฑด 2012๋ ์ด์ง๋ง, ๊ทธ ์ด์ ๋ถํฐ ์ด๋ ์ ๋ ๋ด๋ถ์ ์ผ๋ก ์์ฑํด์ ์ฌ์ฉํ๊ธฐ๋ ํ์ ๊ฒ์ด๋ค. ํ์ฐธ ์ ์ธ 2007๋ ์ ์ค๊ณ๋ฅผ ์ด๋ ์ ๋ ๋ง์น๊ณ ์ด๋ก ์ ๊ธฐ๋ฐ์ "DynamoDB ๋ฐฑ์"๋ก ๊ณต๊ฐํ๋ค. ์ง๊ธ๋ ์์ ๋กญ๊ฒ ์ฝ์ ์ ์๋ค.
๊ฒ๋ค๊ฐ DynamoDB ์์ฒด๋ ์คํ์์ค๊ฐ ์๋์ง๋ง DynamoDB ๊ฐ๋ฐ์๋ค์ด ์คํ์์ค ํ๋๋ ๋ง์ด ํ๊ณ ํด์ ์ ๋ฐ์ ์ธ ๋ถ์ฐ DB ํ๊ฒฝ์ ํฐ ์ํฅ์ ๋ผ์ณค๋ค.
๋ํ์ ์ผ๋ก CassandraDB๊ฐ DynamoDB์ ์์ด๋์ด๋ฅผ ์๋น์ ๊ฐ์ ธ๊ฐ์ ๋ง๋ค์ด์ง ์คํ์์ค DB๋ค.
์ธ๋ฑ์ค ๊ตฌ์กฐ: LSM ํธ๋ฆฌ
CassandraDB๋ฅผ ํฌํจํ NoSQL DB๋ค์ด ์ ํต์ ์ธ RDB๋ค๊ณผ ์ฐจ๋ณํ๋๋ ๋ถ๋ถ์ด ์ธ๋ฑ์ค ๊ตฌ์กฐ๋ค.
LSM ๊ธฐ๋ฐ์ ์ธ๋ฑ์ค ์์คํ ์ ์ฌ์ฉํ๊ณ , ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ RDB ๋๋นํด์ write ์ฑ๋ฅ, ๊ทธ ์ค์์๋ append(insert) ์ฑ๋ฅ์ด ๋งค์ฐ ๋ฐ์ด๋๋ค.
์์ธํ ์๋ฆฌ๋ ๊ตฌ์กฐ๋ ๋ณ๋ ํฌ์คํธ๋ฅผ ์ฐธ์กฐํ๋ค.
https://blog.naver.com/sssang97/223232181952
ํ ์ด๋ธ ๊ตฌ์กฐ
DynamoDB๋ ๋จ์ํ Key-Value ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ผ์, ์คํค๋ง๋ฅผ ์๋ฐํ๊ฒ ์ ์ํ์ง๋ ์๊ณ ์ด๋ค.
์ผ๋ฐ ๊ฐ๋ค์ ๊ทธ๋๊ทธ๋ ์๋ฌด๋ ๊ฒ๋ ์ค์
๋ฃ์ ์ ์๊ณ , ์ค์ํ๊ฑด ํํฐ์
ํค์ ์ ๋ ฌ ํค๋ค. ์ด๊ฑด ์ฌ์ ์ ์ ์ํด์ผ ํ๋ค.
https://medium.com/rate-labs/%EC%95%84-%ED%95%B4%EB%B4%90-dynamodb-%EB%93%A4%EC%96%B4%EA%B0%84%EB%8B%A4-f8da282bc625
ํํฐ์
ํค๋ ๊ฐ์ฅ ๊ธฐ๋ณธ์ด ๋๋ ํค๋ก, ์ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ด๋ค ํํฐ์
์ ์ ์ฅํ ์ง๋ฅผ ๊ฒฐ์ ํ๋ค.
ํํฐ์
ํค๋ง ์ฌ์ฉํ๊ณ ์ ๋ ฌํค๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค๋ฉด ํํฐ์
ํค๊ฐ ๋ฐ์ดํฐ์ ์ ์ผ์ฑ์ ๋ณด์ฅํ๋ค.
ํํฐ์ ํค์ ์ ๋ ฌํค๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ์๋ ํํฐ์ ํค+์ ๋ ฌํค์ ์กฐํฉ์ผ๋ก ๋ฐ์ดํฐ ์ ์ผ์ฑ์ด ๋ณด์ฅ๋๋ค.
๋ฐ์ดํฐ๋ฅผ ํ์ํ ๋๋ ํญ์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋ ํํฐ์ ์ ์ฐพ๊ณ -> ํํฐ์ ์์ ์ ๋ ฌ ํค๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค์บ์ ํ๊ธฐ ๋๋ฌธ์ ํํฐ์ ํค+์ ๋ ฌํค๊ฐ ํญ์ ์กฐ๊ฑด์ ํฌํจ๋๋ ๊ฒ์ด ์ด์์ ์ธ ์ฌ์ฉ ๋ฐฉ์์ด๋ค.
ํ
์ด๋ธ ์ฌ์ฉ ์ค๊ณ ๊ด๋ จํด์๋ ๋ณ๋ ํฌ์คํธ๋ฅผ ์ฐธ์กฐํ๋ค.
https://blog.naver.com/sssang97/223680577129
CAP
https://blog.naver.com/sssang97/223115732041
DynamoDB๋ multi master ๊ตฌ์กฐ๋ก ์ผ๊ด์ฑ์ ํฌ์ํ๋ ๋์ , ๋งค์ฐ ๋์ ๊ฐ์ฉ์ฑ๊ณผ ์ฐ๊ธฐ/์ฝ๊ธฐ ํ์ฅ๋ฅ๋ ฅ์ ๋ฌ์ฑํ ์์คํ
์ด๋ค.
๊ทธ๋์ ์ผ๋ฐ์ ์ผ๋ก ์ฝ๊ธฐ๋ฅผ ํด์ ๊ฐ์ ๊ฐ์ ธ์ค๋๋ผ๋ ๊ทธ๊ฒ ์ต์ ๊ฐ์ด ์๋ ์๋ ์๋ค.
ํ์ง๋ง ๊ฐ๋ ฅํ ์ผ๊ด์ฑ ์ต์ ConsistentRead๋ฅผ ์ฌ์ฉํด์ ์ฝ๊ธฐ๋ฅผ ์์ฒญํ๋ค๋ฉด ์ต์ ๊ฐ์ ๊ฐ์ ธ์ค๋๋ก ํ ์ ์๋ค. ๋์ ์ฝ๊ธฐ ๋น์ฉ ๋จ์๊ฐ 2๋ฐฐ๋ก ๊ณผ๊ธ๋๋ค.
ํธ๋์ญ์
DynamoDB์๋ ์์ธ๋ก ํธ๋์ญ์ ๋จ์๊ฐ ์ ๊ณต๋๋ค.
TransactWriteItems API๋ฅผ ์ฌ์ฉํ๋ฉด ์ต๋ 100๊ฐ์ ์ฐ๊ธฐ ์์
์ ํ๋ฒ์ ๋ฌถ์ด์ ์์์ ์ผ๋ก ์ฒ๋ฆฌ๋๊ฒ ํ ์ ์๋ค. ์ฌ๋ฌ ํ
์ด๋ธ์ ๋์์ ๋ ๋ฆฌ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค.
https://docs.aws.amazon.com/ko_kr/amazondynamodb/latest/developerguide/transaction-apis.html
DynamoDB์ ๋ถ์ฐ ํธ๋์ญ์
์ 2๋จ๊ณ ์ปค๋ฐ์ ์์ฉํด์ ๋ง๋ค์ด์ก๋ค.
https://blog.naver.com/sssang97/223465481384
ํธ๋์ญ์ ์ฒ๋ฆฌ๋ ํต์์ ์ผ๋ก ๊ธฐ์กด ์ฐ๊ธฐ/์ฝ๊ธฐ์ ๋น๊ตํด์ 2๋ฐฐ ์ ๋์ ์๊ธ ๋จ์๊ฐ ๋ถ๊ณผ๋๋ค๊ณ ๋ณด๋ฉด ๋๋ค.
์ด๊ฑด ๊ฒฝ์์์ธ ์นด์ฐ๋๋ผ์ ๋นํด ์ฐ์๋ฅผ ๊ฐ์ง๋ ๋ถ๋ถ์ด๋ค. ์นด์ฐ๋๋ผ๋ ํธ๋์ญ์ ๋จ์๊ฐ ์๋ค.
๋์ ์ฐ๊ธฐ ์ฒ๋ฆฌ
DynamoDB์์ ๋์์ ๋์ผ ๋ฐ์ดํฐ์ ๋ํด์ ์์ ์ ์๋ํ๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น?
DynamoDB๋ ์๊ฐ๊ฐ, ํ์์คํฌํ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ต์ ์ ๊ฐ๋ง์ ๋ฐ์ํ๊ณ ์์ ๊ฐ์ ๋ฒ๋ฆฌ๋ ๋ฐฉ์์ ์ทจํ๋ค.
๊ทผ๋ฐ ๊ตฌ๊ธ์ฒ๋ผ ์์์๊ณ ๋ฌ๊ณ ์๋๋ฒ์์ ๋ค ๊ฒ ์๋๋ผ์ ๋ฏธ์ธํ ์๊ฐ ์ค์ฐจ๋ก ์ธํด์ ๋จผ์ ๋ค์ด์จ ์์ ์ด ๋ฐ์๋ ์๋ ์๋ค๋๊ฒ ๋จ์ ์ด๋ค.
๋์ ์ฒ๋ฆฌ๋ฅผ ์๋ฐํ๊ฒ ์ฒ๋ฆฌํ๊ณ ์ถ๋ค๋ฉด ๋๊ด์ ๋ฝ์ ์กฐ๊ฑด์ Update ๊ธฐ๋ฐ์ผ๋ก ์ง์ ๊ตฌํํด์ผ ํ๋ค.
์๋ฒ๋ฆฌ์ค ๊ตฌ์กฐ
DynamoDB๋ ์จ๋๋งจ๋ ๋ชจ๋๋ก ์ฌ์ฉํ๋ฉด ์ด๊ธฐ ๋น์ฉ์ด ๋งค์ฐ ๋ฎ๊ณ , ๊ฝค ์ ๋ ดํ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
์ด๋ฐ ๋น์ฉ ํจ์จ์ฑ์ ์ด๋ป๊ฒ ๋์ค๋ ๊ฑธ๊น?
์ฌ์ค ์ด๊ฒ๋ Lambda ๋ฑ๊ณผ ๋น์ทํ ๋ฐฉ์์ผ๋ก ๋ฆฌ์์ค ํ์ฉ๋๋ฅผ ๋์ด๋ ๊ฑฐ๋ผ๊ณ ๋ณด๋ฉด ๋๋ค.
๊ทธ๋์ ํ๋์ ๋ฌผ๋ฆฌ ์ฅ๋น์ ์ฌ๋ฌ๋ช
์ ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ฒจ๋ฃ๋๋ค. ๋น์ ์ด ๋ฐฉ๊ธ ๋ฃ์ DynamoDB์ ๋ฐ์ดํฐ๋ ๋ค๋ฅธ ์ฌ์ฉ์์ ๊ฒ๋ค๊ณผ ์์ฌ์์ ์ ์๋ค.
์ผ๊ด๋ ํด์ฑ?
๋ถ์ฐDB์์ ๊ฐ์ฅ ์ค์ํ ๊ฒ ์ค ํ๋๊ฐ ๋ ์ง์์ ์ผ๋ก ๋ ธ๋๋ฅผ ์ถ๊ฐํ๊ณ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฐฐํ๋ ๊ฒ์ด๋ค.
DynamoDB์ ์ด๊ธฐ ๋ฒ์ ์์๋ ์ผ๊ด๋ ํด์ฑ ๋งค์ปค๋์ฆ์ ์ฌ์ฉํด์ ์ง์์ ์ผ๋ก ๋
ธ๋๊ฐ ์ถ๊ฐ๋๋ ์ํฉ์์๋ ์ต๋ํ ๊ณ ๋ฅด๊ฒ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฐฐํ๊ณ , ๋ฐ์ดํฐ์ ์ด๋์ ์ต์ํํ์๋ค.
https://blog.naver.com/sssang97/223457713545
ํ์ง๋ง ์๋ฐํ๊ฒ ๋งํด์, ์๋น์ค๋ก์ ์์ฑ๋ AWS DynamoDB์์๋ ์ด๋ฌํ ๋ฐฉ์์ ์ฌ์ฉํ์ง ์๋๋ค. ๊ฐ๊ฐ์ ๋ง์ดํฌ๋ก์๋น์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋น๊ต์ ๋์จํ๊ฒ ์ฐ๊ฒฐ๋์ด์๊ธฐ ๋๋ฌธ์ด๋ค.
์คํ ๋ฆฌ์ง ๋ ธ๋
DynamoDB์์ ๊ฐ์ฅ ๊ทผ๊ฐ์ด ๋๋ ๋ฐ๋ฐ๋ฅ์ "์คํ ๋ฆฌ์ง ๋
ธ๋" ๋จ์๋ค.
์ด๊ฑด ๋ง์ด ๋
ธ๋์ง, ์ฌ์ค ํ๋์ ํด๋ฌ์คํฐ๋ค.
์ฌ๊ธฐ์๋ ์ฐ๊ธฐ๋ฅผ ๋ด๋นํ๋ master ๋ ธ๋ ํ๋, ์ฝ๊ธฐ๋ฅผ ๋ด๋นํ๋ slave ๋ ธ๋๊ฐ ๋์ด ๋ค์ด์๊ณ , ๊ฐ๊ฐ์ ๋ ธ๋๋ฅผ ๊ณ ๊ฐ์ฉ์ฑ์ ์ํด ๋ณ๋์ ๊ฐ์ฉ์์ญ์ ํ๋ก๋น์ ๋๋๋ค.
ํฉ์ ์๊ณ ๋ฆฌ์ฆ์ Paxos๋ฅผ ์ฌ์ฉํ๊ณ , master ๋
ธ๋์ ๋ฌธ์ ๊ฐ ์๊ธดํ๋ฉด ๋ค๋ฅธ ๋
ธ๋๋ฅผ master๋ก ์ ์ถํ๋ค.
๋ณต์ ๋ ํญ์ ๋น๋๊ธฐ์ ์ด๊ธฐ ๋๋ฌธ์ด Slave๋ ๋ฎ์ ์ผ๊ด์ฑ, ์ต์ข
์ผ๊ด์ฑ๋ง์ ์ ๊ณตํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ ์ ๊ฐ API๋ฅผ ์ฌ์ฉํด์ DynamoDB์ ์ ๊ทผํ๋ค๋ฉด, ๋ด๋ถ ๋ผ์ฐํฐ๋ฅผ ๊ฑฐ์ณ์ ์คํ ๋ฆฌ์ง ๋ ธ๋๋ฅผ ์ ํํ๊ณ DB ์์ ์ ์ฒ๋ฆฌํ๊ฒ ๋๋ ๊ฒ์ด๋ค.

๊ฒฝ์์: CassandraDB
CassandraDB๋ ์ ์ด์ DynamoDB ๊ฐ๋ฐ์๊ฐ ๋ง๋ ๊ฒ์ด๊ธฐ๋ ํ๊ณ , ์ ๋ฐ์ ์ธ ๊ตฌ์กฐ์ ๋ชฉํ์ ์์ด์ DynamoDB์ ๋ง์ ๋ถ๋ถ์ ๊ณต์ ํ๋ค. ๊ฐ์ด ์์๋๋ฉด ์ข์ ๊ฒ์ด๋ค.
https://blog.naver.com/sssang97/223706344662
์ฐธ์กฐ
https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBMapper.OptimisticLocking.html
https://cassandra.apache.org/doc/latest/cassandra/architecture/dynamo.html
https://www.scylladb.com/learn/dynamodb/introduction-to-dynamodb/
https://docs.aws.amazon.com/ko_kr/amazondynamodb/latest/developerguide/transaction-apis.html#transaction-capacity-handling
https://medium.com/rate-labs/%EC%95%84-%ED%95%B4%EB%B4%90-dynamodb-%EB%93%A4%EC%96%B4%EA%B0%84%EB%8B%A4-f8da282bc625
https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.Partitions.html
https://www.usenix.org/system/files/atc23-idziorek.pdf
https://medium.com/@syedshamail3/understanding-the-internal-architecture-of-amazon-dynamodb-e9dccb8be8de
https://www.usenix.org/conference/atc22/presentation/elhemali