์ฝ˜ํ…์ธ  ๋Œ€ํ‘œ ์ด๋ฏธ์ง€ - ๐Ÿš€ 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. ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ: ๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ ์„œ๋ฒ„์— ๋ถ„์‚ฐ ์ €์žฅํ•ด์„œ ๊ฐ€์šฉ์„ฑ๊ณผ ๋‚ด๊ฒฐํ•จ์„ฑ์„ ๋†’์—ฌ.

๊ด€๊ณ„ํ˜• DB (RDBMS) Users ํ…Œ์ด๋ธ” ๊ณ ์ •๋œ ์Šคํ‚ค๋งˆ ์—„๊ฒฉํ•œ ๊ตฌ์กฐ Orders ํ…Œ์ด๋ธ” JOIN ํ•„์š” ๋ณต์žกํ•œ ๊ด€๊ณ„ Products ํ…Œ์ด๋ธ” ์ˆ˜์ง ํ™•์žฅ ACID ๋ณด์žฅ NoSQL (DynamoDB) ์œ ์—ฐํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์Šคํ‚ค๋งˆ๋ฆฌ์Šค ์ˆ˜ํ‰ ํ™•์žฅ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ ๊ณ ์„ฑ๋Šฅ ๋น ๋ฅธ ์กฐํšŒ Key-Value ๋‹จ์ˆœ ์ฟผ๋ฆฌ

๐ŸŽฏ DynamoDB๊ฐ€ ๋ญ๊ธธ๋ž˜?

DynamoDB๋Š” AWS(Amazon Web Services)์—์„œ ์ œ๊ณตํ•˜๋Š” ์™„์ „ ๊ด€๋ฆฌํ˜• NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋น„์Šค์•ผ. 2012๋…„์— ์ถœ์‹œ๋˜์—ˆ๊ณ , ์•„๋งˆ์กด ์ž์ฒด ์„œ๋น„์Šค์—์„œ๋„ ์‚ฌ์šฉํ•  ๋งŒํผ ๊ฒ€์ฆ๋œ ๊ธฐ์ˆ ์ด์ง€. ๐Ÿ†

"์™„์ „ ๊ด€๋ฆฌํ˜•"์ด๋ผ๋Š” ๊ฒŒ ๋ญ๋ƒ๊ณ ? ์„œ๋ฒ„ ๊ด€๋ฆฌ, ์†Œํ”„ํŠธ์›จ์–ด ํŒจ์น˜, ๋ฐฑ์—…, ๋ณต์ œ ๊ฐ™์€ ๊ท€์ฐฎ์€ ์ž‘์—…๋“ค์„ AWS๊ฐ€ ๋‹ค ์•Œ์•„์„œ ํ•ด์ค€๋‹ค๋Š” ๊ฑฐ์•ผ. ๋„ˆ๋Š” ๊ทธ๋ƒฅ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋งํ•˜๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์—๋งŒ ์ง‘์ค‘ํ•˜๋ฉด ๋ผ. ๊ฐœ๋ฐœ์ž ์ž…์žฅ์—์„œ๋Š” ์ •๋ง ํŽธํ•˜์ง€! ๐Ÿ˜Ž

๐Ÿ’ช DynamoDB์˜ ๊ฐ•๋ ฅํ•œ ํŠน์ง•๋“ค

โ€ข ๋ฐ€๋ฆฌ์ดˆ ๋‹จ์œ„์˜ ์‘๋‹ต ์†๋„: ๋ฐ์ดํ„ฐ ์–‘์ด ์•„๋ฌด๋ฆฌ ๋งŽ์•„๋„ ์ผ๊ด€๋œ ์„ฑ๋Šฅ์„ ์œ ์ง€ํ•ด.

โ€ข ์ž๋™ ํ™•์žฅ: ํŠธ๋ž˜ํ”ฝ์ด ์ฆ๊ฐ€ํ•˜๋ฉด ์ž๋™์œผ๋กœ ์šฉ๋Ÿ‰์„ ๋Š˜๋ ค์ค˜. ๋ฐ˜๋Œ€๋กœ ์ค„์–ด๋“ค๋ฉด ์ถ•์†Œ๋„ ํ•ด.

โ€ข ๊ธ€๋กœ๋ฒŒ ํ…Œ์ด๋ธ”: ์—ฌ๋Ÿฌ AWS ๋ฆฌ์ „์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์ œํ•ด์„œ ์ „ ์„ธ๊ณ„ ์–ด๋””์„œ๋“  ๋น ๋ฅธ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•ด.

โ€ข ์„œ๋ฒ„๋ฆฌ์Šค: ์„œ๋ฒ„๋ฅผ ํ”„๋กœ๋น„์ €๋‹ํ•˜๊ฑฐ๋‚˜ ๊ด€๋ฆฌํ•  ํ•„์š”๊ฐ€ ์—†์–ด.

โ€ข ๋ณด์•ˆ: ์•”ํ˜ธํ™”, IAM ํ†ตํ•ฉ, VPC ์—”๋“œํฌ์ธํŠธ ๋“ฑ ๊ฐ•๋ ฅํ•œ ๋ณด์•ˆ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ด.

โ€ข ๋ฐฑ์—… ๋ฐ ๋ณต์›: ์ž๋™ ๋ฐฑ์—…๊ณผ ํŠน์ • ์‹œ์  ๋ณต์›(PITR)์„ ์ง€์›ํ•ด.

