๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“ŒCS/DB

[DB] NoSQL

by dar0m! 2021. 9. 9.
NoSQL์€ ์ดˆ๊ณ ์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋“ฑ ์„ฑ๋Šฅ์— ํŠนํ™”๋œ ๋ชฉ์ ์„ ์œ„ํ•ด, ๋น„๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ์—, ๋น„๊ตฌ์กฐ์ ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ถ„์‚ฐ ์ €์žฅ ์‹œ์Šคํ…œ์ด๋‹ค.

NoSQL

NoSQL์ด ๋ฌด์—‡์˜ ์•ฝ์ž์ธ์ง€๋Š” ์‚ฌ๋žŒ์— ๋”ฐ๋ผ No SQL, Not Only SQL, Non-Relational Operational Database SQL๋กœ ์—‡๊ฐˆ๋ฆฌ๋Š” ์˜๊ฒฌ๋“ค์ด ์žˆ์ง€๋งŒ, ํ˜„์žฌ Not Only SQL๋กœ ํ’€์–ด ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ์ด ๋‹ค์ˆ˜๋ฅผ ์ฐจ์ง€ํ•˜๊ณ  ์žˆ๋‹ค.

์ด ๋ง์˜ ์˜๋ฏธ๋ฅผ ํ’€์–ด๋ณด๋ฉด, ๋‹จ์ˆœํžˆ ๊ธฐ์กด ๊ด€๊ณ„ํ˜• DBMS๊ฐ€ ๊ฐ–๊ณ  ์žˆ๋Š” ํŠน์„ฑ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ๋‹ค๋ฅธ ํŠน์„ฑ๋“ค์„ ๋ถ€๊ฐ€์ ์œผ๋กœ ์ง€์›ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ์ด์œ 

NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ํƒ์›”ํ•œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ์œ ์—ฐ์„ฑ๊ณผ ํ™•์žฅ์„ฑ์„ ๋น„๋กฏํ•ด ๊ณ ์„ฑ๋Šฅ์˜ ๋งค์šฐ ๊ธฐ๋Šฅ์ ์ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ํ•„์š”๋กœ ํ•˜๋Š” ๋ชจ๋ฐ”์ผ, ์›น์ด๋‚˜ ๊ฒŒ์ด๋ฐ๊ณผ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ํ˜„๋Œ€์ ์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

  • ์œ ์—ฐ์„ฑ: NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์œ ์—ฐํ•œ ์Šคํ‚ค๋งˆ๋ฅผ ์ œ๊ณตํ•˜์—ฌ ๋ณด๋‹ค ๋น ๋ฅด๊ณ  ๋ฐ˜๋ณต์ ์ธ ๊ฐœ๋ฐœ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. ์ด๊ฐ™์€ ์œ ์—ฐํ•œ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์€ NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋ฐ˜์ •ํ˜• ๋ฐ ๋น„์ •ํ˜• ๋ฐ์ดํ„ฐ์— ์ด์ƒ์ ์œผ๋กœ ๋งŒ๋“ค์–ด ์ค๋‹ˆ๋‹ค.
  • ํ™•์žฅ์„ฑ: NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๊ณ ๊ฐ€์˜ ๊ฐ•๋ ฅํ•œ ์„œ๋ฒ„๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋Œ€์‹  ๋ถ„์‚ฐํ˜• ํ•˜๋“œ์›จ์–ด ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ด์šฉํ•ด ํ™•์žฅํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ถ€ ํด๋ผ์šฐ๋“œ ์ œ๊ณต์ž๋“ค์€ ์™„์ „๊ด€๋ฆฌํ˜• ์„œ๋น„์Šค๋กœ์„œ ์ด๋Ÿฐ ์šด์˜ ์ž‘์—…์„ ๋ณด์ด์ง€ ์•Š๊ฒŒ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • ๊ณ ์„ฑ๋Šฅ: NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ํŠน์ • ๋ฐ์ดํ„ฐ ๋ชจ๋ธ ๋ฐ ์•ก์„ธ์Šค ํŒจํ„ด์— ๋Œ€ํ•ด ์ตœ์ ํ™”๋˜์–ด ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ํ†ตํ•ด ์œ ์‚ฌํ•œ ๊ธฐ๋Šฅ์„ ์ถฉ์กฑํ•˜๋ ค ํ•  ๋•Œ๋ณด๋‹ค ๋›ฐ์–ด๋‚œ ์„ฑ๋Šฅ์„ ์–ป๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.
  • ๊ณ ๊ธฐ๋Šฅ์„ฑ: NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๊ฐ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์— ๋งž์ถฐ ํŠน๋ณ„ํžˆ ๊ตฌ์ถ•๋œ ๋›ฐ์–ด๋‚œ ๊ธฐ๋Šฅ์˜ API์™€ ๋ฐ์ดํ„ฐ ์œ ํ˜•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

 

