NOSQL์ด๋ž€?

Not Only SQL์˜ ์•ฝ์ž. RDBMS์˜ ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ, RDBMS์™€ ๊ฐ™์ด ๊ณ ์ •๋œ ์Šคํ‚ค๋งˆ๋‚˜ JOIN์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๋‹ค์†Œ ์ž์œ ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค.

SQLNOSQL
์ •ํ•ด์ง„ ๊ทœ๊ฒฉ์ด ์กด์žฌํ•จ
(Schema, Table-Column)
์ •ํ•ด์ง„ ๊ทœ๊ฒฉ์ด ๋”ฐ๋กœ ์—†์Œ
JOIN์ด ๊ฐ€๋ŠฅJOIN ๋ถˆ๊ฐ€๋Šฅ
ํŠธ๋žœ์žญ์…˜ ์‚ฌ์šฉํŠธ๋žœ์žญ์…˜ ์•ˆ๋จ
๋ถ„์‚ฐ์ฒ˜๋ฆฌ ์–ด๋ ค์›€๋ถ„์‚ฐ์ฒ˜๋ฆฌ ์‰ฌ์›€


์žฅ์ 

์•ž์—์„œ๋„ ๋งํ–ˆ๋“ฏ์ด RDBMS์—๋Š” ์–ด๋А์ •๋„ ํ•œ๊ณ„๊ฐ€ ์žˆ๋‹ค. ๋ณต์žก๋„์™€ ์šฉ๋Ÿ‰์ ์ธ ์ธก๋ฉด์—์„œ ํ•œ๊ณ„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ํ™œ์šฉ์—๋„ ์ œ์•ฝ์ด ๊น๊นํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฌํ•œ ์ ์€ ์žฅ์ ์ด๋ฉด์„œ๋„ ๋‹จ์ ์œผ๋กœ ๋‹ค๊ฐ€์˜จ๋‹ค.

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

์ด๋ฅผ ์ •๋ฆฌํ•ด๋ณด๋ฉด

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

๋‹จ์ 

ํ•˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ ์œ ์—ฐ์„ฑ๊ณผ ๊ฐ™์€ ์žฅ์ ์€ ๋‹จ์ ์œผ๋กœ๋„ ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ ์ด ์žˆ๋‹ค. ์Šคํ‚ค๋งˆ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋งŒํผ ์œ ์—ฐํ•˜์ง€๋งŒ, ์œ ์—ฐํ•œ ๋งŒํผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ผ๊ด€์„ฑ์— ์•ฝํ•˜๋‹ค. ์ถ”๊ฐ€์ ์œผ๋กœ

  • key๊ฐ’์— ๋Œ€ํ•œ ์ž…์ถœ๋ ฅ๋งŒ ์ง€์›
  • ์Šคํ‚ค๋งˆ๊ฐ€ ์ •ํ•ด์ ธ ์žˆ์ง€ ์•Š์•„, ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ๊ทœ๊ฒฉํ™”๊ฐ€ ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค.
  • ๋ฐ์ดํ„ฐ๊ฐ€ ์—ฌ๋Ÿฌ ์ปฌ๋ ‰์…˜์— ์ค‘๋ณต๋˜์–ด ์žˆ์–ด์„œ ๋ฐ์ดํ„ฐ๋ฅผย UPDATE ํ•˜๋Š” ๊ฒฝ์šฐ ๋ชจ๋“  ์ปฌ๋ ‰์…˜์—์„œ ์ˆ˜ํ–‰ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋А๋ฆฌ๋‹ค.
  • ๋ฐ์ดํ„ฐ ์ค‘๋ณต์œผ๋กœ ์ธํ•œ ์ˆ˜์ • ์ž‘์—…์˜ ๋ฒˆ๊ฑฐ๋กœ์›€

NoSQL์˜ ๊ธฐ์ˆ  ์š”์†Œ

๊ธฐ์ˆ  ์š”์†Œ

  • BASE
  • (Basically Available, Soft State, Eventually Consistent)

๊ธฐ์ˆ  ์š”์†Œ ์ƒ์„ธ

Basically Available(๊ฐ€์šฉ์„ฑ)

Master ์„œ๋ฒ„์— ์žฅ์•  ๋ฐœ์ƒ ์‹œ์—๋„ ์—ฌ๋Ÿฌ Slave ์„œ๋ฒ„๋กœ ์ธํ•ด ๋ฌด์ค‘๋‹จ ์„œ๋น„์Šค๊ฐ€ ๊ฐ€๋Šฅํ•จ

Soft State(์†Œํ”„ํŠธ ์ƒํƒœ)

๊ฐ๊ฐ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋„๋‹ฌํ•œ ์‹œ์ ์— ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐฑ์‹ ๋จ

Eventually Consistent(๊ฒฐ๊ณผ์  ์ผ๊ด€์„ฑ)

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