์žฌ๋Šฅ๋„ท ๊ฐ™์€ ํ”Œ๋žซํผ์—์„œ๋„ ์‚ฌ์šฉ์ž ํ™œ๋™ ๋กœ๊ทธ, ์‹ค์‹œ๊ฐ„ ์•Œ๋ฆผ, ์ฑ„ํŒ… ๋ฉ”์‹œ์ง€ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ DynamoDB๋กœ ๊ด€๋ฆฌํ•˜๋ฉด ์ •๋ง ํšจ์œจ์ ์ด์•ผ. ํŠนํžˆ ํŠธ๋ž˜ํ”ฝ์ด ๊ฐ‘์ž๊ธฐ ๋ชฐ๋ฆด ๋•Œ ์ž๋™์œผ๋กœ ํ™•์žฅ๋˜๋‹ˆ๊นŒ ์„œ๋น„์Šค ์•ˆ์ •์„ฑ๋„ ๋†’์•„์ง€์ง€. ๐Ÿš€

๐Ÿงฉ DynamoDB์˜ ํ•ต์‹ฌ ๊ฐœ๋… ์ดํ•ดํ•˜๊ธฐ

DynamoDB๋ฅผ ์ œ๋Œ€๋กœ ํ™œ์šฉํ•˜๋ ค๋ฉด ๋ช‡ ๊ฐ€์ง€ ํ•ต์‹ฌ ๊ฐœ๋…์„ ์ดํ•ดํ•ด์•ผ ํ•ด. ๊ด€๊ณ„ํ˜• DB์™€๋Š” ์šฉ์–ด๋„ ๋‹ค๋ฅด๊ณ  ๊ฐœ๋…๋„ ๋‹ค๋ฅด๋‹ˆ๊นŒ ์ฒ˜์Œ์—” ์ข€ ํ—ท๊ฐˆ๋ฆด ์ˆ˜ ์žˆ์–ด. ํ•˜๋‚˜์”ฉ ์ฒœ์ฒœํžˆ ์•Œ์•„๋ณด์ž! ๐Ÿ“š

๐Ÿ“ฆ ํ…Œ์ด๋ธ” (Table)

DynamoDB์˜ ํ…Œ์ด๋ธ”์€ ๊ด€๊ณ„ํ˜• DB์˜ ํ…Œ์ด๋ธ”๊ณผ ๋น„์Šทํ•˜์ง€๋งŒ, ์Šคํ‚ค๋งˆ๊ฐ€ ํ›จ์”ฌ ์œ ์—ฐํ•ด. ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค ๋•Œ ํŒŒํ‹ฐ์…˜ ํ‚ค(Partition Key)๋งŒ ์ •์˜ํ•˜๋ฉด ๋ผ. ๋‚˜๋จธ์ง€ ์†์„ฑ๋“ค์€ ํ•ญ๋ชฉ(Item)์„ ์ถ”๊ฐ€ํ•  ๋•Œ ์ž์œ ๋กญ๊ฒŒ ๋„ฃ์„ ์ˆ˜ ์žˆ์–ด.

๐Ÿ“ ํ•ญ๋ชฉ (Item)

ํ•ญ๋ชฉ์€ ๊ด€๊ณ„ํ˜• DB์˜ ํ–‰(Row)์— ํ•ด๋‹นํ•ด. ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ ๋ ˆ์ฝ”๋“œ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋ผ. ๊ฐ ํ•ญ๋ชฉ์€ ๊ณ ์œ ํ•œ ํ‚ค๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , ์—ฌ๋Ÿฌ ์†์„ฑ(Attribute)๋“ค๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์–ด. ์ค‘์š”ํ•œ ๊ฑด, ๊ฐ™์€ ํ…Œ์ด๋ธ” ์•ˆ์˜ ํ•ญ๋ชฉ๋“ค์ด๋ผ๋„ ์„œ๋กœ ๋‹ค๋ฅธ ์†์„ฑ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฑฐ์•ผ! ๐ŸŽจ

๐Ÿท๏ธ ์†์„ฑ (Attribute)

์†์„ฑ์€ ๊ด€๊ณ„ํ˜• DB์˜ ์—ด(Column)๊ณผ ๋น„์Šทํ•ด. ํ•˜์ง€๋งŒ ๋ชจ๋“  ํ•ญ๋ชฉ์ด ๊ฐ™์€ ์†์„ฑ์„ ๊ฐ€์งˆ ํ•„์š”๋Š” ์—†์–ด. ์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉ์ž ํ…Œ์ด๋ธ”์—์„œ ์–ด๋–ค ์‚ฌ์šฉ์ž๋Š” "nickname" ์†์„ฑ์ด ์žˆ๊ณ , ์–ด๋–ค ์‚ฌ์šฉ์ž๋Š” ์—†์„ ์ˆ˜๋„ ์žˆ์ง€.