RDBMS vs NoSQL

  ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
์ตœ์ ์˜ ์›Œํฌ๋กœ๋“œ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์ผ๊ด€์„ฑ์ด ๋›ฐ์–ด๋‚œ ์˜จ๋ผ์ธ ํŠธ๋žœ์žญ์…˜ ํ”„๋กœ์„ธ์‹ฑ(OLTP) ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•ด ์„ค๊ณ„๋˜์–ด ์˜จ๋ผ์ธ ๋ถ„์„ ํ”„๋กœ์„ธ์‹ฑ(OLAP)์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๋‚ฎ์€ ์ง€์—ฐ ์‹œ๊ฐ„์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํฌํ•จํ•œ ์ˆ˜๋งŽ์€ ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ํŒจํ„ด์— ๋งž๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. NoSQL ๊ฒ€์ƒ‰ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๋ฐ˜์ •ํ˜• ๋ฐ์ดํ„ฐ์—์„œ ๋ถ„์„์„ ์œ„ํ•ด ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค
๋ฐ์ดํ„ฐ ๋ชจ๋ธ ๊ด€๊ณ„ํ˜• ๋ชจ๋ธ์€ ๋ฐ์ดํ„ฐ๋ฅผ ํ–‰๊ณผ ์—ด๋กœ ๊ตฌ์„ฑ๋œ ํ…Œ์ด๋ธ”๋กœ ์ •๊ทœํ™”ํ•ฉ๋‹ˆ๋‹ค. ์Šคํ‚ค๋งˆ๋Š” ํ…Œ์ด๋ธ”, ํ–‰, ์—ด, ์ธ๋ฑ์Šค, ํ…Œ์ด๋ธ” ๊ฐ„ ๊ด€๊ณ„, ๊ธฐํƒ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์š”์†Œ๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ๊ทœ์ •ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ํ…Œ์ด๋ธ” ์‚ฌ์ด์˜ ๊ด€๊ณ„์—์„œ ์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ์„ ์‹คํ˜„ํ•ฉ๋‹ˆ๋‹ค.  NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ํ‚ค-๊ฐ’, ๋ฌธ์„œ, ๊ทธ๋ž˜ํ”„, ์ธ๋ฉ”๋ชจ๋ฆฌ, ๊ฒ€์ƒ‰ ๋“ฑ ์„ฑ๋Šฅ๊ณผ ๊ทœ๋ชจ ํ™•์žฅ์— ์ตœ์ ํ™”๋œ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. 

