NoSQL Database

  • NoSQL(Not Only SQL)์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ชจ๋“  ๋น„๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ง€์นญํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋ฉฐ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์˜ ํ…Œ์ด๋ธ”๊ณผ๋Š” ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ๋‹ค์–‘ํ•œ ์œ ํ˜•์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค.
  • ๋Œ€ํ‘œ์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ™˜๊ฒฝ์—์„œ ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค.
    • ๋Œ€๊ทœ๋ชจ ํŠธ๋ž˜ํ”ฝ ์ฒ˜๋ฆฌ
    • ๋ถ„์‚ฐ ์‹œ์Šคํ…œ
    • ๋น„์ •ํ˜• ๋ฐ์ดํ„ฐ ์ €์žฅ
    • ๋น ๋ฅธ ์ฝ๊ธฐ/์“ฐ๊ธฐ ์„ฑ๋Šฅ ์š”๊ตฌ
  • ACID ์›์น™์„ ์ถ”๊ตฌํ•˜๋Š” RDB์™€ ๋‹ฌ๋ฆฌ NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” BASE ์›์น™์„ ๋”ฐ๋ฅธ๋‹ค.
    • Basic Availability
      • ์‹œ์Šคํ…œ์ด ๋ถ€๋ถ„์ ์ธ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ์ „์ฒด ์‹œ์Šคํ…œ์ด ์ค‘๋‹จ๋˜์ง€ ์•Š๋Š”๋‹ค.
    • Soft state
      • ๋ฐ์ดํ„ฐ๊ฐ€ ์ผ์ • ์‹œ๊ฐ„ ๋™์•ˆ ์ผ๊ด€๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.
    • Eventual consistency
      • ๋ฐ์ดํ„ฐ๋Š” ๊ถ๊ทน์ ์œผ๋กœ ์ผ๊ด€๋œ ์ƒํƒœ๋ฅผ ๊ฐ€์ง„๋‹ค.

NoSQL Database์˜ ์ข…๋ฅ˜

Key-Value, Document, Wide-Column, Graph 4๊ฐ€์ง€ ์œ ํ˜•์œผ๋กœ ๋‚˜๋‰œ๋‹ค.

Key-Value

  • ๊ณ ์œ ํ•œ Key-Value ์Œ์œผ๋กœ ๊ตฌ์„ฑ๋˜๋Š” ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • Caching๊ณผ ์„ธ์…˜ ๊ด€๋ฆฌ์— ์‚ฌ์šฉ๋˜๋ฉฐ ๊ตฌ์กฐ๊ฐ€ ๋‹จ์ˆœํ•˜๊ณ  ์ฃผ๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฝ๊ธฐ ๋ฐ ์“ฐ๊ธฐ ์„ฑ๋Šฅ์ด ์šฐ์ˆ˜ํ•˜๋‹ค.
  • ์ฃผ์š” ์‚ฌ์šฉ ์‚ฌ๋ก€
    • Caching
    • ์‚ฌ์šฉ์ž ์„ธ์…˜ ๊ด€๋ฆฌ
  • ์ข…๋ฅ˜
    • Redis
    • Memcached
    • Amazon DynamoDB

Document

  • JSON, XML, BSON ๋“ฑ์˜ ๋ฌธ์„œ ํ˜•์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค.
  • ์œ ์—ฐํ•œ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์„ ์ œ๊ณตํ•˜์—ฌ ๋ฐ˜์ •ํ˜• ๋ฐ์ดํ„ฐ๋‚˜ ๋น„์ •ํ˜• ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ์— ์ ํ•ฉํ•˜๋‹ค.
  • ๋ฌธ์„œ ๋‚ด๋ถ€ ๊ตฌ์กฐ๋ฅผ ์ž์œ ๋กญ๊ฒŒ ์ •์˜ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์Šคํ‚ค๋งˆ๊ฐ€ ์ž์ฃผ ๋ณ€๊ฒฝ๋˜๋Š” ์„œ๋น„์Šค์— ์ ํ•ฉํ•˜๋‹ค.
  • ์ฃผ์š” ์šฉ๋„
    • CMS(Content Management System)
    • ๋กœ๊ทธ ๋ฐ์ดํ„ฐ
    • ์‚ฌ์šฉ์ž ํ”„๋กœํ•„ ๊ด€๋ฆฌ
  • ์ข…๋ฅ˜
    • MongoDB
    • Couchbase

Wider-Column

  • ๊ธฐ์กด SQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๋‹ฌ๋ฆฌ ๊ณ ์ •๋œ ์Šคํ‚ค๋งˆ ์—†์ด ์ปฌ๋Ÿผ ๋‹จ์œ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ์ €์žฅํ•œ๋‹ค.
  • ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜ํ‰์ ์œผ๋กœ ํ™•์žฅ(Scale-out)ํ•˜๊ธฐ ์šฉ์ดํ•˜๋ฉฐ ๋›ฐ์–ด๋‚œ ์“ฐ๊ธฐ ์„ฑ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.
  • ์ฃผ์š” ์šฉ๋„
    • ์‹œ๊ณ„์—ด ๋ฐ์ดํ„ฐ
    • ๋กœ๊ทธ ๋ฐ์ดํ„ฐ
    • ์‹ค์‹œ๊ฐ„ ๋น…๋ฐ์ดํ„ฐ ๋ถ„์„
  • ์ข…๋ฅ˜
    • Apache Cassandra
    • HBase