๐Ÿ”‘ ๊ธฐ๋ณธ ํ‚ค (Primary Key)

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 ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง ํ”„๋กœ์„ธ์Šค STEP 1 ์ ‘๊ทผ ํŒจํ„ด ๋ถ„์„ STEP 2 ํ‚ค ์„ค๊ณ„ STEP 3 ์ธ๋ฑ์Šค ์ „๋žต STEP 4 ์ตœ์ ํ™” ์ฟผ๋ฆฌ ํŒจํ„ด ๋ชฉ๋ก โ€ข ์‚ฌ์šฉ์ž ์กฐํšŒ โ€ข ์ฃผ๋ฌธ ๋‚ด์—ญ โ€ข ์ƒํ’ˆ ๊ฒ€์ƒ‰ โ€ข ์นดํ…Œ๊ณ ๋ฆฌ ํ•„ํ„ฐ โ€ข ๊ธฐ๊ฐ„๋ณ„ ํ†ต๊ณ„ ํŒŒํ‹ฐ์…˜ ํ‚ค ์„ ํƒ ๊ณ ์œ ์„ฑ ๋ณด์žฅ ๊ท ๋“ฑ ๋ถ„์‚ฐ ์ ‘๊ทผ ํŒจํ„ด ๋ฐ˜์˜ ํ™•์žฅ์„ฑ ๊ณ ๋ ค GSI/LSI ์„ค๊ณ„ ๋Œ€์ฒด ์ฟผ๋ฆฌ ์ง€์› ์œ ์—ฐํ•œ ๊ฒ€์ƒ‰ ๋น„์šฉ ์ตœ์ ํ™” ํ”„๋กœ์ ์…˜ ์ „๋žต ์„ฑ๋Šฅ ํŠœ๋‹ ํ•ซ ํŒŒํ‹ฐ์…˜ ๋ฐฉ์ง€ ๋ฐฐ์น˜ ์ž‘์—… ์บ์‹ฑ ์ „๋žต ์šฉ๋Ÿ‰ ๋ชจ๋“œ ์„ ํƒ

๐Ÿ”‘ ํŒŒํ‹ฐ์…˜ ํ‚ค์™€ ์ •๋ ฌ ํ‚ค ์„ค๊ณ„ ์ „๋žต

ํŒŒํ‹ฐ์…˜ ํ‚ค์™€ ์ •๋ ฌ ํ‚ค ์„ค๊ณ„๋Š” 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 - Global Secondary Index)

GSI๋Š” ์™„์ „ํžˆ ๋‹ค๋ฅธ ํŒŒํ‹ฐ์…˜ ํ‚ค์™€ ์ •๋ ฌ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ธ๋ฑ์Šค์•ผ. ๊ธฐ๋ณธ ํ…Œ์ด๋ธ”๊ณผ๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ์ž‘๋™ํ•˜์ง€.

ํŠน์ง•:
โ€ข ๊ธฐ๋ณธ ํ…Œ์ด๋ธ”๊ณผ ๋‹ค๋ฅธ ํ‚ค ์Šคํ‚ค๋งˆ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
โ€ข ๋ชจ๋“  ํŒŒํ‹ฐ์…˜์— ๊ฑธ์ณ ์ฟผ๋ฆฌ ๊ฐ€๋Šฅ
โ€ข ๋ณ„๋„์˜ ์ฝ๊ธฐ/์“ฐ๊ธฐ ์šฉ๋Ÿ‰ ์„ค์ •
โ€ข ์ตœ์ข… ์ผ๊ด€์„ฑ(Eventually Consistent) ์ฝ๊ธฐ๋งŒ ์ง€์›
โ€ข ํ…Œ์ด๋ธ”๋‹น ์ตœ๋Œ€ 20๊ฐœ๊นŒ์ง€ ์ƒ์„ฑ ๊ฐ€๋Šฅ

์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉ์ž ํ…Œ์ด๋ธ”์—์„œ ์ด๋ฉ”์ผ๋กœ ์‚ฌ์šฉ์ž๋ฅผ ์ฐพ๊ณ  ์‹ถ๋‹ค๋ฉด? ์ด๋ฉ”์ผ์„ ํŒŒํ‹ฐ์…˜ ํ‚ค๋กœ ํ•˜๋Š” GSI๋ฅผ ๋งŒ๋“ค๋ฉด ๋ผ!

๐Ÿ“ ๋กœ์ปฌ ๋ณด์กฐ ์ธ๋ฑ์Šค (LSI - Local Secondary Index)

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์—์„œ๋Š” ์ฟผ๋ฆฌ ๋ฐฉ์‹์— ๋”ฐ๋ผ ์„ฑ๋Šฅ๊ณผ ๋น„์šฉ์ด ํฌ๊ฒŒ ๋‹ฌ๋ผ์ ธ. ๐Ÿ’ฐ

๐ŸŽฏ Query vs Scan

DynamoDB์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š” ๋ฐฉ๋ฒ•์€ ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€์•ผ:

Query: ํŒŒํ‹ฐ์…˜ ํ‚ค๋ฅผ ์ง€์ •ํ•ด์„œ ํŠน์ • ํŒŒํ‹ฐ์…˜์˜ ๋ฐ์ดํ„ฐ๋งŒ ์ฝ์–ด. ์ •๋ ฌ ํ‚ค๋กœ ๋ฒ”์œ„๋ฅผ ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ์ง€. ๋งค์šฐ ํšจ์œจ์ ์ด๊ณ  ๋น ๋ฅด๋ฉฐ ๋น„์šฉ๋„ ์ €๋ ดํ•ด. ๐Ÿ‘

Scan: ํ…Œ์ด๋ธ” ์ „์ฒด๋ฅผ ์Šค์บ”ํ•ด. ํ•„ํ„ฐ ์กฐ๊ฑด์„ ์ค„ ์ˆ˜ ์žˆ์ง€๋งŒ, ์ผ๋‹จ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์€ ๋‹ค์Œ ํ•„ํ„ฐ๋งํ•ด. ๋А๋ฆฌ๊ณ  ๋น„์šฉ๋„ ๋งŽ์ด ๋“ค์–ด. ๊ฐ€๋Šฅํ•˜๋ฉด ํ”ผํ•ด์•ผ ํ•ด! ๐Ÿ‘Ž