(DynamoDB, MongoDB, Neptune, Redis, Elasticsearch)
ACID ์†์„ฑ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์›์ž๊ฐ€, ์ผ๊ด€์„ฑ, ๊ฒฉ๋ฆฌ์„ฑ ๋ฐ ์ง€์†์„ฑ(ACID, atomicity, consistency, isolation, and durability)์˜ ์†์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค:
  • ์›์ž๊ฐ€๋Š” ์™„๋ฒฝํ•˜๊ฒŒ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ ํ˜น์€ ์ „ํ˜€ ์‹คํ–‰ํ•˜์ง€ ์•Š๋Š” ํŠธ๋žœ์žญ์…˜์„ ํ•„์š”๋กœ ํ•ฉ๋‹ˆ๋‹ค.
  • ์ผ๊ด€์„ฑ์€ ํŠธ๋žœ์žญ์…˜์ด ์ปค๋ฐ‹๋˜๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ๋ฅผ ์ค€์ˆ˜ํ•˜๋„๋ก ์š”๊ตฌํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฒฉ๋ฆฌ์„ฑ์€ ๋™์‹œ์— ์ผ์–ด๋‚˜๋Š” ํŠธ๋žœ์žญ์…˜๋“ค์ด ๊ฐ๊ธฐ ๋ณ„๋„๋กœ ์‹คํ–‰๋˜์–ด์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  • ๋‚ด๊ตฌ์„ฑ์€ ์˜ˆ๊ธฐ์น˜ ๋ชปํ•œ ์‹œ์Šคํ…œ ์žฅ์•  ๋˜๋Š” ์ •์ „ ์‹œ ๋งˆ์ง€๋ง‰์œผ๋กœ ์•Œ๋ ค์ง„ ์ƒํƒœ๋กœ ๋ณต๊ตฌํ•˜๋Š” ๊ธฐ๋Šฅ์„ ํ•„์š”๋กœ ํ•ฉ๋‹ˆ๋‹ค.
NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ํ”ํžˆ ์ˆ˜ํ‰์œผ๋กœ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋ณด๋‹ค ์œ ์—ฐํ•œ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์„ ์œ„ํ•ด ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ผ๋ถ€ ACID ์†์„ฑ์„ ์™„ํ™”ํ•จ์œผ๋กœ์จ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๋กœ์จ NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๋‹จ์ผ ์ธ์Šคํ„ด์Šค์˜ ํ•œ๊ณ„๋ฅผ ๋„˜์–ด ์ˆ˜ํ‰์œผ๋กœ ํ™•์žฅํ•ด์•ผ ํ•˜๋Š” ์‚ฌ์šฉ ์‚ฌ๋ก€์—์„œ ๋†’์€ ์ฒ˜๋ฆฌ๋Ÿ‰, ๋‚ฎ์€ ์ง€์—ฐ ์‹œ๊ฐ„์„ ์œ„ํ•œ ํƒ์›”ํ•œ ์„ ํƒ์ด ๋ฉ๋‹ˆ๋‹ค.
์„ฑ๋Šฅ ์„ฑ๋Šฅ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋””์Šคํฌ ํ•˜์œ„ ์‹œ์Šคํ…œ์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์ตœ๊ณ  ์„ฑ๋Šฅ์„ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ฟผ๋ฆฌ, ์ธ๋ฑ์Šค ๋ฐ ํ…Œ์ด๋ธ” ๊ตฌ์กฐ๋ฅผ ์ž์ฃผ ์ตœ์ ํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์„ฑ๋Šฅ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๊ธฐ๋ณธ ํ•˜๋“œ์›จ์–ด ํด๋Ÿฌ์Šคํ„ฐ ํฌ๊ธฐ, ๋„คํŠธ์›Œํฌ ์ง€์—ฐ ์‹œ๊ฐ„ ๋ฐ ํ˜ธ์ถœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.
ํ™•์žฅ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ํ•˜๋“œ์›จ์–ด์˜ ๊ณ„์‚ฐ ์„ฑ๋Šฅ์„ ๋†’์ด๊ฑฐ๋‚˜ ์ฝ๊ธฐ ์ „์šฉ ์›Œํฌ๋กœ๋“œ์˜ ๋ณต์ œ๋ฌผ์„ ์ถ”๊ฐ€ํ•จ์œผ๋กœ์จ ํ™•์žฅ๋ฉ๋‹ˆ๋‹ค. NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๊ฑฐ์˜ ๋ฌด์ œํ•œ์ ์ธ ๋ฒ”์œ„์—์„œ ์ผ๊ด€๋œ ์„ฑ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ์ฒ˜๋ฆฌ๋Ÿ‰ ์ œ๊ณ ๋ฅผ ์œ„ํ•ด ๋ถ„์‚ฐํ˜• ์•„ํ‚คํ…์ฒ˜๋ฅผ ์‚ฌ์šฉํ•ด ์•ก์„ธ์Šค ํŒจํ„ด์ด ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ถ„ํ• ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
API ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ ๋ฐ ๊ฒ€์ƒ‰ํ•˜๊ธฐ ์œ„ํ•œ ์š”์ฒญ์€ SQL(๊ตฌ์กฐํ™” ์งˆ์˜ ์–ธ์–ด)์„ ์ค€์ˆ˜ํ•˜๋Š” ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. ์ฟผ๋ฆฌ๋Š” ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์˜ํ•ด ๊ตฌ๋ฌธ ๋ถ„์„๋˜๊ณ  ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ๊ฐ์ฒด ๊ธฐ๋ฐ˜ API๋ฅผ ํ†ตํ•ด ์•ฑ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์‰ฝ๊ฒŒ ์ €์žฅ ๋ฐ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŒŒํ‹ฐ์…˜ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์•ฑ์—์„œ ํ‚ค-๊ฐ’ ํŽ˜์–ด, ์—ด ์„ธํŠธ ๋˜๋Š” ์ผ๋ จ์˜ ์•ฑ ๊ฐ์ฒด ๋ฐ ์†์„ฑ์„ ํฌํ•จํ•˜๋Š” ๋ฐ˜์ •ํ˜• ๋ฌธ์„œ๋ฅผ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ด€๊ณ„ํ˜• ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉฐ ํ…Œ์ด๋ธ”๊ฐ„์˜ ์กฐ์ธ ๊ธฐ๋Šฅ ์—†์Œ
  • ์ง์ ‘ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๋Š” ๋“ฑ์˜ ๋น„SQL ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•œ ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค
  • ๋Œ€๋ถ€๋ถ„ ์—ฌ๋Ÿฌ ๋Œ€์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„๋ฅผ ๋ฌถ์–ด์„œ(ํด๋Ÿฌ์Šคํ„ฐ๋ง) ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ตฌ์„ฑ
  • ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ๋Š” ์ง€์›ํ•˜๋Š” Data์ฒ˜๋ฆฌ ์™„๊ฒฐ์„ฑ(Transaction ACID ์ง€์›) ๋ฏธ๋ณด์žฅ
  • ๋ฐ์ดํ„ฐ์˜ ์Šคํ‚ค๋งˆ์™€ ์†์„ฑ๋“ค์„ ๋‹ค์–‘ํ•˜๊ฒŒ ์ˆ˜์šฉ ๋ฐ ๋™์  ์ •์˜ (Schema-less)
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ค‘๋‹จ ์—†๋Š” ์„œ๋น„์Šค์™€ ์ž๋™ ๋ณต๊ตฌ ๊ธฐ๋Šฅ์ง€์›
  • ๋‹ค์ˆ˜๊ฐ€ Open Source๋กœ ์ œ๊ณต
  • ํ™•์žฅ์„ฑ(์ˆ˜์ง์ /์ˆ˜ํ‰์ ), ๊ฐ€์šฉ์„ฑ, ๋†’์€ ์„ฑ๋Šฅ

 

์šฉ์–ด๋น„๊ต

