Ver3.0 ๐ Amazon DynamoDB: NoSQL ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง ์๋ฒฝ ๊ฐ์ด๋

๐ Amazon DynamoDB: NoSQL ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง ์๋ฒฝ ๊ฐ์ด๋
๊ด๊ณํ DB์ ํ์ ๊นจ๊ณ ์์ ๋กญ๊ฒ ๋ ์์ค๋ฅด๋ NoSQL ์ธ๊ณ๋ก์ ์ด๋
๐ก ์น๊ตฌ์ผ, ํน์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค๊ณํ๋ค๊ฐ ๋จธ๋ฆฌ ์ํ ๋ ์ ์์ด?
"์ด ํ
์ด๋ธ์ ์ ํ
์ด๋ธ์ด๋ JOINํ๊ณ , ์ธ๋ํค ์ค์ ํ๊ณ , ์ ๊ทํํ๊ณ ..." ์ ํต์ ์ธ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค(RDBMS)๋ฅผ ๋ค๋ฃจ๋ค ๋ณด๋ฉด ๋๋ก๋ ๋๋ฌด ๋ณต์กํ๊ณ ๊ฒฝ์ง๋ ๋๋์ด ๋ค ๋๊ฐ ์์ง. ํนํ ์์ฆ์ฒ๋ผ ๋ฐ์ดํฐ๊ฐ ํญ๋ฐ์ ์ผ๋ก ์ฆ๊ฐํ๊ณ , ์๋น์ค ๊ท๋ชจ๊ฐ ๊ธ๊ฒฉํ ์ปค์ง๋ ์๋์๋ ๋๋์ฑ ๊ทธ๋. ๐
๋ฐ๋ก ์ด๋ฐ ๊ณ ๋ฏผ์ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฑ์ฅํ ๊ฒ NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์ผ. ๊ทธ๋ฆฌ๊ณ ๊ทธ ์ค์์๋ AWS์ DynamoDB๋ ์์ ๊ด๋ฆฌํ ์๋น์ค๋ก ์์ฒญ๋ ํ์ฅ์ฑ๊ณผ ์ฑ๋ฅ์ ์๋ํ์ง. ์ค๋์ ์ด DynamoDB์ ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง์ ๋ํด ์น๊ตฌ์ฒ๋ผ ํธํ๊ฒ ์ด์ผ๊ธฐํด๋ณผ๊ฒ! ๐ฏ
๐จ NoSQL์ด ๋ญ๋ฐ? ์ ํ์ํ ๊ฑฐ์ผ?
๋จผ์ NoSQL์ด ๋ญ์ง๋ถํฐ ์์๋ณด์. NoSQL์ "Not Only SQL"์ ์ฝ์์ผ. ์ฆ, SQL๋ง์ด ๋ต์ ์๋๋ผ๋ ๊ฑฐ์ง. ์ ํต์ ์ธ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๊ฐ์ง ์ ์ฝ์์ ๋ฒ์ด๋ ๋ ์ ์ฐํ๊ณ ํ์ฅ ๊ฐ๋ฅํ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๋ ๊ฑฐ์ผ.
๊ด๊ณํ DB๋ ๋ง์น ์์
์ํธ์ฒ๋ผ ํ๊ณผ ์ด๋ก ๋ฑ๋ฑ ์ ๋ฆฌ๋ ํ
์ด๋ธ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์์ด. ๋ฐ์ดํฐ ๊ฐ์ ๊ด๊ณ๋ฅผ ๋ช
ํํ ์ ์ํ๊ณ , ACID(์์์ฑ, ์ผ๊ด์ฑ, ๊ณ ๋ฆฝ์ฑ, ์ง์์ฑ) ํน์ฑ์ ๋ณด์ฅํ์ง. ์ด๊ฑด ์ํ ๊ฑฐ๋ ๊ฐ์ ๊ณณ์์๋ ์ ๋ง ์ค์ํด. ๐ฐ
ํ์ง๋ง ์์
๋ฏธ๋์ด์ ๊ฒ์๋ฌผ, ์ค์๊ฐ ์ฑํ
๋ฉ์์ง, IoT ์ผ์ ๋ฐ์ดํฐ์ฒ๋ผ ๊ตฌ์กฐ๊ฐ ์ ์ฐํ๊ณ ๋น ๋ฅด๊ฒ ๋ณํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ๋๋? ๊ด๊ณํ DB์ ์๊ฒฉํ ์คํค๋ง๊ฐ ์คํ๋ ค ๋ฐ๋ชฉ์ ์ก์ ์ ์์ด.
๐ NoSQL์ ์ฃผ์ ํน์ง
1. ์ ์ฐํ ์คํค๋ง: ๋ฏธ๋ฆฌ ํ
์ด๋ธ ๊ตฌ์กฐ๋ฅผ ์ ์ํ์ง ์์๋ ๋ผ. ํ์ํ ๋๋ง๋ค ํ๋๋ฅผ ์ถ๊ฐํ ์ ์์ง.
2. ์ํ ํ์ฅ: ์๋ฒ๋ฅผ ์ฌ๋ฌ ๋๋ก ๋๋ ค์ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ด. ์์ง ํ์ฅ(์๋ฒ ์ฑ๋ฅ ์
๊ทธ๋ ์ด๋)๋ณด๋ค ๋น์ฉ ํจ์จ์ ์ด์ผ.
3. ๋์ ์ฑ๋ฅ: ํน์ ์์
์ ์ต์ ํ๋์ด ์์ด์ ์ฝ๊ธฐ/์ฐ๊ธฐ ์๋๊ฐ ๋น ๋ฅด์ง.
4. ๋ถ์ฐ ์ฒ๋ฆฌ: ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ์๋ฒ์ ๋ถ์ฐ ์ ์ฅํด์ ๊ฐ์ฉ์ฑ๊ณผ ๋ด๊ฒฐํจ์ฑ์ ๋์ฌ.
๐ฏ DynamoDB๊ฐ ๋ญ๊ธธ๋?
DynamoDB๋ AWS(Amazon Web Services)์์ ์ ๊ณตํ๋ ์์ ๊ด๋ฆฌํ NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋น์ค์ผ. 2012๋
์ ์ถ์๋์๊ณ , ์๋ง์กด ์์ฒด ์๋น์ค์์๋ ์ฌ์ฉํ ๋งํผ ๊ฒ์ฆ๋ ๊ธฐ์ ์ด์ง. ๐
"์์ ๊ด๋ฆฌํ"์ด๋ผ๋ ๊ฒ ๋ญ๋๊ณ ? ์๋ฒ ๊ด๋ฆฌ, ์ํํธ์จ์ด ํจ์น, ๋ฐฑ์
, ๋ณต์ ๊ฐ์ ๊ท์ฐฎ์ ์์
๋ค์ AWS๊ฐ ๋ค ์์์ ํด์ค๋ค๋ ๊ฑฐ์ผ. ๋๋ ๊ทธ๋ฅ ๋ฐ์ดํฐ ๋ชจ๋ธ๋งํ๊ณ ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ์๋ง ์ง์คํ๋ฉด ๋ผ. ๊ฐ๋ฐ์ ์
์ฅ์์๋ ์ ๋ง ํธํ์ง! ๐
๐ช DynamoDB์ ๊ฐ๋ ฅํ ํน์ง๋ค
โข ๋ฐ๋ฆฌ์ด ๋จ์์ ์๋ต ์๋: ๋ฐ์ดํฐ ์์ด ์๋ฌด๋ฆฌ ๋ง์๋ ์ผ๊ด๋ ์ฑ๋ฅ์ ์ ์งํด.
โข ์๋ ํ์ฅ: ํธ๋ํฝ์ด ์ฆ๊ฐํ๋ฉด ์๋์ผ๋ก ์ฉ๋์ ๋๋ ค์ค. ๋ฐ๋๋ก ์ค์ด๋ค๋ฉด ์ถ์๋ ํด.
โข ๊ธ๋ก๋ฒ ํ
์ด๋ธ: ์ฌ๋ฌ AWS ๋ฆฌ์ ์ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ ํด์ ์ ์ธ๊ณ ์ด๋์๋ ๋น ๋ฅธ ์ ๊ทผ์ด ๊ฐ๋ฅํด.
โข ์๋ฒ๋ฆฌ์ค: ์๋ฒ๋ฅผ ํ๋ก๋น์ ๋ํ๊ฑฐ๋ ๊ด๋ฆฌํ ํ์๊ฐ ์์ด.
โข ๋ณด์: ์ํธํ, IAM ํตํฉ, VPC ์๋ํฌ์ธํธ ๋ฑ ๊ฐ๋ ฅํ ๋ณด์ ๊ธฐ๋ฅ์ ์ ๊ณตํด.
โข ๋ฐฑ์
๋ฐ ๋ณต์: ์๋ ๋ฐฑ์
๊ณผ ํน์ ์์ ๋ณต์(PITR)์ ์ง์ํด.
์ฌ๋ฅ๋ท ๊ฐ์ ํ๋ซํผ์์๋ ์ฌ์ฉ์ ํ๋ ๋ก๊ทธ, ์ค์๊ฐ ์๋ฆผ, ์ฑํ ๋ฉ์์ง ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ DynamoDB๋ก ๊ด๋ฆฌํ๋ฉด ์ ๋ง ํจ์จ์ ์ด์ผ. ํนํ ํธ๋ํฝ์ด ๊ฐ์๊ธฐ ๋ชฐ๋ฆด ๋ ์๋์ผ๋ก ํ์ฅ๋๋๊น ์๋น์ค ์์ ์ฑ๋ ๋์์ง์ง. ๐
๐งฉ DynamoDB์ ํต์ฌ ๊ฐ๋ ์ดํดํ๊ธฐ
DynamoDB๋ฅผ ์ ๋๋ก ํ์ฉํ๋ ค๋ฉด ๋ช ๊ฐ์ง ํต์ฌ ๊ฐ๋ ์ ์ดํดํด์ผ ํด. ๊ด๊ณํ DB์๋ ์ฉ์ด๋ ๋ค๋ฅด๊ณ ๊ฐ๋ ๋ ๋ค๋ฅด๋๊น ์ฒ์์ ์ข ํท๊ฐ๋ฆด ์ ์์ด. ํ๋์ฉ ์ฒ์ฒํ ์์๋ณด์! ๐
DynamoDB์ ํ ์ด๋ธ์ ๊ด๊ณํ DB์ ํ ์ด๋ธ๊ณผ ๋น์ทํ์ง๋ง, ์คํค๋ง๊ฐ ํจ์ฌ ์ ์ฐํด. ํ ์ด๋ธ์ ๋ง๋ค ๋ ํํฐ์ ํค(Partition Key)๋ง ์ ์ํ๋ฉด ๋ผ. ๋๋จธ์ง ์์ฑ๋ค์ ํญ๋ชฉ(Item)์ ์ถ๊ฐํ ๋ ์์ ๋กญ๊ฒ ๋ฃ์ ์ ์์ด.
ํญ๋ชฉ์ ๊ด๊ณํ DB์ ํ(Row)์ ํด๋นํด. ํ๋์ ๋ฐ์ดํฐ ๋ ์ฝ๋๋ผ๊ณ ์๊ฐํ๋ฉด ๋ผ. ๊ฐ ํญ๋ชฉ์ ๊ณ ์ ํ ํค๋ฅผ ๊ฐ์ง๊ณ ์๊ณ , ์ฌ๋ฌ ์์ฑ(Attribute)๋ค๋ก ๊ตฌ์ฑ๋์ด ์์ด. ์ค์ํ ๊ฑด, ๊ฐ์ ํ ์ด๋ธ ์์ ํญ๋ชฉ๋ค์ด๋ผ๋ ์๋ก ๋ค๋ฅธ ์์ฑ์ ๊ฐ์ง ์ ์๋ค๋ ๊ฑฐ์ผ! ๐จ
์์ฑ์ ๊ด๊ณํ DB์ ์ด(Column)๊ณผ ๋น์ทํด. ํ์ง๋ง ๋ชจ๋ ํญ๋ชฉ์ด ๊ฐ์ ์์ฑ์ ๊ฐ์ง ํ์๋ ์์ด. ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์ ํ ์ด๋ธ์์ ์ด๋ค ์ฌ์ฉ์๋ "nickname" ์์ฑ์ด ์๊ณ , ์ด๋ค ์ฌ์ฉ์๋ ์์ ์๋ ์์ง.
DynamoDB์์ ๊ฐ์ฅ ์ค์ํ ๊ฐ๋
์ด์ผ! ๊ธฐ๋ณธ ํค๋ ๋ ๊ฐ์ง ํ์
์ด ์์ด:
1. ํํฐ์
ํค (Partition Key): ๋จ์ ๊ธฐ๋ณธ ํค๋ผ๊ณ ๋ ๋ถ๋ฌ. ํ๋์ ์์ฑ์ผ๋ก๋ง ๊ตฌ์ฑ๋์ด ์์ด. ์ด ํค ๊ฐ์ผ๋ก ๋ฐ์ดํฐ๊ฐ ์ด๋ ํํฐ์
์ ์ ์ฅ๋ ์ง ๊ฒฐ์ ๋ผ. ์๋ฅผ ๋ค์ด ์ฌ์ฉ์ ID๋ฅผ ํํฐ์
ํค๋ก ์ธ ์ ์์ง.
2. ๋ณตํฉ ํค (Composite Key): ํํฐ์
ํค + ์ ๋ ฌ ํค(Sort Key)๋ก ๊ตฌ์ฑ๋ผ. ๊ฐ์ ํํฐ์
ํค๋ฅผ ๊ฐ์ง ํญ๋ชฉ๋ค์ ์ ๋ ฌ ํค๋ก ์ ๋ ฌํด์ ์ ์ฅํด. ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์ ID(ํํฐ์
ํค) + ๊ฒ์๋ฌผ ์์ฑ ์๊ฐ(์ ๋ ฌ ํค)์ผ๋ก ๊ตฌ์ฑํ ์ ์์ด.
โ ๏ธ ์ฃผ์ํ ์ : ๊ธฐ๋ณธ ํค๋ ํ ์ด๋ธ์ ๋ง๋ค ๋ ์ ์ํ๊ณ ๋๋ฉด ๋์ค์ ๋ณ๊ฒฝํ ์ ์์ด! ๊ทธ๋์ ์ฒ์ ์ค๊ณํ ๋ ์ ์คํ๊ฒ ๊ฒฐ์ ํด์ผ ํด. ๋ฐ์ดํฐ ์ ๊ทผ ํจํด์ ์ ๋ถ์ํด์ ๊ฐ์ฅ ์์ฃผ ์กฐํํ๋ ๋ฐฉ์์ ๋ง์ถฐ ํค๋ฅผ ์ค๊ณํ๋ ๊ฒ ์ค์ํด.
| ๊ด๊ณํ DB ์ฉ์ด | DynamoDB ์ฉ์ด | ์ค๋ช |
|---|---|---|
| ํ ์ด๋ธ (Table) | ํ ์ด๋ธ (Table) | ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์ปจํ ์ด๋ |
| ํ (Row) | ํญ๋ชฉ (Item) | ๊ฐ๋ณ ๋ฐ์ดํฐ ๋ ์ฝ๋ |
| ์ด (Column) | ์์ฑ (Attribute) | ๋ฐ์ดํฐ์ ๊ฐ๋ณ ํ๋ |
| ๊ธฐ๋ณธ ํค (Primary Key) | ํํฐ์ ํค / ๋ณตํฉ ํค | ํญ๋ชฉ์ ๊ณ ์ ํ๊ฒ ์๋ณํ๋ ํค |
| ์ธ๋ฑ์ค (Index) | ๋ณด์กฐ ์ธ๋ฑ์ค (Secondary Index) | ๋์ฒด ์ฟผ๋ฆฌ ํจํด์ ์ํ ์ธ๋ฑ์ค |
๐ช ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง์ ํต์ฌ ์์น
์, ์ด์ ๋ณธ๊ฒฉ์ ์ผ๋ก DynamoDB ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง์ ๋ํด ์์๋ณด์! ๊ด๊ณํ DB ๋ชจ๋ธ๋ง๊ณผ๋ ์ ๊ทผ ๋ฐฉ์์ด ์์ ํ ๋ฌ๋ผ. ๊ด๊ณํ DB๋ "๋ฐ์ดํฐ ์ ๊ทํ"๋ฅผ ์ค์ํ์ง๋ง, DynamoDB๋ "์ ๊ทผ ํจํด ์ต์ ํ"๋ฅผ ์ค์ํด. ๐ฏ
๐ DynamoDB ๋ชจ๋ธ๋ง์ ํฉ๊ธ๋ฅ
1. ์ ๊ทผ ํจํด์ ๋จผ์ ํ์
ํ๋ผ: ์ด๋ค ์ฟผ๋ฆฌ๋ฅผ ๊ฐ์ฅ ์์ฃผ ์คํํ ์ง ๋จผ์ ์ ์ํด.
2. ๋ฐ์ดํฐ ์ค๋ณต์ ๋๋ ค์ํ์ง ๋ง๋ผ: ์กฐํ ์ฑ๋ฅ์ ์ํด ๋ฐ์ดํฐ๋ฅผ ์ค๋ณต ์ ์ฅํ๋ ๊ฒ ์ผ๋ฐ์ ์ด์ผ.
3. ๋จ์ผ ํ
์ด๋ธ ์ค๊ณ๋ฅผ ๊ณ ๋ คํ๋ผ: ์ฌ๋ฌ ์ํฐํฐ๋ฅผ ํ๋์ ํ
์ด๋ธ์ ์ ์ฅํ๋ ๋ฐฉ์์ด ํจ์จ์ ์ผ ์ ์์ด.
4. ํํฐ์
ํค ๋ถ์ฐ์ ์ ๊ฒฝ ์จ๋ผ: ๋ฐ์ดํฐ๊ฐ ์ฌ๋ฌ ํํฐ์
์ ๊ณ ๋ฅด๊ฒ ๋ถ์ฐ๋๋๋ก ์ค๊ณํด.
5. ์ฝ๊ธฐ/์ฐ๊ธฐ ๋น์ฉ์ ์ต์ํํ๋ผ: DynamoDB๋ ์ฝ๊ธฐ/์ฐ๊ธฐ ์ฉ๋ ๋จ์๋ก ๊ณผ๊ธ๋๋๊น ํจ์จ์ ์ธ ์ฟผ๋ฆฌ๊ฐ ์ค์ํด.
๋ฐ์ดํฐ ๋ชจ๋ธ๋ง์ ์ฒซ ๋จ๊ณ๋ ์ ํ๋ฆฌ์ผ์ด์
์ด ์ด๋ป๊ฒ ๋ฐ์ดํฐ์ ์ ๊ทผํ ์ง ํ์
ํ๋ ๊ฑฐ์ผ. ์๋ฅผ ๋ค์ด, ์ ์์๊ฑฐ๋ ์ฑ์ ๋ง๋ ๋ค๊ณ ์๊ฐํด๋ณด์:
โข ์ฌ์ฉ์ ID๋ก ์ฌ์ฉ์ ์ ๋ณด ์กฐํ
โข ์ฌ์ฉ์ ID๋ก ํด๋น ์ฌ์ฉ์์ ๋ชจ๋ ์ฃผ๋ฌธ ์กฐํ
โข ์ฃผ๋ฌธ ID๋ก ์ฃผ๋ฌธ ์์ธ ์ ๋ณด ์กฐํ
โข ํน์ ๊ธฐ๊ฐ์ ์ฃผ๋ฌธ ๋ชฉ๋ก ์กฐํ
โข ์ํ ID๋ก ์ํ ์ ๋ณด ์กฐํ
โข ์นดํ
๊ณ ๋ฆฌ๋ณ ์ํ ๋ชฉ๋ก ์กฐํ
์ด๋ฐ ์์ผ๋ก ๋ชจ๋ ์ ๊ทผ ํจํด์ ๋์ดํ ๋ค์, ๊ฐ ํจํด์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ ํ
์ด๋ธ ๊ตฌ์กฐ๋ฅผ ์ค๊ณํ๋ ๊ฑฐ์ผ. ๐
๐ก ํ: ์ ๊ทผ ํจํด์ ๋ฌธ์ํํ ๋๋ ์์ ์ฟผ๋ฆฌ ๋น๋, ์๋ต ์๊ฐ ์๊ตฌ์ฌํญ, ๋ฐ์ดํฐ ํฌ๊ธฐ ๋ฑ๋ ํจ๊ป ๊ธฐ๋กํด๋๋ฉด ์ข์. ๋์ค์ ์ฑ๋ฅ ์ต์ ํํ ๋ ์ ์ฉํ๊ฑฐ๋ !
๐ ํํฐ์ ํค์ ์ ๋ ฌ ํค ์ค๊ณ ์ ๋ต
ํํฐ์ ํค์ ์ ๋ ฌ ํค ์ค๊ณ๋ DynamoDB ๋ชจ๋ธ๋ง์์ ๊ฐ์ฅ ์ค์ํ ๋ถ๋ถ์ด์ผ. ์ด ํค๋ค์ด ๋ฐ์ดํฐ์ ์ ์ฅ ์์น์ ์กฐํ ์ฑ๋ฅ์ ๊ฒฐ์ ํ๊ฑฐ๋ . ์๋ชป ์ค๊ณํ๋ฉด ๋์ค์ ํฐ ๋ฌธ์ ๊ฐ ๋ ์ ์์ด! ๐ฐ
ํํฐ์
ํค๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ํํฐ์
์ ๋ถ์ฐ์ํค๋ ์ญํ ์ ํด. ์ข์ ํํฐ์
ํค๋ ๋ค์ ์กฐ๊ฑด์ ๋ง์กฑํด์ผ ํด:
1. ๋์ ์นด๋๋๋ฆฌํฐ(Cardinality): ๊ณ ์ ํ ๊ฐ์ด ๋ง์์ผ ํด. ์๋ฅผ ๋ค์ด, ์ฑ๋ณ(๋จ/์ฌ)์ ๋์ ํํฐ์
ํค์ผ. ์ฌ์ฉ์ ID๋ ์ข์ ํํฐ์
ํค์ง.
2. ๊ท ๋ฑํ ์ ๊ทผ ํจํด: ํน์ ํํฐ์
์๋ง ์์ฒญ์ด ๋ชฐ๋ฆฌ๋ฉด ์ ๋ผ. ๋ชจ๋ ํํฐ์
์ด ๊ณ ๋ฅด๊ฒ ์ฌ์ฉ๋์ด์ผ ํด.
3. ๋น์ฆ๋์ค ๋ก์ง๊ณผ์ ์ ํฉ์ฑ: ๊ฐ์ฅ ์์ฃผ ์กฐํํ๋ ๋ฐฉ์๊ณผ ์ผ์นํด์ผ ํด.
โ ๏ธ ํซ ํํฐ์ ๋ฌธ์ : ํน์ ํํฐ์ ์ ์ฝ๊ธฐ/์ฐ๊ธฐ๊ฐ ์ง์ค๋๋ฉด "ํซ ํํฐ์ "์ด ๋ฐ์ํด. ์ด๋ฌ๋ฉด ์ ์ฒด ํ ์ด๋ธ์ ์ฒ๋ฆฌ๋์ด ์ ํ๋๊ณ ์ฑ๋ฅ์ด ์ ํ๋ผ. ์๋ฅผ ๋ค์ด, ๋ ์ง๋ฅผ ํํฐ์ ํค๋ก ์ฐ๋ฉด ์ค๋ ๋ ์ง ํํฐ์ ์๋ง ์ฐ๊ธฐ๊ฐ ์ง์ค๋๊ฒ ์ง? ์ด๋ฐ ๊ฑด ํผํด์ผ ํด!
์ ๋ ฌ ํค๋ ๊ฐ์ ํํฐ์
ํค๋ฅผ ๊ฐ์ง ํญ๋ชฉ๋ค์ ์ ๋ ฌํ๋ ๋ฐ ์ฌ์ฉ๋ผ. ์ ๋ ฌ ํค๋ฅผ ์ ํ์ฉํ๋ฉด ๋ฒ์ ์ฟผ๋ฆฌ(Range Query)๋ฅผ ํจ์จ์ ์ผ๋ก ์ํํ ์ ์์ด.
์๋ฅผ ๋ค์ด, ์ฌ์ฉ์์ ํ๋ ๋ก๊ทธ๋ฅผ ์ ์ฅํ๋ค๊ณ ํด๋ณด์:
โข ํํฐ์
ํค: ์ฌ์ฉ์ ID (์: USER#12345)
โข ์ ๋ ฌ ํค: ํ์์คํฌํ (์: 2024-01-15T10:30:00Z)
์ด๋ ๊ฒ ์ค๊ณํ๋ฉด ํน์ ์ฌ์ฉ์์ ํน์ ๊ธฐ๊ฐ ํ๋์ ๋น ๋ฅด๊ฒ ์กฐํํ ์ ์์ด. "USER#12345์ 2024๋
1์ ํ๋"์ ํ ๋ฒ์ ์ฟผ๋ฆฌ๋ก ๊ฐ์ ธ์ฌ ์ ์์ง! ๐
๐ก ๋ณตํฉ ์ ๋ ฌ ํค ํจํด: ์ ๋ ฌ ํค์ ์ฌ๋ฌ ์ ๋ณด๋ฅผ ์กฐํฉํด์ ๋ฃ์ ์ ์์ด. ์๋ฅผ ๋ค์ด "YEAR#2024#MONTH#01#DAY#15" ๊ฐ์ ์์ผ๋ก ๊ณ์ธต์ ๊ตฌ์กฐ๋ฅผ ๋ง๋ค๋ฉด ๋ค์ํ ์์ค์ ๋ฒ์ ์ฟผ๋ฆฌ๊ฐ ๊ฐ๋ฅํด์ ธ.
๐จ ๋จ์ผ ํ ์ด๋ธ ์ค๊ณ ํจํด
DynamoDB์ ๊ณ ๊ธ ํจํด ์ค ํ๋๊ฐ "๋จ์ผ ํ
์ด๋ธ ์ค๊ณ(Single Table Design)"์ผ. ๊ด๊ณํ DB์์๋ ์ํฐํฐ๋ง๋ค ํ
์ด๋ธ์ ๋ง๋ค์ง๋ง, DynamoDB์์๋ ์ฌ๋ฌ ์ํฐํฐ๋ฅผ ํ๋์ ํ
์ด๋ธ์ ์ ์ฅํ๋ ๊ฒ ๋ ํจ์จ์ ์ผ ์ ์์ด. ๐ฒ
"๋ญ? ๊ทธ๊ฒ ๋ฌด์จ ์๋ฆฌ์ผ?"๋ผ๊ณ ์๊ฐํ ์ ์๋๋ฐ, ์๋ฅผ ๋ค์ด ์ค๋ช
ํด๋ณผ๊ฒ.
๐ช ์ ์์๊ฑฐ๋ ์์
๊ด๊ณํ DB๋ผ๋ฉด ์ด๋ ๊ฒ ์ค๊ณํ๊ฒ ์ง:
โข Users ํ
์ด๋ธ
โข Products ํ
์ด๋ธ
โข Orders ํ
์ด๋ธ
โข OrderItems ํ
์ด๋ธ
ํ์ง๋ง DynamoDB์์๋ ์ด ๋ชจ๋ ๊ฑธ ํ๋์ ํ
์ด๋ธ์ ๋ฃ์ ์ ์์ด! ์ด๋ป๊ฒ? ํํฐ์
ํค์ ์ ๋ ฌ ํค๋ฅผ ์๋ฆฌํ๊ฒ ์ค๊ณํ๋ ๊ฑฐ์ผ.
| ํํฐ์ ํค (PK) | ์ ๋ ฌ ํค (SK) | ์ํฐํฐ ํ์ | ์์ฑ ์์ |
|---|---|---|---|
| USER#12345 | PROFILE | ์ฌ์ฉ์ ํ๋กํ | name, email, phone |
| USER#12345 | ORDER#2024-001 | ์ฃผ๋ฌธ | orderDate, totalAmount, status |
| USER#12345 | ORDER#2024-002 | ์ฃผ๋ฌธ | orderDate, totalAmount, status |
| PRODUCT#ABC | METADATA | ์ํ ์ ๋ณด | name, price, category |
| ORDER#2024-001 | ITEM#PRODUCT#ABC | ์ฃผ๋ฌธ ํญ๋ชฉ | quantity, price |
์ด๋ ๊ฒ ์ค๊ณํ๋ฉด:
โข "USER#12345"๋ก ์ฟผ๋ฆฌํ๋ฉด ํด๋น ์ฌ์ฉ์์ ํ๋กํ๊ณผ ๋ชจ๋ ์ฃผ๋ฌธ์ ํ ๋ฒ์ ๊ฐ์ ธ์ฌ ์ ์์ด.
โข "ORDER#2024-001"๋ก ์ฟผ๋ฆฌํ๋ฉด ํด๋น ์ฃผ๋ฌธ์ ๋ชจ๋ ํญ๋ชฉ์ ๊ฐ์ ธ์ฌ ์ ์์ง.
โข JOIN์ด ํ์ ์์ด! ํ ๋ฒ์ ์ฟผ๋ฆฌ๋ก ๊ด๋ จ๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ด. ๐ช
๐ก ๋จ์ผ ํ
์ด๋ธ ์ค๊ณ์ ์ฅ์ :
โข ์ฟผ๋ฆฌ ํ์ ๊ฐ์ โ ๋น์ฉ ์ ๊ฐ
โข ์๋ต ์๋ ํฅ์
โข ํธ๋์ญ์
์ฒ๋ฆฌ ์ฉ์ด
โข ๊ด๋ฆฌ ํฌ์ธํธ ๊ฐ์
ํ์ง๋ง ์ด๊ธฐ ์ค๊ณ๊ฐ ๋ณต์กํ๊ณ , ์ ๊ทผ ํจํด์ด ๋ช
ํํ์ง ์์ผ๋ฉด ์คํ๋ ค ๋
์ด ๋ ์ ์์ด. ์ ์คํ๊ฒ ๊ฒฐ์ ํด์ผ ํด!
๐ ๋ณด์กฐ ์ธ๋ฑ์ค ํ์ฉํ๊ธฐ
๊ธฐ๋ณธ ํค๋ง์ผ๋ก๋ ๋ชจ๋ ์ ๊ทผ ํจํด์ ์ปค๋ฒํ ์ ์์ ๋๊ฐ ์์ด. ์ด๋ด ๋ ์ฌ์ฉํ๋ ๊ฒ ๋ณด์กฐ ์ธ๋ฑ์ค(Secondary Index)์ผ. DynamoDB๋ ๋ ๊ฐ์ง ํ์ ์ ๋ณด์กฐ ์ธ๋ฑ์ค๋ฅผ ์ ๊ณตํด. ๐ฏ
GSI๋ ์์ ํ ๋ค๋ฅธ ํํฐ์
ํค์ ์ ๋ ฌ ํค๋ฅผ ์ฌ์ฉํ ์ ์๋ ์ธ๋ฑ์ค์ผ. ๊ธฐ๋ณธ ํ
์ด๋ธ๊ณผ๋ ๋
๋ฆฝ์ ์ผ๋ก ์๋ํ์ง.
ํน์ง:
โข ๊ธฐ๋ณธ ํ
์ด๋ธ๊ณผ ๋ค๋ฅธ ํค ์คํค๋ง ์ฌ์ฉ ๊ฐ๋ฅ
โข ๋ชจ๋ ํํฐ์
์ ๊ฑธ์ณ ์ฟผ๋ฆฌ ๊ฐ๋ฅ
โข ๋ณ๋์ ์ฝ๊ธฐ/์ฐ๊ธฐ ์ฉ๋ ์ค์
โข ์ต์ข
์ผ๊ด์ฑ(Eventually Consistent) ์ฝ๊ธฐ๋ง ์ง์
โข ํ
์ด๋ธ๋น ์ต๋ 20๊ฐ๊น์ง ์์ฑ ๊ฐ๋ฅ
์๋ฅผ ๋ค์ด, ์ฌ์ฉ์ ํ
์ด๋ธ์์ ์ด๋ฉ์ผ๋ก ์ฌ์ฉ์๋ฅผ ์ฐพ๊ณ ์ถ๋ค๋ฉด? ์ด๋ฉ์ผ์ ํํฐ์
ํค๋ก ํ๋ GSI๋ฅผ ๋ง๋ค๋ฉด ๋ผ!
LSI๋ ๊ธฐ๋ณธ ํ
์ด๋ธ๊ณผ ๊ฐ์ ํํฐ์
ํค๋ฅผ ์ฌ์ฉํ์ง๋ง, ๋ค๋ฅธ ์ ๋ ฌ ํค๋ฅผ ์ฌ์ฉํ๋ ์ธ๋ฑ์ค์ผ.
ํน์ง:
โข ๊ธฐ๋ณธ ํ
์ด๋ธ๊ณผ ๊ฐ์ ํํฐ์
ํค ์ฌ์ฉ
โข ๋ค๋ฅธ ์ ๋ ฌ ํค ์ฌ์ฉ ๊ฐ๋ฅ
โข ๊ฐ๋ ฅํ ์ผ๊ด์ฑ(Strong Consistency) ์ฝ๊ธฐ ์ง์
โข ํ
์ด๋ธ ์์ฑ ์์๋ง ์ ์ ๊ฐ๋ฅ (๋์ค์ ์ถ๊ฐ ๋ถ๊ฐ!)
โข ํ
์ด๋ธ๋น ์ต๋ 5๊ฐ๊น์ง ์์ฑ ๊ฐ๋ฅ
์๋ฅผ ๋ค์ด, ์ฌ์ฉ์์ ๊ฒ์๋ฌผ์ ์์ฑ์ผ ์์ผ๋ก๋ ๋ณด๊ณ , ์กฐํ์ ์์ผ๋ก๋ ๋ณด๊ณ ์ถ๋ค๋ฉด? ์กฐํ์๋ฅผ ์ ๋ ฌ ํค๋ก ํ๋ LSI๋ฅผ ๋ง๋ค๋ฉด ๋ผ!
โ ๏ธ ์ธ๋ฑ์ค ์ฌ์ฉ ์ ์ฃผ์์ฌํญ:
โข ์ธ๋ฑ์ค๋ง๋ค ์ถ๊ฐ ๋น์ฉ์ด ๋ฐ์ํด. ์ฝ๊ธฐ/์ฐ๊ธฐ ์ฉ๋์ ๋ณ๋๋ก ์๋นํ๊ฑฐ๋ .
โข ์ธ๋ฑ์ค๊ฐ ๋ง์ผ๋ฉด ์ฐ๊ธฐ ์ฑ๋ฅ์ด ์ ํ๋ ์ ์์ด. ๋ฐ์ดํฐ๋ฅผ ์ธ ๋๋ง๋ค ๋ชจ๋ ์ธ๋ฑ์ค๋ ์
๋ฐ์ดํธํด์ผ ํ๋๊น.
โข ํ๋ก์ ์
(Projection) ์ ๋ต์ ์ ์ธ์์ผ ํด. ํ์ํ ์์ฑ๋ง ์ธ๋ฑ์ค์ ํฌํจ์ํค๋ฉด ๋น์ฉ์ ์ ์ฝํ ์ ์์ด.
๐ GSI
์ฅ์ :
โข ์์ ํ ์๋ก์ด ์ฟผ๋ฆฌ ํจํด ์ง์
โข ์ ์ฐํ ํค ์ค๊ณ
โข ๋์ค์ ์ถ๊ฐ/์ญ์ ๊ฐ๋ฅ
โข ๋
๋ฆฝ์ ์ธ ์ฉ๋ ๊ด๋ฆฌ
๋จ์ :
โข ์ต์ข
์ผ๊ด์ฑ๋ง ์ง์
โข ์ถ๊ฐ ๋น์ฉ ๋ฐ์
โข ์ฐ๊ธฐ ์ง์ฐ ๊ฐ๋ฅ์ฑ
๐ LSI
์ฅ์ :
โข ๊ฐ๋ ฅํ ์ผ๊ด์ฑ ์ง์
โข ๊ฐ์ ํํฐ์
๋ด ๋น ๋ฅธ ์ฟผ๋ฆฌ
โข ๊ธฐ๋ณธ ํ
์ด๋ธ ์ฉ๋ ๊ณต์
๋จ์ :
โข ํ
์ด๋ธ ์์ฑ ์์๋ง ์ ์ ๊ฐ๋ฅ
โข ํํฐ์
ํค ๋ณ๊ฒฝ ๋ถ๊ฐ
โข 10GB ํํฐ์
ํฌ๊ธฐ ์ ํ
โข ์ต๋ 5๊ฐ๊น์ง๋ง ์์ฑ ๊ฐ๋ฅ
๐พ ๋ฐ์ดํฐ ํ์ ๊ณผ ์์ฑ ์ค๊ณ
DynamoDB๋ ๋ค์ํ ๋ฐ์ดํฐ ํ์ ์ ์ง์ํด. ๊ฐ ํ์ ์ ํน์ฑ์ ์ดํดํ๊ณ ์ ์ ํ ํ์ฉํ๋ฉด ๋ ํจ์จ์ ์ธ ๋ชจ๋ธ๋ง์ด ๊ฐ๋ฅํด. ๐
๐จ DynamoDB ๋ฐ์ดํฐ ํ์
์ค์นผ๋ผ ํ์
(Scalar Types):
โข String (S): ํ
์คํธ ๋ฐ์ดํฐ. UTF-8 ์ธ์ฝ๋ฉ. ์ต๋ 400KB.
โข Number (N): ์ซ์ ๋ฐ์ดํฐ. ์ ์๋ ๋ถ๋์์์ . ์ต๋ 38์๋ฆฌ ์ ๋ฐ๋.
โข Binary (B): ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ. ์ด๋ฏธ์ง, ์์ถ ํ์ผ ๋ฑ.
โข Boolean (BOOL): true ๋๋ false.
โข Null (NULL): null ๊ฐ.
๋ฌธ์ ํ์
(Document Types):
โข List (L): ์์๊ฐ ์๋ ๊ฐ๋ค์ ๋ฐฐ์ด. ๋ค๋ฅธ ํ์
ํผํฉ ๊ฐ๋ฅ.
โข Map (M): ํค-๊ฐ ์์ ์งํฉ. ์ค์ฒฉ๋ ๊ตฌ์กฐ ํํ ๊ฐ๋ฅ.
์งํฉ ํ์
(Set Types):
โข String Set (SS): ๊ณ ์ ํ ๋ฌธ์์ด๋ค์ ์งํฉ.
โข Number Set (NS): ๊ณ ์ ํ ์ซ์๋ค์ ์งํฉ.
โข Binary Set (BS): ๊ณ ์ ํ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๋ค์ ์งํฉ.
1. ์์ฑ ์ด๋ฆ์ ์งง๊ฒ: DynamoDB๋ ์์ฑ ์ด๋ฆ๋ ์ ์ฅ ๊ณต๊ฐ์ ์ฐจ์งํด. ๊ธด ์ด๋ฆ๋ณด๋ค๋ ์งง์ ์ฝ์ด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ ์ข์. ์๋ฅผ ๋ค์ด "userEmailAddress" ๋์ "email"์ ์ฐ๋ ๊ฑฐ์ง.
2. ์ค์ฒฉ ๊ตฌ์กฐ ํ์ฉ: Map ํ์
์ ์ฌ์ฉํ๋ฉด ๋ณต์กํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ํํํ ์ ์์ด. JSON์ฒ๋ผ ์ค์ฒฉ๋ ๊ฐ์ฒด๋ฅผ ์ ์ฅํ ์ ์์ง.
3. ๋ฆฌ์คํธ๋ ์ ์คํ๊ฒ: ๋ฆฌ์คํธ๊ฐ ๋๋ฌด ํฌ๋ฉด ํญ๋ชฉ ํฌ๊ธฐ ์ ํ(400KB)์ ๊ฑธ๋ฆด ์ ์์ด. ํฐ ๋ฆฌ์คํธ๋ ๋ณ๋ ํญ๋ชฉ์ผ๋ก ๋ถ๋ฆฌํ๋ ๊ฒ ์ข์.
4. ์งํฉ ํ์
ํ์ฉ: ํ๊ทธ, ์นดํ
๊ณ ๋ฆฌ ๊ฐ์ ์ค๋ณต ์๋ ๊ฐ๋ค์ Set ํ์
์ ์ฌ์ฉํ๋ฉด ํจ์จ์ ์ด์ผ.
{
"PK": "USER#12345",
"SK": "PROFILE",
"name": "ํ๊ธธ๋",
"email": "hong@example.com",
"age": 28,
"premium": true,
"tags": ["developer", "blogger", "gamer"],
"address": {
"city": "์์ธ",
"district": "๊ฐ๋จ๊ตฌ",
"zipCode": "12345"
},
"stats": {
"posts": 42,
"followers": 1523,
"following": 387
},
"createdAt": "2024-01-15T10:30:00Z",
"updatedAt": "2024-01-20T15:45:00Z"
}
์ ์์ ๋ฅผ ๋ณด๋ฉด ๋ค์ํ ๋ฐ์ดํฐ ํ์ ์ด ์กฐํ๋กญ๊ฒ ์ฌ์ฉ๋๊ณ ์์ง? String, Number, Boolean, List, Map์ด ๋ชจ๋ ๋ค์ด๊ฐ ์์ด. ์ด๋ ๊ฒ ์ ์ฐํ๊ฒ ๋ฐ์ดํฐ๋ฅผ ๊ตฌ์กฐํํ ์ ์๋ ๊ฒ DynamoDB์ ์ฅ์ ์ด์ผ! ๐จ
๐ ์ฟผ๋ฆฌ ์ต์ ํ ์ ๋ต
๋ฐ์ดํฐ ๋ชจ๋ธ๋ง์ด ๋๋ฌ๋ค๋ฉด, ์ด์ ํจ์จ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ ๋ฐฉ๋ฒ์ ์์์ผ ํด. DynamoDB์์๋ ์ฟผ๋ฆฌ ๋ฐฉ์์ ๋ฐ๋ผ ์ฑ๋ฅ๊ณผ ๋น์ฉ์ด ํฌ๊ฒ ๋ฌ๋ผ์ ธ. ๐ฐ
DynamoDB์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ๋ฐฉ๋ฒ์ ํฌ๊ฒ ๋ ๊ฐ์ง์ผ:
Query: ํํฐ์
ํค๋ฅผ ์ง์ ํด์ ํน์ ํํฐ์
์ ๋ฐ์ดํฐ๋ง ์ฝ์ด. ์ ๋ ฌ ํค๋ก ๋ฒ์๋ฅผ ์ง์ ํ ์๋ ์์ง. ๋งค์ฐ ํจ์จ์ ์ด๊ณ ๋น ๋ฅด๋ฉฐ ๋น์ฉ๋ ์ ๋ ดํด. ๐
Scan: ํ
์ด๋ธ ์ ์ฒด๋ฅผ ์ค์บํด. ํํฐ ์กฐ๊ฑด์ ์ค ์ ์์ง๋ง, ์ผ๋จ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ๋ค์ ํํฐ๋งํด. ๋๋ฆฌ๊ณ ๋น์ฉ๋ ๋ง์ด ๋ค์ด. ๊ฐ๋ฅํ๋ฉด ํผํด์ผ ํด! ๐
โ ๏ธ Scan์ ์ ๋ง ์ตํ์ ์๋จ์ด์ผ! ํ ์ด๋ธ์ด ์ปค์ง์๋ก Scan์ ์ ์ ๋ ๋๋ ค์ง๊ณ ๋น์ฉ๋ ์ฆ๊ฐํด. ๋ง์ฝ Scan์ ์์ฃผ ์ฌ์ฉํด์ผ ํ๋ค๋ฉด, ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง์ ๋ค์ ๊ฒํ ํด๋ด์ผ ํด. ์๋ง GSI๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ํค ์ค๊ณ๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ ๋์ ๊ฑฐ์ผ.
์ฌ๋ฌ ํญ๋ชฉ์ ํ ๋ฒ์ ์ฒ๋ฆฌํ ๋๋ ๋ฐฐ์น ์์
์ ์ฌ์ฉํ๋ฉด ํจ์จ์ ์ด์ผ:
BatchGetItem: ์ต๋ 100๊ฐ์ ํญ๋ชฉ์ ํ ๋ฒ์ ์ฝ์ด์ฌ ์ ์์ด. ์ฌ๋ฌ ๊ฐ์ GetItem์ ํ๋๋ก ๋ฌถ์ ๊ฑฐ์ง.
BatchWriteItem: ์ต๋ 25๊ฐ์ ํญ๋ชฉ์ ํ ๋ฒ์ ์ฐ๊ฑฐ๋ ์ญ์ ํ ์ ์์ด. PutItem์ด๋ DeleteItem์ ๋ฌถ์ ๊ฑฐ์ผ.
๋ฐฐ์น ์์
์ ์ฌ์ฉํ๋ฉด ๋คํธ์ํฌ ์๋ณต ํ์๊ฐ ์ค์ด๋ค์ด์ ์ฑ๋ฅ์ด ํฅ์๋๊ณ ๋น์ฉ๋ ์ ๊ฐ๋ผ. ๐
๐ก ํ์ด์ง๋ค์ด์ ๊ตฌํ: ๋๋์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ๋๋ ํ์ด์ง๋ค์ด์ ์ ๊ตฌํํด์ผ ํด. DynamoDB๋ ํ ๋ฒ์ ์ฟผ๋ฆฌ๋ก ์ต๋ 1MB์ ๋ฐ์ดํฐ๋ง ๋ฐํํ๊ฑฐ๋ . LastEvaluatedKey๋ฅผ ์ฌ์ฉํด์ ๋ค์ ํ์ด์ง๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ด.
๋ฐ์ดํฐ ์ผ๊ด์ฑ์ ์ ์งํ๋ ค๋ฉด ์กฐ๊ฑด๋ถ ์ฐ๊ธฐ๋ ํธ๋์ญ์
์ ํ์ฉํด์ผ ํด:
์กฐ๊ฑด๋ถ ์ฐ๊ธฐ (Conditional Writes): ํน์ ์กฐ๊ฑด์ด ๋ง์กฑ๋ ๋๋ง ์ฐ๊ธฐ๋ฅผ ์ํํด. ์๋ฅผ ๋ค์ด, "์ฌ๊ณ ๊ฐ 0๋ณด๋ค ํด ๋๋ง ์ฃผ๋ฌธ ์์ฑ" ๊ฐ์ ๋ก์ง์ ๊ตฌํํ ์ ์์ง.
ํธ๋์ญ์
(Transactions): ์ฌ๋ฌ ์์
์ ์์์ ์ผ๋ก ์ํํด. ๋ชจ๋ ์ฑ๊ณตํ๊ฑฐ๋ ๋ชจ๋ ์คํจํ๊ฑฐ๋ ๋ ์ค ํ๋์ผ. ์ต๋ 25๊ฐ์ ํญ๋ชฉ์ ํ๋์ ํธ๋์ญ์
์ผ๋ก ๋ฌถ์ ์ ์์ด.
๐ก ์ค์ ๋ชจ๋ธ๋ง ์์
์ด๋ก ๋ง ๋ฐฐ์ฐ๋ฉด ์ฌ๋ฏธ์์ง! ์ค์ ์ฌ๋ก๋ฅผ ํตํด DynamoDB ๋ชจ๋ธ๋ง์ ์ด๋ป๊ฒ ํ๋์ง ์์๋ณด์. ์ฌ๋ฅ๋ท ๊ฐ์ ์ฌ๋ฅ ๊ณต์ ํ๋ซํผ์ ์๋ก ๋ค์ด๋ณผ๊ฒ. ๐จ
๐ ์๊ตฌ์ฌํญ ๋ถ์
์ฌ๋ฅ๋ท์์ ํ์ํ ์ฃผ์ ๊ธฐ๋ฅ๋ค:
1. ์ฌ์ฉ์ ํ๋กํ ์กฐํ
2. ์ฌ์ฉ์๊ฐ ๋ฑ๋กํ ์ฌ๋ฅ ๋ชฉ๋ก ์กฐํ
3. ํน์ ์นดํ
๊ณ ๋ฆฌ์ ์ฌ๋ฅ ๊ฒ์
4. ์ฌ๋ฅ ์์ธ ์ ๋ณด ์กฐํ
5. ์ฌ์ฉ์ ๊ฐ ๊ฑฐ๋ ๋ด์ญ ์กฐํ
6. ๋ฆฌ๋ทฐ ๋ฐ ํ์ ๊ด๋ฆฌ
7. ์ค์๊ฐ ์ฑํ
๋ฉ์์ง ์ ์ฅ/์กฐํ
๋จ์ผ ํ ์ด๋ธ ์ค๊ณ ๋ฐฉ์์ผ๋ก ์ ๊ทผํด๋ณด์. ๋ค์ํ ์ํฐํฐ๋ฅผ ํ๋์ ํ ์ด๋ธ์ ์ ์ฅํ๋, ํํฐ์ ํค์ ์ ๋ ฌ ํค๋ฅผ ์๋ฆฌํ๊ฒ ์ค๊ณํ๋ ๊ฑฐ์ผ.
| ์ํฐํฐ | ํํฐ์ ํค (PK) | ์ ๋ ฌ ํค (SK) | ์ฃผ์ ์์ฑ |
|---|---|---|---|
| ์ฌ์ฉ์ ํ๋กํ | USER#userId | PROFILE | name, email, bio, rating |
| ์ฌ๋ฅ ์ ๋ณด | TALENT#talentId | METADATA | title, description, price, category |
| ์ฌ์ฉ์์ ์ฌ๋ฅ | USER#userId | TALENT#talentId | title, price, status |
| ๊ฑฐ๋ ๋ด์ญ | USER#userId | TRANSACTION#timestamp | talentId, amount, status |
| ๋ฆฌ๋ทฐ | TALENT#talentId | REVIEW#timestamp | userId, rating, comment |
| ์ฑํ ๋ฉ์์ง | CHAT#chatRoomId | MESSAGE#timestamp | senderId, content, readStatus |
๊ธฐ๋ณธ ํค๋ง์ผ๋ก ์ปค๋ฒํ ์ ์๋ ์ ๊ทผ ํจํด์ ์ํด GSI๋ฅผ ์ถ๊ฐํด๋ณด์:
GSI1 - ์นดํ
๊ณ ๋ฆฌ๋ณ ์ฌ๋ฅ ๊ฒ์:
โข ํํฐ์
ํค: category
โข ์ ๋ ฌ ํค: rating (๋์ ํ์ ์ ์ ๋ ฌ)
GSI2 - ์ด๋ฉ์ผ๋ก ์ฌ์ฉ์ ์ฐพ๊ธฐ:
โข ํํฐ์
ํค: email
โข ์ ๋ ฌ ํค: ์์
GSI3 - ์ต๊ทผ ๊ฑฐ๋ ๋ด์ญ:
โข ํํฐ์
ํค: status (์: "COMPLETED")
โข ์ ๋ ฌ ํค: timestamp (์ต๊ทผ ์ ์ ๋ ฌ)
๐ก ์ค์ ํ: ์ฌ๋ฅ๋ท์ฒ๋ผ ๋ค์ํ ๊ธฐ๋ฅ์ด ์๋ ํ๋ซํผ์์๋ ์ ๊ทผ ํจํด์ ๋ช ํํ ์ ์ํ๋ ๊ฒ ์ ๋ง ์ค์ํด. ๊ฐ ํ๋ฉด์์ ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ์กฐํํ ์ง ๋ฏธ๋ฆฌ ๋ฌธ์ํํด๋๋ฉด, ๋์ค์ ๋ชจ๋ธ๋ง์ ์์ ํ ๋๋ ํจ์ฌ ์์ํด.
๐ญ ๊ณ ๊ธ ํจํด๊ณผ ๊ธฐ๋ฒ
๊ธฐ๋ณธ์ ๋์ด์ ๋ ๊ณ ๊ธ ๊ธฐ๋ฒ๋ค์ ์์๋ณด์. ์ด๋ฐ ํจํด๋ค์ ์๊ณ ์์ผ๋ฉด ๋ณต์กํ ์๊ตฌ์ฌํญ๋ ์ฐ์ํ๊ฒ ํด๊ฒฐํ ์ ์์ด! ๐ฉ
๊ทธ๋ํ ํํ์ ๊ด๊ณ๋ฅผ ํํํ ๋ ์ ์ฉํ ํจํด์ด์ผ. ์๋ฅผ ๋ค์ด, ์์
๋คํธ์ํฌ์์ ํ๋ก์ฐ ๊ด๊ณ๋ฅผ ์ ์ฅํ๋ค๊ณ ํด๋ณด์:
โข PK: USER#A, SK: USER#B โ A๊ฐ B๋ฅผ ํ๋ก์ฐ
โข PK: USER#B, SK: USER#A โ B์ ํ๋ก์์ A๊ฐ ์์
์ด๋ ๊ฒ ํ๋ฉด "A๊ฐ ํ๋ก์ฐํ๋ ์ฌ๋๋ค"๊ณผ "A๋ฅผ ํ๋ก์ฐํ๋ ์ฌ๋๋ค"์ ๋ชจ๋ ํจ์จ์ ์ผ๋ก ์กฐํํ ์ ์์ด.
ํต๊ณ๋ ์ง๊ณ ๋ฐ์ดํฐ๋ฅผ ๋ฏธ๋ฆฌ ๊ณ์ฐํด์ ์ ์ฅํ๋ ํจํด์ด์ผ. ์๋ฅผ ๋ค์ด, ์ฌ๋ฅ๋ณ ๋ฆฌ๋ทฐ ๊ฐ์์ ํ๊ท ํ์ ์ ๋งค๋ฒ ๊ณ์ฐํ๋ ๋์ , ๋ฆฌ๋ทฐ๊ฐ ์ถ๊ฐ๋ ๋๋ง๋ค ์ง๊ณ ๋ฐ์ดํฐ๋ฅผ ์
๋ฐ์ดํธํ๋ ๊ฑฐ์ง.
DynamoDB Streams์ Lambda๋ฅผ ์กฐํฉํ๋ฉด ์ด๋ฐ ์ง๊ณ๋ฅผ ์๋ํํ ์ ์์ด. ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค Lambda๊ฐ ํธ๋ฆฌ๊ฑฐ๋์ด ์ง๊ณ ๋ฐ์ดํฐ๋ฅผ ์
๋ฐ์ดํธํ๋ ๊ฑฐ์ผ. ๐
์ ๋ ฌ ํค์ ์ฌ๋ฌ ์ ๋ณด๋ฅผ ์กฐํฉํด์ ๋ฃ์ผ๋ฉด ๋ค์ํ ์์ค์ ์ฟผ๋ฆฌ๊ฐ ๊ฐ๋ฅํด. ์๋ฅผ ๋ค์ด:
SK: "CATEGORY#์ ์๊ธฐ๊ธฐ#SUBCATEGORY#์ค๋งํธํฐ#BRAND#์ผ์ฑ"
์ด๋ ๊ฒ ํ๋ฉด:
โข "CATEGORY#์ ์๊ธฐ๊ธฐ"๋ก ์์ํ๋ ๋ชจ๋ ํญ๋ชฉ ์กฐํ
โข "CATEGORY#์ ์๊ธฐ๊ธฐ#SUBCATEGORY#์ค๋งํธํฐ"์ผ๋ก ์์ํ๋ ํญ๋ชฉ ์กฐํ
โข ์ ํํ ๋ธ๋๋๊น์ง ์ง์ ํด์ ์กฐํ
๋ชจ๋ ๊ฐ๋ฅํด! begins_with ์กฐ๊ฑด์ ์ฌ์ฉํ๋ฉด ๊ณ์ธต์ ์ฟผ๋ฆฌ๋ฅผ ๊ตฌํํ ์ ์์ด. ๐ณ
๋ก๊ทธ, ์ผ์ ๋ฐ์ดํฐ, ํ๋ ๊ธฐ๋ก ๊ฐ์ ์๊ณ์ด ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋๋ ์๊ฐ ๊ธฐ๋ฐ ํํฐ์
๋์ ๊ณ ๋ คํด์ผ ํด. ์๋ฅผ ๋ค์ด:
PK: "SENSOR#123#2024-01"
SK: "2024-01-15T10:30:00Z"
์ด๋ ๊ฒ ํํฐ์
ํค์ ์ ์ ๋ณด๋ฅผ ํฌํจ์ํค๋ฉด:
โข ํซ ํํฐ์
๋ฌธ์ ๋ฐฉ์ง (๋งค๋ฌ ์ ํํฐ์
์์ฑ)
โข ์ค๋๋ ๋ฐ์ดํฐ ์ญ์ ์ฉ์ด (์ ๋จ์๋ก ํํฐ์
์ญ์ )
โข ํน์ ๊ธฐ๊ฐ ๋ฐ์ดํฐ ์กฐํ ํจ์จ์
TTL(Time To Live) ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด ์ค๋๋ ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก ์ญ์ ํ ์๋ ์์ด. ๐พ
โ ๏ธ ๊ณผ๋ํ ์ต์ ํ ์ฃผ์: ๋๋ฌด ๋ณต์กํ ํจํด์ ์ฌ์ฉํ๋ฉด ์คํ๋ ค ์ ์ง๋ณด์๊ฐ ์ด๋ ค์์ง ์ ์์ด. ํ์๋ค์ด ์ดํดํ๊ธฐ ์ฝ๊ณ , ๋ฌธ์ํ๊ฐ ์ ๋์ด ์๋ ๋จ์ํ ์ค๊ณ๊ฐ ๋๋ก๋ ๋ ๋์ ์ ์์ด. ๋ณต์ก๋์ ์ฑ๋ฅ ์ฌ์ด์ ๊ท ํ์ ์ ๋ง์ถฐ์ผ ํด!
๐ฐ ๋น์ฉ ์ต์ ํ ์ ๋ต
DynamoDB๋ ์ฌ์ฉํ ๋งํผ ๋น์ฉ์ ์ง๋ถํ๋ ์ข ๋์ ์๋น์ค์ผ. ์๋ชป ์ค๊ณํ๋ฉด ๋น์ฉ์ด ํญํ์ฒ๋ผ ๋์ฌ ์ ์์ด! ๋น์ฉ์ ์ต์ ํํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์. ๐ธ
DynamoDB๋ ๋ ๊ฐ์ง ์ฉ๋ ๋ชจ๋๋ฅผ ์ ๊ณตํด:
ํ๋ก๋น์ ๋ ๋ชจ๋ (Provisioned Mode):
โข ์ฝ๊ธฐ/์ฐ๊ธฐ ์ฉ๋์ ๋ฏธ๋ฆฌ ์ง์
โข ์์ธก ๊ฐ๋ฅํ ํธ๋ํฝ์ ์ ํฉ
โข Auto Scaling ์ค์ ๊ฐ๋ฅ
โข ์์ฝ ์ฉ๋ ๊ตฌ๋งค๋ก ๋น์ฉ ์ ๊ฐ ๊ฐ๋ฅ
โข ์ผ์ ํ ํธ๋ํฝ์ด ์๋ค๋ฉด ์จ๋๋งจ๋๋ณด๋ค ์ ๋ ด
์จ๋๋งจ๋ ๋ชจ๋ (On-Demand Mode):
โข ์ฌ์ฉํ ๋งํผ๋ง ๋น์ฉ ์ง๋ถ
โข ํธ๋ํฝ ์์ธก์ด ์ด๋ ค์ธ ๋ ์ ํฉ
โข ์ฉ๋ ๊ณํ ๋ถํ์
โข ๊ธ๊ฒฉํ ํธ๋ํฝ ์ฆ๊ฐ์ ์๋ ๋์
โข ํธ๋ํฝ์ด ์ ๊ฑฐ๋ ๋ถ๊ท์นํ๋ฉด ์ ๋ฆฌ
๐ก ์ ํ ๊ฐ์ด๋: ์๋น์ค ์ด๊ธฐ๋ ํธ๋ํฝ ํจํด์ ๋ชจ๋ฅผ ๋๋ ์จ๋๋งจ๋๋ก ์์ํด. ํธ๋ํฝ์ด ์์ ํ๋๋ฉด ํ๋ก๋น์ ๋ ๋ชจ๋๋ก ์ ํํ๋ฉด ๋น์ฉ์ 30~50% ์ ๊ฐํ ์ ์์ด!
1. Scan ๋์ Query ์ฌ์ฉ: ์ด๋ฏธ ๊ฐ์กฐํ์ง๋ง ์ ๋ง ์ค์ํด! Scan์ ์ ์ฒด ํ
์ด๋ธ์ ์ฝ์ผ๋๊น ๋น์ฉ์ด ์์ฒญ๋๊ฒ ๋์ฌ ์ ์์ด.
2. ํ๋ก์ ์
ํํ์ ํ์ฉ: ํ์ํ ์์ฑ๋ง ๊ฐ์ ธ์ค๋ฉด ๋ฐ์ดํฐ ์ ์ก๋์ด ์ค์ด๋ค์ด ๋น์ฉ์ด ์ ๊ฐ๋ผ.
3. ํํฐ ํํ์ ์ ์คํ ์ฌ์ฉ: ํํฐ๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํ์ ์ ์ฉ๋๋๊น ์ฝ๊ธฐ ๋น์ฉ์ ๊ทธ๋๋ก์ผ. ๊ฐ๋ฅํ๋ฉด ํค ์กฐ๊ฑด์ผ๋ก ํํฐ๋งํด.
4. ๋ฐฐ์น ์์
ํ์ฉ: ์ฌ๋ฌ ๊ฐ์ ๊ฐ๋ณ ์์ฒญ ๋์ ๋ฐฐ์น ์์
์ ์ฌ์ฉํ๋ฉด ๋น์ฉ์ด ์ ๊ฐ๋ผ.
5. ์ผ๊ด์ฑ ์์ค ์กฐ์ : ๊ฐ๋ ฅํ ์ผ๊ด์ฑ ์ฝ๊ธฐ๋ ์ต์ข
์ผ๊ด์ฑ ์ฝ๊ธฐ๋ณด๋ค 2๋ฐฐ ๋น์ธ. ๊ผญ ํ์ํ ๊ฒฝ์ฐ๊ฐ ์๋๋ฉด ์ต์ข
์ผ๊ด์ฑ์ ์ฌ์ฉํด.
1. ์์ฑ ์ด๋ฆ ์งง๊ฒ: ์์ฑ ์ด๋ฆ๋ ์ ์ฅ ๊ณต๊ฐ์ ์ฐจ์งํด. "userEmailAddress" ๋์ "email"์ ์ฐ๋ฉด ๊ณต๊ฐ์ ์ ์ฝํ ์ ์์ด.
2. ์์ถ ๊ณ ๋ ค: ํฐ ํ
์คํธ๋ JSON ๋ฐ์ดํฐ๋ ์์ถํด์ ์ ์ฅํ๋ฉด ์คํ ๋ฆฌ์ง ๋น์ฉ์ ์ค์ผ ์ ์์ด.
3. TTL ํ์ฉ: ์ค๋๋ ๋ฐ์ดํฐ๋ TTL๋ก ์๋ ์ญ์ ํ๋ฉด ์คํ ๋ฆฌ์ง ๋น์ฉ์ด ์ ๊ฐ๋ผ.
4. ๋ถํ์ํ ์ธ๋ฑ์ค ์ ๊ฑฐ: ์ฌ์ฉํ์ง ์๋ GSI๋ ๊ณผ๊ฐํ ์ญ์ ํด. ์ธ๋ฑ์ค๋ง๋ค ์คํ ๋ฆฌ์ง ๋น์ฉ์ด ๋ฐ์ํ๊ฑฐ๋ .
โ ๋น์ฉ ์ ๊ฐ ์ฒดํฌ๋ฆฌ์คํธ
โ๏ธ Query ์ฌ์ฉ (Scan ์ต์ํ)
โ๏ธ ํ๋ก์ ์
์ผ๋ก ํ์ํ ์์ฑ๋ง ์กฐํ
โ๏ธ ๋ฐฐ์น ์์
ํ์ฉ
โ๏ธ ์ต์ข
์ผ๊ด์ฑ ์ฝ๊ธฐ ์ฌ์ฉ
โ๏ธ ์งง์ ์์ฑ ์ด๋ฆ ์ฌ์ฉ
โ๏ธ TTL๋ก ์ค๋๋ ๋ฐ์ดํฐ ์ญ์
โ๏ธ ๋ถํ์ํ GSI ์ ๊ฑฐ
โ๏ธ ์ฉ๋ ๋ชจ๋ ์ต์ ํ
โ๏ธ ์์ฝ ์ฉ๋ ๊ตฌ๋งค ๊ฒํ
โ๏ธ CloudWatch๋ก ์ฌ์ฉ๋ ๋ชจ๋ํฐ๋ง
โ ๋น์ฉ ํญํ ์ฃผ์์ฌํญ
โ ๋ฌด๋ถ๋ณํ Scan ์ฌ์ฉ
โ ๋ชจ๋ ์์ฑ ์กฐํ (SELECT *)
โ ๊ณผ๋ํ GSI ์์ฑ
โ ํซ ํํฐ์
๋ฐ์
โ ๋ถํ์ํ ๊ฐ๋ ฅํ ์ผ๊ด์ฑ ์ฝ๊ธฐ
โ ํฐ ํญ๋ชฉ ํฌ๊ธฐ (400KB ๊ทผ์ )
โ ๋นํจ์จ์ ์ธ ํํฐ ์ฌ์ฉ
โ ์ฉ๋ ๋ชจ๋ ๋ฏธ์ต์ ํ
โ ์ฌ์ฉ๋ ๋ชจ๋ํฐ๋ง ๋ถ์ฌ
โ ์ค๋๋ ๋ฐ์ดํฐ ๋ฐฉ์น
๐ก๏ธ ๋ณด์๊ณผ ๋ฐฑ์ ์ ๋ต
๋ฐ์ดํฐ๋ ์์คํด! ๋ณด์๊ณผ ๋ฐฑ์ ์ ์ํํ ํ๋ฉด ํฐ ์ฌ๊ณ ๋ก ์ด์ด์ง ์ ์์ด. DynamoDB์ ๋ณด์ ๊ธฐ๋ฅ๋ค์ ์ ๋๋ก ํ์ฉํ์. ๐
1. IAM ์ ์ฑ
: ์ธ๋ฐํ ๊ถํ ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํด. ํน์ ํ
์ด๋ธ์ด๋ ํน์ ์์
์๋ง ์ ๊ทผ์ ํ์ฉํ ์ ์์ง.
2. ์ํธํ:
โข ์ ์ฅ ๋ฐ์ดํฐ ์ํธํ (Encryption at Rest): AWS KMS๋ก ์๋ ์ํธํ
โข ์ ์ก ์ค ์ํธํ (Encryption in Transit): TLS/SSL๋ก ๋ณดํธ
3. VPC ์๋ํฌ์ธํธ: ์ธํฐ๋ท์ ๊ฑฐ์น์ง ์๊ณ ํ๋ผ์ด๋น ๋คํธ์ํฌ๋ก DynamoDB์ ์ ๊ทผํ ์ ์์ด.
4. ๊ฐ์ฌ ๋ก๊น
: CloudTrail๋ก ๋ชจ๋ API ํธ์ถ์ ๊ธฐ๋กํด์ ๋ณด์ ๊ฐ์ฌ๋ฅผ ํ ์ ์์ด.
์จ๋๋งจ๋ ๋ฐฑ์
:
โข ์ธ์ ๋ ์ง ์๋์ผ๋ก ๋ฐฑ์
์์ฑ ๊ฐ๋ฅ
โข ์ ์ฒด ํ
์ด๋ธ ์ค๋
์ท
โข ๋ฐฑ์
๋ณด๊ด ๊ธฐ๊ฐ ์ ํ ์์
โข ๋ค๋ฅธ ๋ฆฌ์ ์ผ๋ก ๋ณต์ฌ ๊ฐ๋ฅ
ํน์ ์์ ๋ณต์ (PITR):
โข ์ต๊ทผ 35์ผ ์ด๋ด์ ์ด๋ ์์ ์ผ๋ก๋ ๋ณต์ ๊ฐ๋ฅ
โข ์๋์ผ๋ก ์ฐ์ ๋ฐฑ์
โข ์ค์๋ก ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ์ ๋ ์ ์ฉ
โข ์ถ๊ฐ ๋น์ฉ ๋ฐ์ (์คํ ๋ฆฌ์ง ๋น์ฉ)
๊ธ๋ก๋ฒ ํ
์ด๋ธ:
โข ์ฌ๋ฌ AWS ๋ฆฌ์ ์ ๋ฐ์ดํฐ ๋ณต์
โข ์ฌํด ๋ณต๊ตฌ(DR) ์ ๋ต์ผ๋ก ํ์ฉ
โข ๋ฎ์ ์ง์ฐ ์๊ฐ์ผ๋ก ๊ธ๋ก๋ฒ ์๋น์ค ์ ๊ณต
โ ๏ธ ๋ฐฑ์ ์ ํ์! "๋๋ ์ค์ ์ ํด"๋ผ๊ณ ์๊ฐํ์ง ๋ง. ๋๊ตฌ๋ ์ค์ํ ์ ์์ด. ์ค์ํ ํ๋ก๋์ ํ ์ด๋ธ์ ๋ฐ๋์ PITR์ ํ์ฑํํ๊ณ , ์ ๊ธฐ์ ์ผ๋ก ์จ๋๋งจ๋ ๋ฐฑ์ ๋ ๋ง๋ค์ด๋ฌ. ๋์ค์ ํํํ๋ ๊ฒ๋ณด๋ค ๋ฏธ๋ฆฌ ์ค๋นํ๋ ๊ฒ ๋ฐฑ๋ฐฐ ๋ซ์ง!
๐ ๋ชจ๋ํฐ๋ง๊ณผ ์ฑ๋ฅ ํ๋
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ด์ํ๋ค ๋ณด๋ฉด ์ฑ๋ฅ ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์์ด. ๋ฏธ๋ฆฌ ๋ชจ๋ํฐ๋งํ๊ณ ๋ฌธ์ ๋ฅผ ๋น ๋ฅด๊ฒ ํ์ ํ๋ ๊ฒ ์ค์ํด! ๐
DynamoDB๋ ๋ค์ํ ๋ฉํธ๋ฆญ์ CloudWatch๋ก ์ ๊ณตํด:
โข ConsumedReadCapacityUnits / ConsumedWriteCapacityUnits: ์ค์ ์ฌ์ฉํ ์ฉ๋
โข ProvisionedReadCapacityUnits / ProvisionedWriteCapacityUnits: ํ๋ก๋น์ ๋๋ ์ฉ๋
โข ThrottledRequests: ์ ํ๋ ์์ฒญ ์ (์ฉ๋ ์ด๊ณผ)
โข SystemErrors: ์์คํ
์ค๋ฅ ๋ฐ์ ํ์
โข UserErrors: ์ฌ์ฉ์ ์ค๋ฅ ๋ฐ์ ํ์
โข ConditionalCheckFailedRequests: ์กฐ๊ฑด๋ถ ์ฐ๊ธฐ ์คํจ ํ์
์ด๋ฐ ๋ฉํธ๋ฆญ๋ค์ ๋ชจ๋ํฐ๋งํ๋ฉด ๋ฌธ์ ๋ฅผ ์กฐ๊ธฐ์ ๋ฐ๊ฒฌํ ์ ์์ด.
ํซ ํํฐ์
๋ฌธ์ :
โข ์ฆ์: ํน์ ํํฐ์
์ ์์ฒญ์ด ์ง์ค๋์ด ThrottledRequests ์ฆ๊ฐ
โข ํด๊ฒฐ: ํํฐ์
ํค ์ฌ์ค๊ณ, ์ฐ๊ธฐ ์ค๋ฉ ๊ธฐ๋ฒ ์ ์ฉ
์ฉ๋ ๋ถ์กฑ:
โข ์ฆ์: ThrottledRequests๊ฐ ์ง์์ ์ผ๋ก ๋ฐ์
โข ํด๊ฒฐ: ํ๋ก๋น์ ๋ ์ฉ๋ ์ฆ๊ฐ, Auto Scaling ์ค์ , ์จ๋๋งจ๋ ๋ชจ๋ ์ ํ
ํฐ ํญ๋ชฉ ํฌ๊ธฐ:
โข ์ฆ์: ์ฝ๊ธฐ/์ฐ๊ธฐ ๋น์ฉ์ด ์์๋ณด๋ค ๋์
โข ํด๊ฒฐ: ํญ๋ชฉ ๋ถํ , ์์ถ, ๋ถํ์ํ ์์ฑ ์ ๊ฑฐ
๋นํจ์จ์ ์ธ ์ฟผ๋ฆฌ:
โข ์ฆ์: ์๋ต ์๊ฐ์ด ๋๋ฆผ, ๋น์ฉ์ด ๋์
โข ํด๊ฒฐ: Scan์ Query๋ก ๋ณ๊ฒฝ, GSI ์ถ๊ฐ, ํ๋ก์ ์
ํํ์ ์ฌ์ฉ
๐ก ํ๋ก์กํฐ๋ธ ๋ชจ๋ํฐ๋ง: CloudWatch ์๋์ ์ค์ ํด์ ๋ฉํธ๋ฆญ์ด ์๊ณ๊ฐ์ ์ด๊ณผํ๋ฉด ์๋์ผ๋ก ์๋ฆผ์ ๋ฐ๋๋ก ํด. ์๋ฅผ ๋ค์ด, ThrottledRequests๊ฐ 100์ ๋์ผ๋ฉด ์๋ฆผ์ ๋ณด๋ด๋ ์์ผ๋ก ๋ง์ด์ผ. ๋ฌธ์ ๊ฐ ์ปค์ง๊ธฐ ์ ์ ๋์ํ ์ ์์ด!
์ฝ๊ธฐ ์ฑ๋ฅ์ ๊ทน๋์ ์ผ๋ก ํฅ์์ํค๊ณ ์ถ๋ค๋ฉด DAX๋ฅผ ๊ณ ๋ คํด๋ด. DAX๋ DynamoDB ์ ์ฉ ์ธ๋ฉ๋ชจ๋ฆฌ ์บ์์ผ.
DAX์ ์ฅ์ :
โข ๋ง์ดํฌ๋ก์ด ๋จ์์ ์๋ต ์๊ฐ
โข ์ฝ๊ธฐ ์ง์ฝ์ ์ํฌ๋ก๋์ ์ต์
โข ์ ํ๋ฆฌ์ผ์ด์
์ฝ๋ ๋ณ๊ฒฝ ์ต์ํ
โข ์๋ ์บ์ ๋ฌดํจํ
DAX ์ฌ์ฉ ์๋๋ฆฌ์ค:
โข ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ์ฝ๋ ๊ฒฝ์ฐ
โข ์ฝ๊ธฐ ์ฑ๋ฅ์ด ์ค์ํ ๊ฒฝ์ฐ
โข ์ฝ๊ธฐ ์ฉ๋ ๋น์ฉ์ ์ค์ด๊ณ ์ถ์ ๊ฒฝ์ฐ
ํ์ง๋ง DAX๋ ๋น์ฉ์ด ๋ฐ์ํ๋๊น, ์ ๋ง ํ์ํ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉํ๋ ๊ฒ ์ข์. ๐ฏ
๐ ๋ง์ด๊ทธ๋ ์ด์ ์ ๋ต
๊ธฐ์กด ๊ด๊ณํ DB์์ DynamoDB๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ๊ฑด ์ฝ์ง ์์. ๋ฐ์ดํฐ ๊ตฌ์กฐ๊ฐ ์์ ํ ๋ค๋ฅด๋๊น ์ ์คํ๊ฒ ๊ณํํด์ผ ํด. ๐
1. ํ๊ฐ ๋จ๊ณ:
โข ํ์ฌ ๋ฐ์ดํฐ ๋ชจ๋ธ ๋ถ์
โข ์ ๊ทผ ํจํด ํ์
โข DynamoDB ์ ํฉ์ฑ ํ๊ฐ
โข ๋น์ฉ ์ถ์
2. ์ค๊ณ ๋จ๊ณ:
โข DynamoDB ๋ฐ์ดํฐ ๋ชจ๋ธ ์ค๊ณ
โข ํค ์คํค๋ง ์ ์
โข GSI ๊ณํ
โข ๋ง์ด๊ทธ๋ ์ด์
์ ๋ต ์๋ฆฝ
3. ํ
์คํธ ๋จ๊ณ:
โข ์๊ท๋ชจ ๋ฐ์ดํฐ๋ก POC ์งํ
โข ์ฑ๋ฅ ํ
์คํธ
โข ๋น์ฉ ๊ฒ์ฆ
โข ๋กค๋ฐฑ ๊ณํ ์๋ฆฝ
4. ์คํ ๋จ๊ณ:
โข ๋ฐ์ดํฐ ๋ง์ด๊ทธ๋ ์ด์
๋๊ตฌ ์ ํ (AWS DMS, ์ปค์คํ
์คํฌ๋ฆฝํธ ๋ฑ)
โข ๋จ๊ณ์ ๋ง์ด๊ทธ๋ ์ด์
(Strangler Fig ํจํด)
โข ๋ณ๋ ฌ ์ด์ ๊ธฐ๊ฐ ์ค์
โข ๋ชจ๋ํฐ๋ง ๊ฐํ
5. ์ต์ ํ ๋จ๊ณ:
โข ์ฑ๋ฅ ํ๋
โข ๋น์ฉ ์ต์ ํ
โข ๋ฌธ์ํ
โข ํ ๊ต์ก
โ ๏ธ ๋น ๋ฑ ๋ง์ด๊ทธ๋ ์ด์ ์ ์ํํด! ํ ๋ฒ์ ๋ชจ๋ ๊ฑธ ๋ฐ๊พธ๋ ค๊ณ ํ์ง ๋ง. ์ ์ง์ ์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ฉด์ ๋ฌธ์ ๋ฅผ ํ์ ํ๊ณ ํด๊ฒฐํ๋ ๊ฒ ์์ ํด. ์๋ฅผ ๋ค์ด, ์ฝ๊ธฐ ํธ๋ํฝ๋ง ๋จผ์ DynamoDB๋ก ๋ณด๋ด๊ณ , ์์ ํ๋๋ฉด ์ฐ๊ธฐ ํธ๋ํฝ๋ ์ฎ๊ธฐ๋ ์์ผ๋ก ๋ง์ด์ผ.
๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ DynamoDB๋ก ์ฎ๊ธธ ํ์๋ ์์ด. ๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฅ์ ์ ์ด๋ ค์ ํ์ด๋ธ๋ฆฌ๋๋ก ์ด์ํ๋ ๊ฒ๋ ์ข์ ์ ๋ต์ด์ผ:
โข ๊ด๊ณํ DB: ๋ณต์กํ ํธ๋์ญ์
, ๋ณต์กํ ์กฐ์ธ, ๋ฆฌํฌํ
โข DynamoDB: ๋น ๋ฅธ ์ฝ๊ธฐ/์ฐ๊ธฐ, ํ์ฅ์ฑ, ํค-๊ฐ ์กฐํ
โข ElastiCache: ์ด๊ณ ์ ์บ์ฑ
โข S3: ๋์ฉ๋ ํ์ผ ์ ์ฅ
์ ์ฌ์ ์์ ๋ง๋ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ ์ต์ ์ด์ผ! ๐ฏ
๐ ๋ฒ ์คํธ ํ๋ํฐ์ค ์ ๋ฆฌ
์ง๊ธ๊น์ง ๋ฐฐ์ด ๋ด์ฉ์ ์ ๋ฆฌํด๋ณด์. DynamoDB ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง์ ํต์ฌ ๋ฒ ์คํธ ํ๋ํฐ์ค๋ค์ด์ผ! ๐
๐ DynamoDB ๋ชจ๋ธ๋ง ํฉ๊ธ๋ฅ 10๊ณ๋ช
1. ์ ๊ทผ ํจํด์ ๋จผ์ ์ ์ํ๋ผ
๋ฐ์ดํฐ ๊ตฌ์กฐ๊ฐ ์๋๋ผ ์ฟผ๋ฆฌ ํจํด์ ๊ธฐ์ค์ผ๋ก ์ค๊ณํด. ์ด๋ป๊ฒ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ์ง ๋จผ์ ์๊ฐํ๊ณ , ๊ทธ์ ๋ง์ถฐ ํ
์ด๋ธ์ ์ค๊ณํ๋ ๊ฑฐ์ผ.
2. ๋จ์ผ ํ
์ด๋ธ ์ค๊ณ๋ฅผ ๊ณ ๋ คํ๋ผ
์ฌ๋ฌ ์ํฐํฐ๋ฅผ ํ๋์ ํ
์ด๋ธ์ ์ ์ฅํ๋ฉด ์กฐ์ธ ์์ด ํจ์จ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ด. ํ์ง๋ง ๋ณต์ก๋๊ฐ ์ฆ๊ฐํ๋ ํ์ ์ญ๋์ ๊ณ ๋ คํด์ผ ํด.
3. ํํฐ์
ํค๋ ๊ณ ๋ฅด๊ฒ ๋ถ์ฐ๋๋๋ก
ํซ ํํฐ์
์ ํผํ๋ ค๋ฉด ํํฐ์
ํค๊ฐ ๊ณ ๋ฅด๊ฒ ๋ถ์ฐ๋์ด์ผ ํด. ์นด๋๋๋ฆฌํฐ๊ฐ ๋์ ์์ฑ์ ์ ํํ๊ณ , ํ์ํ๋ฉด ์ค๋ฉ ๊ธฐ๋ฒ์ ์ ์ฉํด.
4. ์ ๋ ฌ ํค๋ก ๋ฒ์ ์ฟผ๋ฆฌ๋ฅผ ํ์ฉํ๋ผ
์ ๋ ฌ ํค๋ฅผ ์ ์ค๊ณํ๋ฉด begins_with, between ๊ฐ์ ๋ฒ์ ์ฟผ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ์ํํ ์ ์์ด. ๊ณ์ธต์ ๊ตฌ์กฐ๋ฅผ ํํํ ๋ ํนํ ์ ์ฉํด.
5. GSI๋ ์ ์คํ๊ฒ ์ถ๊ฐํ๋ผ
GSI๋ ๊ฐ๋ ฅํ์ง๋ง ๋น์ฉ์ด ๋ฐ์ํด. ์ ๋ง ํ์ํ ์ ๊ทผ ํจํด์๋ง GSI๋ฅผ ์ถ๊ฐํ๊ณ , ํ๋ก์ ์
์ ๋ต์ ์ ์ธ์์ ๋น์ฉ์ ์ต์ ํํด.
6. Query๋ฅผ ์ฌ์ฉํ๊ณ Scan์ ํผํ๋ผ
Scan์ ์ ๋ง ์ตํ์ ์๋จ์ด์ผ. ๊ฐ๋ฅํ๋ฉด Query๋ GSI๋ฅผ ์ฌ์ฉํด์ ํจ์จ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์กฐํํด.
7. ๋ฐ์ดํฐ ์ค๋ณต์ ๋๋ ค์ํ์ง ๋ง๋ผ
NoSQL์์๋ ์ ๊ทํ๋ณด๋ค ๋น์ ๊ทํ๊ฐ ์ผ๋ฐ์ ์ด์ผ. ์กฐํ ์ฑ๋ฅ์ ์ํด ๋ฐ์ดํฐ๋ฅผ ์ค๋ณต ์ ์ฅํ๋ ๊ฒ ์คํ๋ ค ํจ์จ์ ์ผ ์ ์์ด.
8. ํญ๋ชฉ ํฌ๊ธฐ๋ฅผ ๊ด๋ฆฌํ๋ผ
ํญ๋ชฉ ํฌ๊ธฐ๋ 400KB๋ฅผ ๋์ ์ ์์ด. ํฐ ๋ฐ์ดํฐ๋ S3์ ์ ์ฅํ๊ณ DynamoDB์๋ ์ฐธ์กฐ๋ง ์ ์ฅํ๋ ๊ฒ ์ข์.
9. ๋น์ฉ์ ํญ์ ์ผ๋์ ๋๋ผ
์ฝ๊ธฐ/์ฐ๊ธฐ ์ฉ๋, ์คํ ๋ฆฌ์ง, ์ธ๋ฑ์ค ๋ชจ๋ ๋น์ฉ์ด ๋ฐ์ํด. CloudWatch๋ก ์ฌ์ฉ๋์ ๋ชจ๋ํฐ๋งํ๊ณ ์ต์ ํํด.
10. ๋ฐฑ์
๊ณผ ๋ณด์์ ์ํํ ํ์ง ๋ง๋ผ
PITR์ ํ์ฑํํ๊ณ , ์ ๊ธฐ์ ์ผ๋ก ๋ฐฑ์
์ ๋ง๋ค์ด. IAM ์ ์ฑ
๊ณผ ์ํธํ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณดํธํด.
๐ฌ ๋ง๋ฌด๋ฆฌํ๋ฉฐ
์, ์ ๋ง ๊ธด ์ฌ์ ์ด์์ง? ๐
DynamoDB์ NoSQL ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง์ ๋ํด ๊น์ด ์๊ฒ ์์๋ดค์ด. ๊ด๊ณํ DB์๋ ์์ ํ ๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ์์ด๋ผ ์ฒ์์ ์ด๋ ต๊ฒ ๋๊ปด์ง ์ ์์ง๋ง, ํต์ฌ ์์น๋ค์ ์ดํดํ๊ณ ๋๋ฉด ์ ๋ง ๊ฐ๋ ฅํ ๋๊ตฌ๊ฐ ๋ ๊ฑฐ์ผ.
๊ธฐ์ตํด์ผ ํ ํต์ฌ์:
โข ์ ๊ทผ ํจํด์ ๋จผ์ ์ ์ํ๊ณ
โข ํํฐ์
ํค๋ฅผ ์ ์คํ๊ฒ ์ ํํ๊ณ
โข Query๋ฅผ ์ฌ์ฉํ๊ณ Scan์ ํผํ๊ณ
โข ๋น์ฉ์ ํญ์ ์ผ๋์ ๋๊ณ
โข ๋ชจ๋ํฐ๋ง๊ณผ ์ต์ ํ๋ฅผ ์ง์ํ๋ ๊ฑฐ์ผ! ๐ฏ
DynamoDB๋ ์ฌ๋ฐ๋ฅด๊ฒ ์ฌ์ฉํ๋ฉด ์์ฒญ๋ ํ์ฅ์ฑ๊ณผ ์ฑ๋ฅ์ ์ ๊ณตํด. ํ์ง๋ง ์๋ชป ์ฌ์ฉํ๋ฉด ๋น์ฉ ํญํ๊ณผ ์ฑ๋ฅ ๋ฌธ์ ๋ก ์ด์ด์ง ์ ์์ด. ์ด ๊ธ์์ ๋ฐฐ์ด ๋ด์ฉ๋ค์ ์ค์ ์ ์ ์ฉํ๋ฉด์ ๊ฒฝํ์ ์์๊ฐ๊ธธ ๋ฐ๋ผ! ๐ช
๐ ๋ค์ ๋จ๊ณ
์ด๋ก ์ ๋ฐฐ์ ์ผ๋ ์ด์ ์ค์ต์ด์ผ! AWS ํ๋ฆฌํฐ์ด๋ก DynamoDB๋ฅผ ๋ฌด๋ฃ๋ก ์ฌ์ฉํด๋ณผ ์ ์์ด. ๊ฐ๋จํ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค์ด๋ณด๋ฉด์ ์ง์ ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง์ ํด๋ณด๋ ๊ฒ ๊ฐ์ฅ ์ข์ ํ์ต ๋ฐฉ๋ฒ์ด์ผ.
์ฌ๋ฅ๋ท ๊ฐ์ ํ๋ซํผ์์ DB ๊ด๋ จ ์ฌ๋ฅ์ ๊ณต์ ํ๋ ์ ๋ฌธ๊ฐ๋ค์ ์ฐพ์๋ณด๋ ๊ฒ๋ ์ข์ ๋ฐฉ๋ฒ์ด์ผ. ์ค๋ฌด ๊ฒฝํ์ด ํ๋ถํ ์ฌ๋๋ค์๊ฒ ๋ฉํ ๋ง์ ๋ฐ์ผ๋ฉด ํจ์ฌ ๋น ๋ฅด๊ฒ ์ฑ์ฅํ ์ ์๊ฑฐ๋ ! ๐
ํน์ DynamoDB ๋ชจ๋ธ๋ง์ด๋ AWS ๊ด๋ จํด์ ๋์์ด ํ์ํ๋ค๋ฉด, ์ฌ๋ฅ๋ท์์ ๊ด๋ จ ์ ๋ฌธ๊ฐ๋ค์ ์ฐพ์๋ณด๋ ๊ฒ๋ ์ถ์ฒํด. ์ค์ ๊ฒฝํ์ ๊ฐ์ง ์ฌ๋๋ค์ ์กฐ์ธ์ ์ ๋ง ๊ฐ์ง๊ฑฐ๋ !
์, ์ด์ ๋๋ DynamoDB ์ ๋ฌธ๊ฐ๊ฐ ๋ ์ค๋น๊ฐ ๋์ด! ๐ช ์ฒ์์ ์ด๋ ต๊ฒ ๋๊ปด์ง ์ ์์ง๋ง, ํ๋์ฉ ์ ์ฉํด๋ณด๋ฉด์ ์ต์ํด์ง๋ฉด ๋ถ๋ช ๊ฐ๋ ฅํ ๋ฌด๊ธฐ๊ฐ ๋ ๊ฑฐ์ผ. ํ์ดํ ! ๐
๐
Happy Modeling with DynamoDB!
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค๊ณ์ ์๋ก์ด ์ธ๊ณ๋ฅผ ์ฆ๊ฒจ๋ณด์ธ์! ๐
๊ด๋ จ ํค์๋
๋๊ธ ์์ฑ
์ด ๊ธ์ ๋ํ ์ฌ๋ฌ๋ถ์ ์๊ฐ์ ๋ค๋ ค์ฃผ์ธ์
๋ก๊ทธ์ธ์ด ํ์ํฉ๋๋ค
๋๊ธ์ ์์ฑํ๋ ค๋ฉด ๋จผ์ ๋ก๊ทธ์ธํด์ฃผ์ธ์.
๋๊ธ 0
์ง์์ธ์ ์ฒ - ์ง์ ์ฌ์ฐ๊ถ ๋ณดํธ ๊ณ ์ง
์ง์ ์ฌ์ฐ๊ถ ๋ณดํธ ๊ณ ์ง
- ์ ์๊ถ ๋ฐ ์์ ๊ถ: ๋ณธ ์ปจํ ์ธ ๋ ์ฌ๋ฅ๋ท์ ๋ ์ AI ๊ธฐ์ ๋ก ์์ฑ๋์์ผ๋ฉฐ, ๋ํ๋ฏผ๊ตญ ์ ์๊ถ๋ฒ ๋ฐ ๊ตญ์ ์ ์๊ถ ํ์ฝ์ ์ํด ๋ณดํธ๋ฉ๋๋ค.
- AI ์์ฑ ์ปจํ ์ธ ์ ๋ฒ์ ์ง์: ๋ณธ AI ์์ฑ ์ปจํ ์ธ ๋ ์ฌ๋ฅ๋ท์ ์ง์ ์ฐฝ์๋ฌผ๋ก ์ธ์ ๋๋ฉฐ, ๊ด๋ จ ๋ฒ๊ท์ ๋ฐ๋ผ ์ ์๊ถ ๋ณดํธ๋ฅผ ๋ฐ์ต๋๋ค.
- ์ฌ์ฉ ์ ํ: ์ฌ๋ฅ๋ท์ ๋ช ์์ ์๋ฉด ๋์ ์์ด ๋ณธ ์ปจํ ์ธ ๋ฅผ ๋ณต์ , ์์ , ๋ฐฐํฌ, ๋๋ ์์ ์ ์ผ๋ก ํ์ฉํ๋ ํ์๋ ์๊ฒฉํ ๊ธ์ง๋ฉ๋๋ค.
- ๋ฐ์ดํฐ ์์ง ๊ธ์ง: ๋ณธ ์ปจํ ์ธ ์ ๋ํ ๋ฌด๋จ ์คํฌ๋ํ, ํฌ๋กค๋ง, ๋ฐ ์๋ํ๋ ๋ฐ์ดํฐ ์์ง์ ๋ฒ์ ์ ์ฌ์ ๋์์ด ๋ฉ๋๋ค.
- AI ํ์ต ์ ํ: ์ฌ๋ฅ๋ท์ AI ์์ฑ ์ปจํ ์ธ ๋ฅผ ํ AI ๋ชจ๋ธ ํ์ต์ ๋ฌด๋จ ์ฌ์ฉํ๋ ํ์๋ ๊ธ์ง๋๋ฉฐ, ์ด๋ ์ง์ ์ฌ์ฐ๊ถ ์นจํด๋ก ๊ฐ์ฃผ๋ฉ๋๋ค.
์์ง ๋๊ธ์ด ์์ต๋๋ค.