โš ๏ธ Scan์€ ์ •๋ง ์ตœํ›„์˜ ์ˆ˜๋‹จ์ด์•ผ! ํ…Œ์ด๋ธ”์ด ์ปค์งˆ์ˆ˜๋ก Scan์€ ์ ์  ๋” ๋А๋ ค์ง€๊ณ  ๋น„์šฉ๋„ ์ฆ๊ฐ€ํ•ด. ๋งŒ์•ฝ Scan์„ ์ž์ฃผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๋ฉด, ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง์„ ๋‹ค์‹œ ๊ฒ€ํ† ํ•ด๋ด์•ผ ํ•ด. ์•„๋งˆ GSI๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ํ‚ค ์„ค๊ณ„๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒŒ ๋‚˜์„ ๊ฑฐ์•ผ.

โšก ๋ฐฐ์น˜ ์ž‘์—… ํ™œ์šฉ

์—ฌ๋Ÿฌ ํ•ญ๋ชฉ์„ ํ•œ ๋ฒˆ์— ์ฒ˜๋ฆฌํ•  ๋•Œ๋Š” ๋ฐฐ์น˜ ์ž‘์—…์„ ์‚ฌ์šฉํ•˜๋ฉด ํšจ์œจ์ ์ด์•ผ:

BatchGetItem: ์ตœ๋Œ€ 100๊ฐœ์˜ ํ•ญ๋ชฉ์„ ํ•œ ๋ฒˆ์— ์ฝ์–ด์˜ฌ ์ˆ˜ ์žˆ์–ด. ์—ฌ๋Ÿฌ ๊ฐœ์˜ GetItem์„ ํ•˜๋‚˜๋กœ ๋ฌถ์€ ๊ฑฐ์ง€.

BatchWriteItem: ์ตœ๋Œ€ 25๊ฐœ์˜ ํ•ญ๋ชฉ์„ ํ•œ ๋ฒˆ์— ์“ฐ๊ฑฐ๋‚˜ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์–ด. PutItem์ด๋‚˜ DeleteItem์„ ๋ฌถ์€ ๊ฑฐ์•ผ.

๋ฐฐ์น˜ ์ž‘์—…์„ ์‚ฌ์šฉํ•˜๋ฉด ๋„คํŠธ์›Œํฌ ์™•๋ณต ํšŸ์ˆ˜๊ฐ€ ์ค„์–ด๋“ค์–ด์„œ ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋˜๊ณ  ๋น„์šฉ๋„ ์ ˆ๊ฐ๋ผ. ๐Ÿš€

๐Ÿ’ก ํŽ˜์ด์ง€๋„ค์ด์…˜ ๊ตฌํ˜„: ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ๋•Œ๋Š” ํŽ˜์ด์ง€๋„ค์ด์…˜์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•ด. DynamoDB๋Š” ํ•œ ๋ฒˆ์˜ ์ฟผ๋ฆฌ๋กœ ์ตœ๋Œ€ 1MB์˜ ๋ฐ์ดํ„ฐ๋งŒ ๋ฐ˜ํ™˜ํ•˜๊ฑฐ๋“ . LastEvaluatedKey๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋‹ค์Œ ํŽ˜์ด์ง€๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์–ด.

๐Ÿ”„ ์กฐ๊ฑด๋ถ€ ์“ฐ๊ธฐ์™€ ํŠธ๋žœ์žญ์…˜

๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๋ ค๋ฉด ์กฐ๊ฑด๋ถ€ ์“ฐ๊ธฐ๋‚˜ ํŠธ๋žœ์žญ์…˜์„ ํ™œ์šฉํ•ด์•ผ ํ•ด:

์กฐ๊ฑด๋ถ€ ์“ฐ๊ธฐ (Conditional Writes): ํŠน์ • ์กฐ๊ฑด์ด ๋งŒ์กฑ๋  ๋•Œ๋งŒ ์“ฐ๊ธฐ๋ฅผ ์ˆ˜ํ–‰ํ•ด. ์˜ˆ๋ฅผ ๋“ค์–ด, "์žฌ๊ณ ๊ฐ€ 0๋ณด๋‹ค ํด ๋•Œ๋งŒ ์ฃผ๋ฌธ ์ƒ์„ฑ" ๊ฐ™์€ ๋กœ์ง์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์ง€.

ํŠธ๋žœ์žญ์…˜ (Transactions): ์—ฌ๋Ÿฌ ์ž‘์—…์„ ์›์ž์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•ด. ๋ชจ๋‘ ์„ฑ๊ณตํ•˜๊ฑฐ๋‚˜ ๋ชจ๋‘ ์‹คํŒจํ•˜๊ฑฐ๋‚˜ ๋‘˜ ์ค‘ ํ•˜๋‚˜์•ผ. ์ตœ๋Œ€ 25๊ฐœ์˜ ํ•ญ๋ชฉ์„ ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ๋ฌถ์„ ์ˆ˜ ์žˆ์–ด.