Graph

  • ๋…ธ๋“œ์™€ ์—ฃ์ง€ ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค.
  • ๋…ธ๋“œ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ๋žŒ, ์žฅ์†Œ, ์‚ฌ๋ฌผ์ฒ˜๋Ÿผ ๋ช…์‚ฌ์— ํ•ด๋‹นํ•˜๋Š” ๊ฐœ์ฒด ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ณ , ์—ฃ์ง€๋Š” ๋…ธ๋“œ๋“ค ์‚ฌ์ด์˜ ๊ด€๊ณ„ ์ •๋ณด๋ฅผ ์ €์žฅํ•œ๋‹ค.
  • ์ฃผ์š” ์šฉ๋„
    • SNS ์นœ๊ตฌ ์ถ”์ฒœ
    • Fraud Detection(์‚ฌ๊ธฐ ํƒ์ง€)
    • ์ถ”์ฒœ ์—”์ง„
    • ๊ฒฝ๋กœ ํƒ์ƒ‰
  • ์ข…๋ฅ˜
    • Neo4J
    • Amazon Neptune

NoSQL vs RDB

  • ์„œ๋น„์Šค์˜ ํŠน์„ฑ์— ๋”ฐ๋ผ ์ ์ ˆํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์œ ํ˜•์„ ์„ ํƒํ•ด์•ผ ํ•œ๋‹ค.
    • ๊ธˆ์œต์ด๋‚˜ ์žฌ๊ณ ์ฒ˜๋Ÿผ ์ผ๊ด€์„ฑ์ด ์ค‘์š”ํ•œ ์„œ๋น„์Šค๋ผ๋ฉด RDB SQL์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ ์ž˜ํ•˜๋‹ค.
    • ์ดˆ๋‹น ์ˆ˜๋งŒ~์ˆ˜์‹ญ๋งŒ ๊ฑด์˜ ์š”์ฒญ์ด๋‚˜ ์ „ ์„ธ๊ณ„ ์‚ฌ์šฉ์ž๋“ค์ด ๋™์‹œ์— ์ ‘์†ํ•˜๋Š” ๊ฒŒ์ž„์ด๋‚˜ ์ŠคํŠธ๋ฆฌ๋ฐ ์„œ๋น„์Šค๋ผ๋ฉด NoSQL์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ ์ ˆํ•˜๋‹ค.
  • ๊ทœ๋ชจ๊ฐ€ ์žˆ๋Š” ์„œ๋น„์Šค์—์„œ๋Š” RDB์™€ NoSQL ๊ฐ์ž์˜ ๊ฐ•์ ์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์ ์ ˆํžˆ ํ˜ผํ•ฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ์˜ ํŠน์„ฑ์— ๋งž๊ฒŒ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ตฌ์กฐ ๋˜๋Š” Polyglot Persistence ์ „๋žต์„ ์ฑ„ํƒํ•œ๋‹ค.
RDBNoSQL
๋ฐ์ดํ„ฐ ๊ตฌ์กฐํ…Œ์ด๋ธ”(ํ–‰๊ณผ ์—ด)์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์กฐํ™”๋œ ๋ฐ์ดํ„ฐ์— ์ ํ•ฉ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋น„์ •ํ˜• ๋ฐ ๋ฐ˜์ •ํ˜• ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์— ์ ํ•ฉ
ํ™•์žฅ์„ฑScale-up(์ˆ˜์ง์  ํ™•์žฅ)Scale-out(์ˆ˜ํ‰์  ํ™•์žฅ, ์ƒค๋”ฉ)
์›์น™ACIDBASE(์ผ๋ถ€ ACID ์›์น™ ์ค€์ˆ˜ ๊ฐ€๋Šฅ)
๋ฐ์ดํ„ฐ ๊ด€๊ณ„๊ด€๊ณ„๋Š” ์™ธ๋ž˜ํ‚ค๋ฅผ ํ†ตํ•ด ์ •์˜๋˜๊ณ  JOIN์„ ํ†ตํ•ด ์ ‘๊ทผ๊ด€๊ณ„๋Š” ์ค‘์ฒฉ ๊ตฌ์กฐ์ด๊ฑฐ๋‚˜ ๋ช…์‹œ์  ๋˜๋Š” ์•”๋ฌต์ ์ผ ์ˆ˜ ์žˆ์Œ
์„ฑ๋Šฅ์ฝ๊ธฐ ์œ„์ฃผ์˜ ์ž‘์—…๊ณผ ํŠธ๋žœ์žญ์…˜ ์ค‘์‹ฌ ์›Œํฌ๋กœ๋“œ์— ์ ํ•ฉ์‹ค์‹œ๊ฐ„ ์ฒ˜๋ฆฌ, ๋น…๋ฐ์ดํ„ฐ ๋ถ„์„ ๋ฐ ๋ถ„์‚ฐ ํ™˜๊ฒฝ์— ์ ํ•ฉ
๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ๋†’์€ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ๊ถ๊ทน์  ์ผ๊ด€์„ฑ
๋ฐ์ดํ„ฐ ๋ถ„ํ• ํ…Œ์ด๋ธ” ๊ธฐ๋ฐ˜ ๋ถ„ํ•  ๋˜๋Š” ํŒŒํ‹ฐ์…˜ ํ”„๋ฃจ๋‹ ์ง€์›์ƒค๋”ฉ๊ณผ ๋ณต์ œ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ๋ถ„ํ•