Key-Value Database

  • Key์™€ Value์œผ๋กœ ๊ตฌ์„ฑ๋œ ๋ฐฐ์—ด๊ตฌ์กฐ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ๊ฐ€์žฅ ๋‹จ์ˆœํ•œ ๊ตฌ์กฐ
  • ์ €์žฅ๊ณผ ์กฐํšŒ ๋ผ๋Š” ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ์›์น™์— ์ถฉ์‹คํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

ํŠน์ง•

  • ๊ธฐ๋ณธ์ ์ธ ํŒจํ„ด์œผ๋กœ Key, Value๊ฐ€ ํ•˜๋‚˜์˜ ๋ฌถ์Œ์œผ๋กœ ์ €์žฅ๋˜๋Š” ๊ตฌ์กฐ์ด๊ธฐ ๋•Œ๋ฌธ์— ์†๋„๊ฐ€ ๋น ๋ฅด๋ฉฐ ๋ถ„์‚ฐ ์ €์žฅ์— ์šฉ์ดํ•˜๋‹ค
  • ๊ฐ’์— ๋ชจ๋“  ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ํ—ˆ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค.
    • ๋Œ€์‹  ๋ชจ๋“  ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ํ—ˆ์šฉํ•˜๋Š” ๋งŒํผ ๋ฐ์ดํ„ฐ ์ž…๋ ฅ ๋‹จ๊ณ„์—์„œ ๊ฒ€์ฆ ๋กœ์ง์„ ์ œ๋Œ€๋กœ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค
  • Key๋Š” ์ค‘๋ณต๋  ์ˆ˜ ์—†๊ณ  ์ด Unique Key์— ๊ฐ๊ฐ ํ•˜๋‚˜์˜ Value๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํ˜•ํƒœ๊ฐ€ ๋œ๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒ ๋ฐ ์ž…๋ ฅํ•  ๋•Œ, Key๋ฅผ ๊ฐ€์ง€๊ณ  ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ™œ์šฉ

  1. ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์œ„ํ•ด RDBMS ์—์„œ ์บ์‹ฑ (Redis)
  2. ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๊ฐ™์€ ์›น์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ผ์‹œ์ ์ธ ์†์„ฑ ์ถ”์ 
  3. ์ด๋ฏธ์ง€๋‚˜ ์˜ค๋””์˜ค ํŒŒ์ผ ๊ฐ™์€ ๋Œ€์šฉ๋Ÿ‰ ๊ฐ์ฒด ์ €์žฅ

์ข…๋ฅ˜

  • Redis
  • AWS DynamoDB
  • Riak

Document Database

Document Database ๋˜๋Š” Document-Oriented Database๋Š” ์œ„์˜ Key-Value Database์™€ ๊ฐ™์ด ๋ฐ์ดํ„ฐ ์ €์žฅ์— Key-Value Type๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

  • ํ•˜์ง€๋งŒ Key-Value Database์™€์˜ ์ค‘์š”ํ•œ ์ฐจ์ด๋Š”ย Document Database๋Š” ๊ฐ’์„ ๋ฌธ์„œ๋กœ ์ €์žฅํ•จ
    • ๋ฌธ์„œ๋ž€ย semi-structured entity์ด๋ฉฐ ๋ณดํ†ต JSON์ด๋‚˜ XML ๊ฐ™์€ ํ‘œ์ค€ ํ˜•์‹
  • ๊ฐ’์„ ์ €์žฅํ•˜๊ธฐ ์ „์— schema๋ฅผ ๋ณ„๋„๋กœ ์ •์˜ํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๋ฌธ์„œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๊ทธ๊ฒŒ ๋ฐ”๋กœ schema๊ฐ€ ๋œ๋‹ค.
  • ๊ฐ ๋ฌธ์„œ๋ณ„๋กœ ๋‹ค๋ฅธ ํ•„๋“œ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋”ฐ๋ผ์„œ ๊ฐœ๋ฐœ์ž๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•˜๋Š” ๋‹จ๊ณ„์—์„œ ์ปฌ๋Ÿผ๊ณผ ํ•„๋“œ์˜ ๊ด€๋ฆฌ๊ฐ€ ์ œ๋Œ€๋กœ ์ด๋ฃจ์–ด์ง€๋„๋ก ๋ณด์žฅํ•˜๋Š” ๊ฒƒ์ด ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด ํ•„์ˆ˜ ์†์„ฑ(Null์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ์†์„ฑ)์— ๋Œ€ํ•œ ๊ด€๋ฆฌ๋„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ ˆ๋ฒจ์—์„œ ๊ด€๋ฆฌ๊ฐ€ ์ด๋ฃจ์–ด์ ธ์•ผ ํ•œ๋‹ค.

์˜ˆ์‹œ๋กœ MongoDB์˜ AirBnB DataSet์˜ ์ผ๋ถ€๋ฅผ ๋ณด์ž. ๋‹ค์Œ๊ณผ ๊ฐ™์€ JSON ํ˜•ํƒœ์˜ ๋ฌธ์„œ๋กœ ๊ด€๋ฆฌ๋œ๋‹ค.