Query vs Scan ์„ฑ๋Šฅ ๋น„๊ต Query ์ž‘์—… โœ… ํŒŒํ‹ฐ์…˜ ํ‚ค๋กœ ์ง์ ‘ ์ ‘๊ทผ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ์ฝ์Œ ๋น ๋ฅธ ์‘๋‹ต ์†๋„ ๋‚ฎ์€ ๋น„์šฉ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ์„ฑ๋Šฅ ๊ถŒ์žฅ ๋ฐฉ์‹ ๐Ÿ‘ Scan ์ž‘์—… โš ๏ธ ์ „์ฒด ํ…Œ์ด๋ธ” ์Šค์บ” ๋ถˆํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋„ ์ฝ์Œ ๋А๋ฆฐ ์‘๋‹ต ์†๋„ ๋†’์€ ๋น„์šฉ ์„ฑ๋Šฅ ์ €ํ•˜ ์œ„ํ—˜ ์ตœํ›„์˜ ์ˆ˜๋‹จ ๐Ÿ‘Ž

๐Ÿ’ก ์‹ค์ „ ๋ชจ๋ธ๋ง ์˜ˆ์ œ

์ด๋ก ๋งŒ ๋ฐฐ์šฐ๋ฉด ์žฌ๋ฏธ์—†์ง€! ์‹ค์ œ ์‚ฌ๋ก€๋ฅผ ํ†ตํ•ด 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 ์„ค๊ณ„

๊ธฐ๋ณธ ํ‚ค๋งŒ์œผ๋กœ ์ปค๋ฒ„ํ•  ์ˆ˜ ์—†๋Š” ์ ‘๊ทผ ํŒจํ„ด์„ ์œ„ํ•ด GSI๋ฅผ ์ถ”๊ฐ€ํ•ด๋ณด์ž:

GSI1 - ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ์žฌ๋Šฅ ๊ฒ€์ƒ‰:
โ€ข ํŒŒํ‹ฐ์…˜ ํ‚ค: category
โ€ข ์ •๋ ฌ ํ‚ค: rating (๋†’์€ ํ‰์  ์ˆœ ์ •๋ ฌ)

GSI2 - ์ด๋ฉ”์ผ๋กœ ์‚ฌ์šฉ์ž ์ฐพ๊ธฐ:
โ€ข ํŒŒํ‹ฐ์…˜ ํ‚ค: email
โ€ข ์ •๋ ฌ ํ‚ค: ์—†์Œ

GSI3 - ์ตœ๊ทผ ๊ฑฐ๋ž˜ ๋‚ด์—ญ:
โ€ข ํŒŒํ‹ฐ์…˜ ํ‚ค: status (์˜ˆ: "COMPLETED")
โ€ข ์ •๋ ฌ ํ‚ค: timestamp (์ตœ๊ทผ ์ˆœ ์ •๋ ฌ)

๐Ÿ’ก ์‹ค์ „ ํŒ: ์žฌ๋Šฅ๋„ท์ฒ˜๋Ÿผ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์ด ์žˆ๋Š” ํ”Œ๋žซํผ์—์„œ๋Š” ์ ‘๊ทผ ํŒจํ„ด์„ ๋ช…ํ™•ํžˆ ์ •์˜ํ•˜๋Š” ๊ฒŒ ์ •๋ง ์ค‘์š”ํ•ด. ๊ฐ ํ™”๋ฉด์—์„œ ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ์กฐํšŒํ• ์ง€ ๋ฏธ๋ฆฌ ๋ฌธ์„œํ™”ํ•ด๋‘๋ฉด, ๋‚˜์ค‘์— ๋ชจ๋ธ๋ง์„ ์ˆ˜์ •ํ•  ๋•Œ๋„ ํ›จ์”ฌ ์ˆ˜์›”ํ•ด.

๐ŸŽญ ๊ณ ๊ธ‰ ํŒจํ„ด๊ณผ ๊ธฐ๋ฒ•

๊ธฐ๋ณธ์„ ๋„˜์–ด์„œ ๋” ๊ณ ๊ธ‰ ๊ธฐ๋ฒ•๋“ค์„ ์•Œ์•„๋ณด์ž. ์ด๋Ÿฐ ํŒจํ„ด๋“ค์„ ์•Œ๊ณ  ์žˆ์œผ๋ฉด ๋ณต์žกํ•œ ์š”๊ตฌ์‚ฌํ•ญ๋„ ์šฐ์•„ํ•˜๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์–ด! ๐ŸŽฉ

๐Ÿ”„ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ ํŒจํ„ด (Adjacency List Pattern)

๊ทธ๋ž˜ํ”„ ํ˜•ํƒœ์˜ ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•  ๋•Œ ์œ ์šฉํ•œ ํŒจํ„ด์ด์•ผ. ์˜ˆ๋ฅผ ๋“ค์–ด, ์†Œ์…œ ๋„คํŠธ์›Œํฌ์—์„œ ํŒ”๋กœ์šฐ ๊ด€๊ณ„๋ฅผ ์ €์žฅํ•œ๋‹ค๊ณ  ํ•ด๋ณด์ž:

โ€ข PK: USER#A, SK: USER#B โ†’ A๊ฐ€ B๋ฅผ ํŒ”๋กœ์šฐ
โ€ข PK: USER#B, SK: USER#A โ†’ B์˜ ํŒ”๋กœ์›Œ์— A๊ฐ€ ์žˆ์Œ

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด "A๊ฐ€ ํŒ”๋กœ์šฐํ•˜๋Š” ์‚ฌ๋žŒ๋“ค"๊ณผ "A๋ฅผ ํŒ”๋กœ์šฐํ•˜๋Š” ์‚ฌ๋žŒ๋“ค"์„ ๋ชจ๋‘ ํšจ์œจ์ ์œผ๋กœ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์–ด.

๐Ÿ“Š ์ง‘๊ณ„ ํŒจํ„ด (Aggregation Pattern)