SQL MongoDB DynamoDB Cassandra Couchbase
ํ…Œ์ด๋ธ” ์ปฌ๋ ‰์…˜ ํ…Œ์ด๋ธ” ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ ๋ฒ„ํ‚ท
ํ–‰ ๋ฌธ์„œ ํ•ญ๋ชฉ ์—ด ๋ฌธ์„œ
์ปฌ๋Ÿผ ํ•„๋“œ ์†์„ฑ ์ปฌ๋Ÿผ ํ•„๋“œ
๊ธฐ๋ณธ ํ‚ค ObjectId ๊ธฐ๋ณธ ํ‚ค ๊ธฐ๋ณธ ํ‚ค ๋ฌธ์„œ ID
์ธ๋ฑ์Šค ์ธ๋ฑ์Šค ๋ณด์กฐ ์ธ๋ฑ์Šค ์ธ๋ฑ์Šค ์ธ๋ฑ์Šค
๋ณด๊ธฐ ๋ณด๊ธฐ ๊ธ€๋กœ๋ฒŒ ๋ณด์กฐ ์ธ๋ฑ์Šค ๊ตฌ์ฒดํ™”๋œ ๋ณด๊ธฐ ๋ณด๊ธฐ
์ค‘์ฒฉ๋œ ํ…Œ์ด๋ธ” ๋˜๋Š” ๊ฐ์ฒด ํฌํ•จ ๋ฌธ์„œ ๋งต ๋งต ๋งต
๋ฐฐ์—ด ๋ฐฐ์—ด ๋ชฉ๋ก ๋ชฉ๋ก ๋ชฉ๋ก

 

CAP ์ด๋ก 

๋ถ„์‚ฐ ์‹œ์Šคํ…œ์—์„œ๋Š” 3๊ฐœ ์†์„ฑ์„ ๋ชจ๋‘ ๊ฐ€์ง€๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๊ฐ ์†์„ฑ์€ ์•„๋ž˜์™€ ๊ฐ™์ด 3๊ฐ€์ง€์ด๋‹ค.

Consistency (์ผ๊ด€์„ฑ)

  • CAP์ด๋ก ์—์„œ ๋งํ•˜๋Š” Consistency๋Š” ACID์˜ ‘C’๊ฐ€ ์•„๋‹ˆ๋‹ค! ACID์˜ ‘C’๋Š” '๋ฐ์ดํ„ฐ๋Š” ํ•ญ์ƒ ์ผ๊ด€์„ฑ ์žˆ๋Š” ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•˜๊ณ  ๋ฐ์ดํ„ฐ์˜ ์กฐ์ž‘ ํ›„์—๋„ ๋ฌด๊ฒฐ์„ฑ์„ ํ•ด์น˜์ง€ ๋ง์•„์•ผ ํ•œ๋‹ค'๋Š” ์†์„ฑ์ด๋‹ค.
  • CAP์˜ ‘C’๋Š” 'Single request/response operation sequence'์˜ ์†์„ฑ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์“ฐ๊ธฐ ๋™์ž‘์ด ์™„๋ฃŒ๋œ ํ›„ ๋ฐœ์ƒํ•˜๋Š” ์ฝ๊ธฐ ๋™์ž‘์€ ๋งˆ์ง€๋ง‰์œผ๋กœ ์“ฐ์—ฌ์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฆฌํ„ดํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.
  • ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ๊ฐ™์€ ์‹œ๊ฐ„์— ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์—ฌ์ค˜์•ผ ํ•œ๋‹ค. (์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๊นŒ์ง€ ๋ชจ๋‘ ๊ฐ™์„ ํ•„์š”๋Š” ์—†์Œ)