{  
"_id": "10006546",  
"listing_url": "https://www.airbnb.com/rooms/10006546",  
"name": "Ribeira Charming Duplex",  
"summary": "Fantastic duplex apartment with three bedrooms, located in the historic area of Porto, Ribeira (Cube)...",  
"house_rules": "Make the house your home...",  
"property_type": "House",  
"calendar_last_scraped": {  
    "$date": {  
       "$numberLong": "1550293200000"  
        }  
    },  
"amenities": [  
    "TV",  
    "Cable TV",  
    "Wifi",  
    "Kitchen",  
    "Paid parking off premises",  
    "Smoking allowed",  
    "Microwave"  
    ]  
}

ํ™œ์šฉ

Document Database ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ชฉ์ ์œผ๋กœ ์ฃผ๋กœ ํ™œ์šฉ๋œ๋‹ค.
1. ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์“ฐ๋Š” ์›น ์‚ฌ์ดํŠธ์šฉ ๋ฐฑ์—”๋“œ ์ง€์›
2. ์ œํ’ˆ์ฒ˜๋Ÿผ ๋‹ค์–‘ํ•œ ์†์„ฑ์ด ์žˆ๋Š” ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ
3. ๋‹ค์–‘ํ•œ ์œ ํ˜•์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ถ”์ 
4. JSON ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜
5. ๋น„์ •๊ทœํ™”๋œ ์ค‘์ฒฉ ๊ตฌ์กฐ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜

์ข…๋ฅ˜

  • MongoDB
  • CouchDB
  • Couchbase

Column Family Database

์ปฌ๋Ÿผ ํŒจ๋ฐ€๋ฆฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ, ์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ ์„ฑ๋Šฅ, ๊ณ ๊ฐ€์šฉ์„ฑ์„ ์œ„ํ•ด ์„ค๊ณ„๋˜์—ˆ๋‹ค. ๊ตฌ๊ธ€์˜ Big Table, ํŽ˜์ด์Šค๋ถ์€ Cassandra๊ฐ€ ์žˆ๋‹ค.

ํŠน์ง•

  • Relation Database์™€ ๋™์ผํ•œ ์šฉ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์Šคํ‚ค๋งˆ ์ •์˜
  • ์ปฌ๋Ÿผ ์ˆ˜๊ฐ€ ๋งŽ์œผ๋ฉด ๊ด€๋ จ๋œ ์ปฌ๋Ÿผ๋“ค์„ ์ปฌ๋ ‰์…˜์œผ๋กœ ๋ฌถ์Œ
  • Document Database์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ฏธ๋ฆฌ ์ •์˜๋œ ์Šคํ‚ค๋งˆ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•˜๋Š” ์‹œ์ ์— ์›ํ•˜๋Š” ๋Œ€๋กœ ์ปฌ๋Ÿผ์„ ์ถ”๊ฐ€
  • ํ…Œ์ด๋ธ”๊ฐ„ ์กฐ์ธ ์ง€์› ์•ˆํ•จ
  • ์ผ๋ฐ˜์ ์œผ๋กœ ๋น„์ •๊ทœํ™” ๋˜์–ด ์žˆ์œผ๋ฉฐ ํ•œ ๊ฐ์ฒด์— ๊ด€๋ จ๋œ ๋ชจ๋“  ์ •๋ณด๋ฅผ ๊ฐ€๋Šฅํ•œ ๋งค์šฐ ๋„ˆ๋น„๊ฐ€ ๋„“์€ ๋‹จ์ผ Row์— ๋„ฃ์–ด์„œ ๋ณด๊ด€ํ•จ
  • ์—ฌ๋Ÿฌ๋Œ€๋กœ ๊ตฌ์„ฑ๋œ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์šด์˜ ๋˜๋ฏ€๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์ ๋‹ค๋ฉด document๋‚˜ key-value database๊ฐ€ ๋‚˜์Œ

ํ™œ์šฉ

  1. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์“ฐ๊ธฐ ์ž‘์—…์ด ๋งŽ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜
  2. ์ง€๋ฆฌ์ ์œผ๋กœ ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ์— ๋ถ„์‚ฐ๋˜์–ด ์žˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜
  3. ๋ณต์ œ๋ณธ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹จ๊ธฐ์ ์œผ๋กœ ๋ถˆ์ผ์น˜ํ•˜๋”๋ผ๋„ ํฐ ๋ฌธ์ œ๊ฐ€ ์—†๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜
  4. ๋™์  ํ•„๋“œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜
  5. ์ˆ˜๋ฐฑ๋งŒ ํ…Œ๋ผ๋ฐ”์ดํŠธ ์ •๋„์˜ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜

์ข…๋ฅ˜

  • Hbase
  • Cassandra
  • GCP BigTable
  • Microsoft Azure Cosmos DB**