ํ†ต๊ณ„๋‚˜ ์ง‘๊ณ„ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฏธ๋ฆฌ ๊ณ„์‚ฐํ•ด์„œ ์ €์žฅํ•˜๋Š” ํŒจํ„ด์ด์•ผ. ์˜ˆ๋ฅผ ๋“ค์–ด, ์žฌ๋Šฅ๋ณ„ ๋ฆฌ๋ทฐ ๊ฐœ์ˆ˜์™€ ํ‰๊ท  ํ‰์ ์„ ๋งค๋ฒˆ ๊ณ„์‚ฐํ•˜๋Š” ๋Œ€์‹ , ๋ฆฌ๋ทฐ๊ฐ€ ์ถ”๊ฐ€๋  ๋•Œ๋งˆ๋‹ค ์ง‘๊ณ„ ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฑฐ์ง€.

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์„ ํ™œ์„ฑํ™”ํ•˜๊ณ , ์ •๊ธฐ์ ์œผ๋กœ ์˜จ๋””๋งจ๋“œ ๋ฐฑ์—…๋„ ๋งŒ๋“ค์–ด๋‘ฌ. ๋‚˜์ค‘์— ํ›„ํšŒํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋ฏธ๋ฆฌ ์ค€๋น„ํ•˜๋Š” ๊ฒŒ ๋ฐฑ๋ฐฐ ๋‚ซ์ง€!

๐Ÿ“Š ๋ชจ๋‹ˆํ„ฐ๋ง๊ณผ ์„ฑ๋Šฅ ํŠœ๋‹

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์šด์˜ํ•˜๋‹ค ๋ณด๋ฉด ์„ฑ๋Šฅ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ์–ด. ๋ฏธ๋ฆฌ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ๋ฌธ์ œ๋ฅผ ๋น ๋ฅด๊ฒŒ ํŒŒ์•…ํ•˜๋Š” ๊ฒŒ ์ค‘์š”ํ•ด! ๐Ÿ”

๐Ÿ“ˆ CloudWatch ๋ฉ”ํŠธ๋ฆญ

DynamoDB๋Š” ๋‹ค์–‘ํ•œ ๋ฉ”ํŠธ๋ฆญ์„ CloudWatch๋กœ ์ œ๊ณตํ•ด:

โ€ข ConsumedReadCapacityUnits / ConsumedWriteCapacityUnits: ์‹ค์ œ ์‚ฌ์šฉํ•œ ์šฉ๋Ÿ‰
โ€ข ProvisionedReadCapacityUnits / ProvisionedWriteCapacityUnits: ํ”„๋กœ๋น„์ €๋‹๋œ ์šฉ๋Ÿ‰
โ€ข ThrottledRequests: ์ œํ•œ๋œ ์š”์ฒญ ์ˆ˜ (์šฉ๋Ÿ‰ ์ดˆ๊ณผ)
โ€ข SystemErrors: ์‹œ์Šคํ…œ ์˜ค๋ฅ˜ ๋ฐœ์ƒ ํšŸ์ˆ˜
โ€ข UserErrors: ์‚ฌ์šฉ์ž ์˜ค๋ฅ˜ ๋ฐœ์ƒ ํšŸ์ˆ˜
โ€ข ConditionalCheckFailedRequests: ์กฐ๊ฑด๋ถ€ ์“ฐ๊ธฐ ์‹คํŒจ ํšŸ์ˆ˜

์ด๋Ÿฐ ๋ฉ”ํŠธ๋ฆญ๋“ค์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋ฉด ๋ฌธ์ œ๋ฅผ ์กฐ๊ธฐ์— ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ์–ด.

๐ŸŽฏ ์„ฑ๋Šฅ ๋ฌธ์ œ ํ•ด๊ฒฐ

ํ•ซ ํŒŒํ‹ฐ์…˜ ๋ฌธ์ œ:
โ€ข ์ฆ์ƒ: ํŠน์ • ํŒŒํ‹ฐ์…˜์— ์š”์ฒญ์ด ์ง‘์ค‘๋˜์–ด ThrottledRequests ์ฆ๊ฐ€
โ€ข ํ•ด๊ฒฐ: ํŒŒํ‹ฐ์…˜ ํ‚ค ์žฌ์„ค๊ณ„, ์“ฐ๊ธฐ ์ƒค๋”ฉ ๊ธฐ๋ฒ• ์ ์šฉ

์šฉ๋Ÿ‰ ๋ถ€์กฑ:
โ€ข ์ฆ์ƒ: ThrottledRequests๊ฐ€ ์ง€์†์ ์œผ๋กœ ๋ฐœ์ƒ
โ€ข ํ•ด๊ฒฐ: ํ”„๋กœ๋น„์ €๋‹ ์šฉ๋Ÿ‰ ์ฆ๊ฐ€, Auto Scaling ์„ค์ •, ์˜จ๋””๋งจ๋“œ ๋ชจ๋“œ ์ „ํ™˜

ํฐ ํ•ญ๋ชฉ ํฌ๊ธฐ:
โ€ข ์ฆ์ƒ: ์ฝ๊ธฐ/์“ฐ๊ธฐ ๋น„์šฉ์ด ์˜ˆ์ƒ๋ณด๋‹ค ๋†’์Œ
โ€ข ํ•ด๊ฒฐ: ํ•ญ๋ชฉ ๋ถ„ํ• , ์••์ถ•, ๋ถˆํ•„์š”ํ•œ ์†์„ฑ ์ œ๊ฑฐ