Availability (๊ฐ€์šฉ์„ฑ)

  • 'ํŠน์ • ๋…ธ๋“œ๊ฐ€ ์žฅ์• ๊ฐ€ ๋‚˜๋„ ์„œ๋น„์Šค๊ฐ€ ๊ฐ€๋Šฅํ•ด์•ผ ํ•œ๋‹ค'๋ผ๋Š” ์˜๋ฏธ๋ฅผ ๊ฐ€์ง„๋‹ค.
  • ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ์— ๋Œ€ํ•œ ๋ชจ๋“  ๋™์ž‘(read, write ๋“ฑ)์€ ํ•ญ์ƒ ์„ฑ๊ณต์ ์œผ๋กœ ๋ฆฌํ„ด๋˜์–ด์•ผ ํ•œ๋‹ค.
  • ๋ช…ํ™•ํ•ด ๋ณด์ด๋Š” ๋‹จ์–ด์ด๊ธฐ๋Š” ํ•˜์ง€๋งŒ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์—์„œ์˜ ํŠน์ง•์„ ๋งํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— '์„œ๋น„์Šค๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค'์™€ '์„ฑ๊ณต์ ์œผ๋กœ ๋ฆฌํ„ด'์ด๋ผ๋Š” ํ‘œํ˜„์ด ์• ๋งคํ•˜๋‹ค. ์–ผ๋งˆ๋™์•ˆ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฒƒ ๊นŒ์ง€๋ฅผ ์„ฑ๊ณต์ ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋Š๋ƒ์— ๋Œ€ํ•œ ๋ฌธ์ œ๊ฐ€ ๋‚จ์•„์žˆ๋‹ค. '20์‹œ๊ฐ„์ •๋„ ๊ธฐ๋‹ค๋ ธ๋”๋‹ˆ ๋ฆฌํ„ด์ด ์™”์–ด! Availability๊ฐ€ ์žˆ๋Š” ์‹œ์Šคํ…œ์ด์•ผ!'๋ผ๊ณ  ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • ๋‹ค์‹œํ•œ๋ฒˆ '์„ฑ๊ณต์ ์œผ๋กœ ๋ฆฌํ„ด'์— ๋Œ€ํ•ด์„œ ๋ณด๋ฉด ๋ชจ๋“  ๋™์ž‘์— ๋Œ€ํ•ด์„œ ์‹œ์Šคํ…œ์ด 'Fail!!'์ด๋ผ๋Š” ๋ฆฌํ„ด์„ ์„ฑ๊ณต์ ์œผ๋กœ ๋ณด๋‚ด์ค€๋‹ค๋ฉด ๊ทธ๊ฒƒ์„ Availability๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•ด์•ผ ํ•˜๋Š๋ƒ์— ๋Œ€ํ•ด์„œ๋„ ์• ๋งคํ•˜๋‹ค. CAP๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๋ฌธ์„œ๋“ค ์ค‘ 'Fail!!'์ด๋ผ๊ณ  ๋ฆฌํ„ด์„ ํ•˜๋Š” ๊ฒฝ์šฐ๋„ '์„ฑ๊ณต์ ์ธ ๋ฆฌํ„ด'์ด๋ผ๊ณ  ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ์„ ๋ณด์•˜๋‹ค.

Partitions Tolerance (๋ถ„๋ฆฌ ๋‚ด๊ตฌ์„ฑ)

  • ์›๋ž˜๋Š” Tolerance to network Partitions์ธ๋ฐ ๋ณดํ†ต์€ Partition-tolerance๋ผ๊ณ ๋„ ํ•œ๋‹ค.
  • ๋…ธ๋“œ๊ฐ„์— ํ†ต์‹  ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒจ์„œ ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ ๋ฐ›์ง€ ๋ชปํ•˜๋Š” ์ƒํ™ฉ์ด๋ผ๋„ ๋™์ž‘ํ•ด์•ผ ํ•œ๋‹ค.
  • Availablity์™€์˜ ์ฐจ์ด์ ์€ Availability๋Š” ํŠน์ • ๋…ธ๋“œ๊ฐ€ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•œ ์ƒํ™ฉ์— ๋Œ€ํ•œ ๊ฒƒ์ด๊ณ  Tolerance to network Partitions๋Š” ๋…ธ๋“œ์˜ ์ƒํƒœ๋Š” ์ •์ƒ์ด์ง€๋งŒ ๋„คํŠธ์›Œํฌ ๋“ฑ์˜ ๋ฌธ์ œ๋กœ ์„œ๋กœ๊ฐ„์˜ ์—ฐ๊ฒฐ์ด ๋Š์–ด์ง„ ์ƒํ™ฉ์— ๋Œ€ํ•œ ๊ฒƒ์ด๋‹ค

 

์ฐธ๊ณ 

๋Œ“๊ธ€