14A. DynamoDB์ ๋ฐ์ดํฐ
14A. DynamoDB์ ๋ฐ์ดํฐ ๊ด๋ จ
DynamoDB๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ DynamoDB์ ๋ฐ์ดํฐ ๋ชจ๋ธ์ ๋จผ์ ์์๋ณด๊ฒ ์ต๋๋ค.
DynamoDB์ ๊ธฐ๋ณธ ๋ฐ์ดํฐ ์ ์ฅ ๊ตฌ์กฐ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ํ ์ด๋ธ(Table): ํ ์ด๋ธ์ ์์ดํ ๋ค์ ๋ชจ์์ ๋๋ค. ๋ค์ด๊ฐ ์ ์๋ ์์ดํ ์ ๊ฐ์๋ ์ ํ์ด ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ํ ์ด๋ธ์ ๊ธฐ๋ณธ ํค(Primary Key)๋ฅผ ๋ฐ๋์ ์ง์ ํด์ผ ํฉ๋๋ค. ๋ฆฌ์ ๋น ์์ฑํ ์ ์๋ ํ ์ด๋ธ์ ์ต๋ ๊ฐ์๋ 256๊ฐ์ด๋ฉฐ AWS์ ์์ฒญํ์ฌ ๋ ๋๋ฆด ์ ์์ต๋๋ค.
- ์์ดํ (Item): ์์ดํ ์ ์์ฑ(Attribute)๋ค์ ๋ชจ์์ ๋๋ค. ๋ค์ด๊ฐ ์ ์๋ ์์ฑ์ ๊ฐ์๋ ์ ํ์ด ์์ต๋๋ค. ๋จ ์์ดํ ์ ํฌ๊ธฐ๋ ์์ฑ ์ด๋ฆ๊ณผ ๊ฐ์ ํฌํจํ์ฌ 64KB๊น์ง์ ๋๋ค. ๊ธฐ๋ณธ ํค๋ ํ์๋ก ํฌํจํ๊ณ ์์ด์ผ ํ๋ฉฐ ๋ณตํฉํค์ ๊ธฐํ ์์ฑ์ ๊ฐ์ง๋๋ค.
- ์์ฑ(Attribute): ์์ฑ์ ํค-๊ฐ(Key-Value) ๋ฐฉ์์ ๋๋ค. ํค๋ ๋ฌธ์์ด์ด๋ผ์ผ ํฉ๋๋ค.
์์ฑ์ด ์ง์ํ๋ ๊ฐ ๋ฐ์ดํฐ ํ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ค์นผ๋ผ ๋ฐ์ดํฐ ํ์(Scalar data types): ์ซ์(Number), ๋ฌธ์์ด(String), ๋ฐ์ด๋๋ฆฌ(Binary)๊ฐ ์์ต๋๋ค.
- ์ซ์: ์ ์์ ์ค์๋ฅผ ์ง์ํ๋ฉฐ ์ค์๋ ์์์ ์ดํ 38์๋ฆฌ, 10-128์์ 10+126๊น์ง์ ๋๋ค. ์ซ์๋ 0์ ํธ๋ฆผ(Trim)ํฉ๋๋ค. ์) 0.3 โ .3, 00300 โ 300
- ๋ฌธ์์ด: UTF8 ํ์์ด๋ฉฐ ๋์๋ฅผ ๋น๊ตํ ๋์๋ ์์คํค(ASCII) ์ฝ๋ ๊ธฐ์ค์ผ๋ก ํฉ๋๋ค.
- ๋ฐ์ด๋๋ฆฌ: ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๋ BASE64 ํ์์ผ๋ก ์ธ์ฝ๋ฉํ์ฌ ์ ์ฅํ๋ฉด ๋ฉ๋๋ค. ๋์๋ฅผ ๋น๊ตํ ๋์๋ ๊ฐ ๋ฐ์ดํธ๋ฅผ ๋ถํธ ์๋(unsigned) ์ ์๋ก ์ทจ๊ธํฉ๋๋ค.
- ๋ค์ค ๊ฐ ํ์(Multi-valued types): ์ค์นผ๋ผ ๋ฐ์ดํฐ ํ์์ ๋ฐฐ์ด ํํ์ ๋๋ค. ์ซ์ ์ธํธ(Number Set), ๋ฌธ์์ด ์ธํธ(String Set), ๋ฐ์ด๋๋ฆฌ ์ธํธ(Binary Set)๊ฐ ์์ต๋๋ค. ๋ค์ค ๊ฐ ํ์์ ๋ค์ด๊ฐ๋ ๊ฐ์ ์ค๋ณต๋ ์ ์์ผ๋ฉฐ ๊ฐ์ด ํ๋๋ผ๋ ๋ค์ด๊ฐ ์์ด์ผ ํฉ๋๋ค. ๊ฐ๋ค์ ์ ๋ ฌ๋์ง ์์ผ๋ฉฐ ์ ๋ ฌ ์์๋ ์ ์ฅ๋์ง ์์ต๋๋ค. ๋ค์ค ๊ฐ ํ์์ ๊ธฐ๋ณธ ํค๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
์์ฑ์ ๊ฐ์ NULL์ด๋ ๋น ๋ฌธ์์ด์ ์ ์ฅํ ์ ์์ต๋๋ค.
DynamoDB์์ ๊ฒ์์ ํ๋ ค๋ฉด ๊ธฐ๋ณธ ํคPrimary Key๋ก ์ธ๋ฑ์คIndex๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ๊ธฐ๋ณธ ํค๋ ํ ์ด๋ธ์ ์์ฑํ ๋ ๋ฐ๋์ ์ง์ ํด์ผ ํ๋ฉฐ ์ด ๊ธฐ๋ณธ ํค๋ก ์์ฑ๋๋ ์ธ๋ฑ์ค๋ฅผ ํ ์ด๋ธ ์ธ๋ฑ์ค๋ผ๊ณ ํฉ๋๋ค. DynamoDB๊ฐ ์ง์ํ๋ ๊ธฐ๋ณธ ํค ํ์์ ๋ ๊ฐ์ง์ ๋๋ค.
- ํด์(Hash) ํ์ ๊ธฐ๋ณธ ํค: ์์ฑ ํ๋๋ฅผ ๊ธฐ๋ณธ ํค๋ก ์ฌ์ฉํฉ๋๋ค. ๊ธฐ๋ณธ ํค์ ๊ฐ์ ์ค์นผ๋ผ ๋ฐ์ดํฐ ํ์๋ง ๊ฐ๋ฅํฉ๋๋ค. ๋ค์ค ๊ฐ ํ์์ ์ง์ํ์ง ์์ต๋๋ค.
- ํด์์ ๋ฒ์(Range) ํ์ ๊ธฐ๋ณธ ํค: ์์ฑ ๋ ๊ฐ๋ฅผ ๊ธฐ๋ณธ ํค๋ก ์ฌ์ฉํฉ๋๋ค.(๋ณตํฉํค) ์ฒซ ๋ฒ์งธ ์์ฑ์ ํด์ ๊ธฐ๋ณธ ํค๋ก ์ฌ์ฉํ๊ณ ๋ ๋ฒ์งธ ์์ฑ์ ๋ฒ์ ๊ธฐ๋ณธ ํค๋ก ์ฌ์ฉํ์ฌ ๋ ๊ฐ์ง๋ฅผ ๋ณตํฉ์ ์ผ๋ก ์ฌ์ฉํ๋ ๋ฐฉ์์ ๋๋ค.
ํด์ ๊ธฐ๋ณธ ํค๋ ์ผ์นEqual ๋ฐฉ์ ๊ฒ์๋ง ์ง์ํ๋ฉฐ ๋ฒ์ ๊ธฐ๋ณธ ํค๋ ์ผ์น, ๋ถ๋ฑํธ, ํฌํจ, ~๋ก ์์ ๋ฑ์ ๊ฒ์์ ์ง์ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ํด์ ๊ธฐ๋ณธ ํค ์์ฑ ๊ฐ์ ์ต๋ ํฌ๊ธฐ๋ 2048 ๋ฐ์ดํธ์ด๋ฉฐ ๋ฒ์ ๊ธฐ๋ณธ ํค ์์ฑ ๊ฐ์ ์ต๋ ํฌ๊ธฐ๋ 1024 ๋ฐ์ดํธ์ ๋๋ค.
DynamoDB๋ ๊ธฐ๋ณธ ํค๋ก ์์ฑํ๋ ํ ์ด๋ธ ์ธ๋ฑ์ค ์ด์ธ์๋ ๋ณด์กฐ ์ธ๋ฑ์คSecondary Index๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ๊ธฐ๋ณธ ํค๋ก ์์ฑํ ์ธ๋ฑ์ค ํ๋๋ง์ผ๋ก๋ ๊ฒ์ ๊ธฐ๋ฅ์ด ๋ถ์กฑํ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์๊ฐ ์ํ๋ ์์ฑ์ผ๋ก ๋ณด์กฐ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ์ฌ ๊ฒ์์ ํ์ฉํ ์ ์์ต๋๋ค. ์ด ๋ณด์กฐ ์ธ๋ฑ์ค๋ ์ฌ์ฉ์ด ๋น๋ฒํ๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ์ ์ํด ์ฝ๊ธฐ/์ฐ๊ธฐ ์ฉ๋ ์ ๋์ ๋ฐ๋ก ์ค์ ํ ์ ์์ต๋๋ค.
- ๋ก์ปฌ ๋ณด์กฐ ์ธ๋ฑ์ค(Local Secondary Index): ํด์ ํค๋ ํ ์ด๋ธ ์ธ๋ฑ์ค์ ํด์ ๊ธฐ๋ณธ ํค์ ๊ฐ๊ณ , ๋ฒ์ ํค๋ ๋ค๋ฅด๊ฒ ์ค์ ํ ๊ฒ์ ๋๋ค. ํ ์ด๋ธ๋น 5๊ฐ๊น์ง ์์ฑํ ์ ์์ต๋๋ค. ๋ก์ปฌ ๋ณด์กฐ ์ธ๋ฑ์ค๋ ํ ์ด๋ธ์ ์์ฑํ ๋ ํจ๊ป ์์ฑํด์ผ ํ๋ฉฐ ํ ์ด๋ธ์ด ์์ฑ๋ ์ดํ์๋ ์ถ๊ฐ, ์์ , ์ญ์ ๋ฅผ ํ ์ ์์ต๋๋ค(๋ก์ปฌ ๋ณด์กฐ ์ธ๋ฑ์ค ์ถ๊ฐ, ์์ , ์ญ์ ๊ธฐ๋ฅ ์ถ์ ์์ ). ๋ํ, ๋ก์ปฌ ๋ณด์กฐ ์ธ๋ฑ์ค๋ ํ ์ด๋ธ์์ ํด์ ๊ธฐ๋ณธ ํค์ ๋ฒ์ ๊ธฐ๋ณธ ํค๋ฅผ ์ฌ์ฉํ ๋๋ง ์์ฑํ ์ ์์ต๋๋ค.
- ๊ธ๋ก๋ฒ ๋ณด์กฐ ์ธ๋ฑ์ค(Global Secondary Index): ํด์ ํค์ ๋ฒ์ ํค ๋ชจ๋ ํ ์ด๋ธ ์ธ๋ฑ์ค์ ๋ค๋ฅด๊ฒ ์ค์ ํ ๊ฒ์ ๋๋ค. ๋ฒ์ ํค๋ ์๋ตํ ์ ์์ต๋๋ค. ํ ์ด๋ธ๋น 5๊ฐ๊น์ง ์์ฑํ ์ ์์ต๋๋ค. ๊ธ๋ก๋ฒ ๋ณด์กฐ ์ธ๋ฑ์ค๋ ํ ์ด๋ธ์ ์์ฑํ ๋ ํจ๊ป ์์ฑํด์ผ ํ๋ฉฐ ํ ์ด๋ธ์ด ์์ฑ๋ ์ดํ์๋ ์ถ๊ฐ, ์์ , ์ญ์ ๋ฅผ ํ ์ ์์ต๋๋ค.
DynamoDB๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ๋ Eventually Consistent Read์ Strongly Consistent Read๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- Eventually Consistent Read(๊ธฐ๋ณธ): ์ฝ๊ธฐ ์ฒ๋ฆฌ๋(Read Throughput)์ ์ต๋ํํ์ง๋ง ์ฝ์ ๋ฐ์ดํฐ๊ฐ ์ต๊ทผ ์๋ฃ๋ ์ฐ๊ธฐ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ํ์ง ๋ชปํ์ ์๋ ์์ต๋๋ค. ์ฐ๊ธฐ๊ฐ ๋ฐ์ดํฐ์ ๋ชจ๋ ๋ณต์ฌ๋ณธ์ ๋ฐ์๋๋ ๊ฒ์ 1์ด๋ด์ ์ด๋ฃจ์ด์ง๋๋ค. ์ต์ ๋ฐ์ดํฐ๋ฅผ ์ป์ผ๋ ค๋ฉด ์งง์ ์๊ฐ ๋ด์ ์ฝ๊ธฐ๋ฅผ ๋ฐ๋ณตํด์ผ ํฉ๋๋ค.
- Strongly Consistent Read: ์ต๊ทผ ์๋ฃ๋ ์ฐ๊ธฐ ๊ฒฐ๊ณผ๊ฐ ๋ชจ๋ ๋ฐ์๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
ํ๋ก๋น์ ๋๋ ์ฒ๋ฆฌ๋Provisioned Throughput์ ์ฌ์ฉ์๊ฐ ์ํ๋ ์์น๋ฅผ ์ง์ ํ๋ฉด DynamoDB๊ฐ ์์์ ์ง์ ๋ ์์น๋งํผ ์ฒ๋ฆฌ๋์ ์ ๊ณตํด์ฃผ๋ ๊ฒ์ ๋งํฉ๋๋ค.
- ํ์ํ ์ฝ๊ธฐ ์ฉ๋ ์ ๋(Read Capacity Units): ์ด๋น ์ฝ์ ์์ดํ ์ x KB ๋จ์ ์์ดํ ํฌ๊ธฐ(๊ทผ์ฌ์น ๋ฐ์ฌ๋ฆผ) (Eventually Consistent Read๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ด๋น ์ฝ์ ์์ดํ ์ฉ๋์ ๋ ๋ฐฐ๊ฐ๋ฉ๋๋ค.)
- ํ์ํ ์ฐ๊ธฐ ์ฉ๋ ์ ๋(Write Capacity Units): ์ด๋น ์ด ์์ดํ ์ x KB ๋จ์ ์์ดํ ํฌ๊ธฐ(๊ทผ์ฌ์น ๋ฐ์ฌ๋ฆผ)
์
- 512๋ฐ์ดํธ(1KB๋ก ๋ฐ์ฌ๋ฆผ ๋จ)๋ฅผ ์ด๋น ๊ฐ ํญ๋ชฉ์ ์ฝ์ผ๋ฉด(์ฐ๋ฉด),
- 1.5KB(2KB๋ก ๋ฐ์ฌ๋ฆผ ๋จ)๋ฅผ ์ด๋น ๊ฐ ํญ๋ชฉ์ ์ฝ์ผ๋ฉด(์ฐ๋ฉด),
Strongly Consistent Read๋ 1000 ์ฝ๊ธฐ ์ฉ๋ ์ ๋์ผ๋ก 1KB ์ง๋ฆฌ ์์ดํ ์ ์ด๋น 1000๋ฒ ์ฝ์ ์ ์์ผ๋ฉฐ Eventually Consistent Read๋ 500 ์ฝ๊ธฐ ์ฉ๋ ์ ๋์ผ๋ก 1KB ์ง๋ฆฌ ์์ดํ ์ 1000๋ฒ ์ฝ์ ์ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ฝ๊ธฐ ์ฉ๋์ ์ ๋ ์๋ API ํธ์ถ ์๊ฐ ์๋ ์ด๋น ์ฝ์ ์์ดํ ์๋ก ๊ฒฐ์ ๋ฉ๋๋ค. 500 ์ ๋์ ์ฝ๋๋ค๊ณ ํ๋ฉด 1KB ์ง๋ฆฌ ์์ดํ ์ GetItem์ผ๋ก 500๋ฒ ํธ์ถํ๋ ๊ฒ๊ณผ, BatchGetItem์ผ๋ก ์์ดํ 10๊ฐ์ฉ 50๋ฒ ํธ์ถํ๋ ๊ฒ์ ๋์ผํฉ๋๋ค.
DynamoDB์ ๋ฐ์ดํฐ ์กฐํ ๋ฐฉ๋ฒ์ ๋ ๊ฐ์ง์ ๋๋ค. ๋ ๊ฐ์ง ๋ชจ๋ ํ ๋ฒ์ ์กฐํํ ์ ์๋ ์ฉ๋์ 1MB์ ๋๋ค.
- Scan: ์กฐ๊ฑด ์์ด ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
- Query: ํด์ (๊ธฐ๋ณธ)ํค์ ํน์ ๊ฐ์ ์ง์ ํ๊ณ , ๋ฒ์ (๊ธฐ๋ณธ)ํค์ ์กฐ๊ฑด์ ์ง์ ํ์ฌ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ต๋๋ค. ๋ฒ์ (๊ธฐ๋ณธ)ํค์ ์กฐ๊ฑด์ ์ง์ ํ๋ ๊ฒ์ ์๋ตํ ์ ์์ต๋๋ค.
DynamoDB์ ์ ์ฝ ์กฐ๊ฑด
DynamoDB์ ๊ธฐ์ ์ ์ ์ฝ ๋ฐ ํ๊ณ(Limit)์ ๋ํด์๋ ๋ค์ ๋งํฌ๋ฅผ ์ฐธ์กฐํ๊ธฐ ๋ฐ๋๋๋ค.