๋น„ํšจ์œจ์ ์ธ ์ฟผ๋ฆฌ:
โ€ข ์ฆ์ƒ: ์‘๋‹ต ์‹œ๊ฐ„์ด ๋А๋ฆผ, ๋น„์šฉ์ด ๋†’์Œ
โ€ข ํ•ด๊ฒฐ: Scan์„ Query๋กœ ๋ณ€๊ฒฝ, GSI ์ถ”๊ฐ€, ํ”„๋กœ์ ์…˜ ํ‘œํ˜„์‹ ์‚ฌ์šฉ

๐Ÿ’ก ํ”„๋กœ์•กํ‹ฐ๋ธŒ ๋ชจ๋‹ˆํ„ฐ๋ง: CloudWatch ์•Œ๋žŒ์„ ์„ค์ •ํ•ด์„œ ๋ฉ”ํŠธ๋ฆญ์ด ์ž„๊ณ„๊ฐ’์„ ์ดˆ๊ณผํ•˜๋ฉด ์ž๋™์œผ๋กœ ์•Œ๋ฆผ์„ ๋ฐ›๋„๋ก ํ•ด. ์˜ˆ๋ฅผ ๋“ค์–ด, ThrottledRequests๊ฐ€ 100์„ ๋„˜์œผ๋ฉด ์•Œ๋ฆผ์„ ๋ณด๋‚ด๋Š” ์‹์œผ๋กœ ๋ง์ด์•ผ. ๋ฌธ์ œ๊ฐ€ ์ปค์ง€๊ธฐ ์ „์— ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ์–ด!

๐Ÿ”ง DynamoDB Accelerator (DAX)

์ฝ๊ธฐ ์„ฑ๋Šฅ์„ ๊ทน๋Œ€์ ์œผ๋กœ ํ–ฅ์ƒ์‹œํ‚ค๊ณ  ์‹ถ๋‹ค๋ฉด 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 ์„ฑ๊ณต ๋กœ๋“œ๋งต STEP 1 ์š”๊ตฌ์‚ฌํ•ญ ๋ถ„์„ STEP 2 ์ ‘๊ทผ ํŒจํ„ด ์ •์˜ STEP 3 ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง STEP 4 ํ…Œ์ŠคํŠธ & ๊ฒ€์ฆ STEP 5 ๋ฐฐํฌ & ์ตœ์ ํ™” ํ•ต์‹ฌ ๋„๊ตฌ โ€ข AWS Console โ€ข NoSQL Workbench โ€ข CloudWatch โ€ข AWS CLI โ€ข SDK โ€ข DynamoDB Streams ๋ชจ๋‹ˆํ„ฐ๋ง โ€ข ์šฉ๋Ÿ‰ ์‚ฌ์šฉ๋Ÿ‰ โ€ข ์‘๋‹ต ์‹œ๊ฐ„ โ€ข ์—๋Ÿฌ์œจ โ€ข ๋น„์šฉ โ€ข ํ•ซ ํŒŒํ‹ฐ์…˜ โ€ข ์“ฐ๋กœํ‹€๋ง ์ตœ์ ํ™” โ€ข ์ฟผ๋ฆฌ ํŠœ๋‹ โ€ข ์ธ๋ฑ์Šค ์ „๋žต โ€ข ์šฉ๋Ÿ‰ ์กฐ์ • โ€ข ์บ์‹ฑ โ€ข ๋ฐฐ์น˜ ์ž‘์—… โ€ข ์••์ถ• ๋ณด์•ˆ โ€ข IAM ์ •์ฑ… โ€ข ์•”ํ˜ธํ™” โ€ข VPC ์—”๋“œํฌ์ธํŠธ โ€ข ๋ฐฑ์—… โ€ข PITR โ€ข ๊ฐ์‚ฌ ๋กœ๊น…

๐ŸŽฌ ๋งˆ๋ฌด๋ฆฌํ•˜๋ฉฐ

์™€, ์ •๋ง ๊ธด ์—ฌ์ •์ด์—ˆ์ง€? ๐Ÿ˜… DynamoDB์˜ NoSQL ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง์— ๋Œ€ํ•ด ๊นŠ์ด ์žˆ๊ฒŒ ์•Œ์•„๋ดค์–ด. ๊ด€๊ณ„ํ˜• DB์™€๋Š” ์™„์ „ํžˆ ๋‹ค๋ฅธ ์ ‘๊ทผ ๋ฐฉ์‹์ด๋ผ ์ฒ˜์Œ์—” ์–ด๋ ต๊ฒŒ ๋А๊ปด์งˆ ์ˆ˜ ์žˆ์ง€๋งŒ, ํ•ต์‹ฌ ์›์น™๋“ค์„ ์ดํ•ดํ•˜๊ณ  ๋‚˜๋ฉด ์ •๋ง ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ๊ฐ€ ๋  ๊ฑฐ์•ผ.

๊ธฐ์–ตํ•ด์•ผ ํ•  ํ•ต์‹ฌ์€:
โ€ข ์ ‘๊ทผ ํŒจํ„ด์„ ๋จผ์ € ์ •์˜ํ•˜๊ณ 
โ€ข ํŒŒํ‹ฐ์…˜ ํ‚ค๋ฅผ ์‹ ์ค‘ํ•˜๊ฒŒ ์„ ํƒํ•˜๊ณ 
โ€ข Query๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  Scan์€ ํ”ผํ•˜๊ณ 
โ€ข ๋น„์šฉ์„ ํ•ญ์ƒ ์—ผ๋‘์— ๋‘๊ณ 
โ€ข ๋ชจ๋‹ˆํ„ฐ๋ง๊ณผ ์ตœ์ ํ™”๋ฅผ ์ง€์†ํ•˜๋Š” ๊ฑฐ์•ผ! ๐ŸŽฏ

DynamoDB๋Š” ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์‚ฌ์šฉํ•˜๋ฉด ์—„์ฒญ๋‚œ ํ™•์žฅ์„ฑ๊ณผ ์„ฑ๋Šฅ์„ ์ œ๊ณตํ•ด. ํ•˜์ง€๋งŒ ์ž˜๋ชป ์‚ฌ์šฉํ•˜๋ฉด ๋น„์šฉ ํญํƒ„๊ณผ ์„ฑ๋Šฅ ๋ฌธ์ œ๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ์–ด. ์ด ๊ธ€์—์„œ ๋ฐฐ์šด ๋‚ด์šฉ๋“ค์„ ์‹ค์ „์— ์ ์šฉํ•˜๋ฉด์„œ ๊ฒฝํ—˜์„ ์Œ“์•„๊ฐ€๊ธธ ๋ฐ”๋ผ! ๐Ÿ’ช

๐Ÿš€ ๋‹ค์Œ ๋‹จ๊ณ„

์ด๋ก ์„ ๋ฐฐ์› ์œผ๋‹ˆ ์ด์ œ ์‹ค์Šต์ด์•ผ! AWS ํ”„๋ฆฌํ‹ฐ์–ด๋กœ DynamoDB๋ฅผ ๋ฌด๋ฃŒ๋กœ ์‚ฌ์šฉํ•ด๋ณผ ์ˆ˜ ์žˆ์–ด. ๊ฐ„๋‹จํ•œ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค์–ด๋ณด๋ฉด์„œ ์ง์ ‘ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง์„ ํ•ด๋ณด๋Š” ๊ฒŒ ๊ฐ€์žฅ ์ข‹์€ ํ•™์Šต ๋ฐฉ๋ฒ•์ด์•ผ.

์žฌ๋Šฅ๋„ท ๊ฐ™์€ ํ”Œ๋žซํผ์—์„œ DB ๊ด€๋ จ ์žฌ๋Šฅ์„ ๊ณต์œ ํ•˜๋Š” ์ „๋ฌธ๊ฐ€๋“ค์„ ์ฐพ์•„๋ณด๋Š” ๊ฒƒ๋„ ์ข‹์€ ๋ฐฉ๋ฒ•์ด์•ผ. ์‹ค๋ฌด ๊ฒฝํ—˜์ด ํ’๋ถ€ํ•œ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋ฉ˜ํ† ๋ง์„ ๋ฐ›์œผ๋ฉด ํ›จ์”ฌ ๋น ๋ฅด๊ฒŒ ์„ฑ์žฅํ•  ์ˆ˜ ์žˆ๊ฑฐ๋“ ! ๐ŸŒŸ

ํ˜น์‹œ DynamoDB ๋ชจ๋ธ๋ง์ด๋‚˜ AWS ๊ด€๋ จํ•ด์„œ ๋„์›€์ด ํ•„์š”ํ•˜๋‹ค๋ฉด, ์žฌ๋Šฅ๋„ท์—์„œ ๊ด€๋ จ ์ „๋ฌธ๊ฐ€๋“ค์„ ์ฐพ์•„๋ณด๋Š” ๊ฒƒ๋„ ์ถ”์ฒœํ•ด. ์‹ค์ „ ๊ฒฝํ—˜์„ ๊ฐ€์ง„ ์‚ฌ๋žŒ๋“ค์˜ ์กฐ์–ธ์€ ์ •๋ง ๊ฐ’์ง€๊ฑฐ๋“ !

์ž, ์ด์ œ ๋„ˆ๋„ DynamoDB ์ „๋ฌธ๊ฐ€๊ฐ€ ๋  ์ค€๋น„๊ฐ€ ๋์–ด! ๐Ÿ’ช ์ฒ˜์Œ์—” ์–ด๋ ต๊ฒŒ ๋А๊ปด์งˆ ์ˆ˜ ์žˆ์ง€๋งŒ, ํ•˜๋‚˜์”ฉ ์ ์šฉํ•ด๋ณด๋ฉด์„œ ์ต์ˆ™ํ•ด์ง€๋ฉด ๋ถ„๋ช… ๊ฐ•๋ ฅํ•œ ๋ฌด๊ธฐ๊ฐ€ ๋  ๊ฑฐ์•ผ. ํ™”์ดํŒ…! ๐Ÿš€

๐ŸŽ‰

Happy Modeling with DynamoDB!

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค๊ณ„์˜ ์ƒˆ๋กœ์šด ์„ธ๊ณ„๋ฅผ ์ฆ๊ฒจ๋ณด์„ธ์š”! ๐Ÿ˜Š

๋Œ“๊ธ€ ์ž‘์„ฑ

์ด ๊ธ€์— ๋Œ€ํ•œ ์—ฌ๋Ÿฌ๋ถ„์˜ ์ƒ๊ฐ์„ ๋“ค๋ ค์ฃผ์„ธ์š”

๋Œ“๊ธ€ 0
๋Œ“๊ธ€์„ ๋ถˆ๋Ÿฌ์˜ค๋Š” ์ค‘์ž…๋‹ˆ๋‹ค.

์•„์ง ๋Œ“๊ธ€์ด ์—†์Šต๋‹ˆ๋‹ค.