Skip to content

Latest commit

ย 

History

History
241 lines (182 loc) ยท 13.8 KB

RDBMSvsNOSQL.md

File metadata and controls

241 lines (182 loc) ยท 13.8 KB

RDBMS vs NO SQL

RDBMS

NOSQL

์šฉ์–ด

Database: ์—ฌ๋Ÿฌ ์‚ฌ๋žŒ์— ์˜ํ•ด ๊ณต์œ ๋˜์–ด ์‚ฌ์šฉ๋  ๋ชฉ์ ์œผ๋กœ ํ†ตํ•ฉํ•˜์—ฌ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ

DBMS(DataBase Management System): ์‚ฌ์šฉ์ž์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์ด์—์„œ, ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ ํ•ด์„ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋œ ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š”

SQL(Structured Query Language): ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด

์Šคํ‚ค๋งˆ: ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฐœ์ฒด(Entity), ์†์„ฑ(Attribute), ๊ด€๊ณ„(Relationship) ๋ฐ ์ œ์•ฝ์กฐ๊ฑด ๋“ฑ์— ๊ด€ํ•ด ์ „๋ฐ˜์ ์œผ๋กœ ์ •์˜ํ•œ ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ์˜ ์ง‘ํ•ฉ

RDBMS

R์€ Relational์˜ ์•ฝ์ž์ด๋‹ค. ์ฆ‰ **๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ ์‹œ์Šคํ…œ`์ด๋ผ๋Š” ๋œป ์ด๋‹ค.

  • RDBMS์—์„œ๋Š” ์—‘์…€์˜ ํ˜•์‹๊ณผ ์œ ์‚ฌํ•œ 2์ฐจ์› ํ…Œ์ด๋ธ” ํ˜•์‹์œผ๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ ์†์„ฑ(Attribute)๊ณผ ๊ฐ’(Value)์„ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ •์˜ํ•˜๊ณ  ์ €์žฅ, ๊ด€๋ฆฌํ•œ๋‹ค.
  • ๊ฐ ์—ด์€ ํ•˜๋‚˜์˜ ์†์„ฑ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ €์žฅํ•œ๋‹ค.
  • ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ํ…Œ์ด๋ธ” ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๊ตฌ์กฐํ™”ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.
    • ์ด๋Ÿฌํ•œ ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด ์™ธ๋ž˜ ํ‚ค(foreign key)๋ผ๋Š” ๊ฒƒ์„ ์‚ฌ์šฉํ•œ๋‹ค. ํ…Œ์ด๋ธ” ๊ฐ„์˜ ๊ด€๊ณ„์—์„œ ์™ธ๋ž˜ ํ‚ค๋ฅผ ์ด์šฉํ•œ ํ…Œ์ด๋ธ” ๊ฐ„ join์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•œ๋‹ค.
  • ์ด๋Ÿฌํ•œ ๋ฐ์ดํ„ฐ๋“ค์„ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์‚ฌ์šฉ์ž๋Š” SQL์ด๋ผ๋Š” ์–ธ์–ด๋ฅผ ํ™œ์šฉํ•œ๋‹ค.

ํ…Œ์ด๋ธ” ์˜ˆ์‹œ

ํ•™๋ฒˆ(PrimaryKey) ์ด๋ฆ„ ๋ฒˆํ˜ธ
11111 ๊น€์ง€์› 010-1111-1111
22222 ๊น€์ง€ํˆฌ 010-2222-2222

์žฅ์ 

  • ๋ฐ์ดํ„ฐ์˜ ๋ถ„๋ฅ˜, ์ •๋ ฌ, ํƒ์ƒ‰ ์†๋„๊ฐ€ ๋น„๊ต์  ๋น ๋ฅด๋‹ค.
  • SQL์ด๋ผ๋Š” ๊ตฌ์กฐํ™”๋œ ์งˆ์˜๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋‹ค.
  • ์ž‘์—…์˜ ์™„์ „์„ฑ์„ ๋ณด์žฅํ•œ๋‹ค.
  • ๋ฐ์ดํ„ฐ์˜ UPDATE๊ฐ€ ๋น ๋ฅด๋‹ค.

๋‹จ์ 

  • ๋ฐ˜๋“œ์‹œ ์Šคํ‚ค๋งˆ ๊ทœ๊ฒฉ์— ๋งŸ์ถ”์–ด ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ค„์•ผ ํ•œ๋‹ค.
  • ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์— ๋Œ€ํ•œ ๋ถ€ํ•˜ ๋ฐœ์ƒ ์‹œ ์ฒ˜๋ฆฌ๊ฐ€ ์–ด๋ ต๋‹ค.
  • ํ…Œ์ด๋ธ”๊ณผ ํ…Œ์ด๋ธ” ๊ฐ„ ๊ด€๊ณ„๊ฐ€ ๋ณต์žกํ•ด์งˆ์ˆ˜๋ก(๋งŽ์•„์งˆ์ˆ˜๋ก) join ์—ฐ์‚ฐ์ด ๋งŽ์€ ๋ณต์žกํ•œ ์ฟผ๋ฆฌ๊ฐ€ ๋งŒ๋“ค์–ด์ง„๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ™•์žฅ ์‹œ scale-up์„ ์ฃผ๋กœ ์ด์šฉํ•œ๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ scale-outํ•  ๋•Œ NOSQL์— ๋น„ํ•ด์„œ ๋ฒˆ๊ฑฐ๋กญ๋‹ค.
    • ์ด์œ 
    id: 1
    title: 'My post'
    content: 'The content'
    comments: {
        comment: :
            id: 1
    }
        comment: {
            id: 2
        }
    ...
    
    views: {
        view: {
            user: 1
        }
        view: {
            user: 2
        }
    ...
    }
      - ์œ„์™€ ๊ฐ™์€ ๊ฐ์ฒด๊ฐ€ ์žˆ๊ณ , DB๋ฅผ ์ˆ˜ํ‰์  ํ™•์žฅ(sharding)ํ•˜๋ฉด, RDBMS์—์„œ๋Š” 
          - ๋ฐ์ดํ„ฐ๊ฐ€ join์„ ํ†ตํ•ด ๊ด€๊ณ„(post์™€ comment)๊ฐ€ ํ˜•์„ฑ๋œ๋‹ค.
          - comment id 1๊ณผ comment id 2๋Š” ์„œ๋กœ ๋‹ค๋ฅธ DB server์— ์ €์žฅ๋  ์ˆ˜ ์žˆ๋‹ค.
      - ๋ฐ˜๋ฉด NOSQL์—์„œ๋Š”
          - ์œ„์˜ ๊ฐ์ฒด๋Š” ์ผ์ข…์˜ ๋…๋ฆฝํ˜• ๊ฐ์ฒด๋กœ ์ €์žฅ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ์™€ join์ด ํ•„์š” ์—†๋‹ค.
          - ๋”ฐ๋ผ์„œ ๋‹จ์ผ ์„œ๋ฒ„์— ๊ทธ๋Œ€๋กœ ์ƒ์ฃผํ•  ์ˆ˜ ์žˆ๋‹ค. 
      - ๋”ฐ๋ผ์„œ NOSQL์— ๋น„ํ•ด `sharding` ์‹œ ๋ฒˆ๊ฑฐ๋กญ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค. 
    

sharding: ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ ์„ธํŠธ๋ฅผ ๋‹ค์ˆ˜์˜ DB์— ๋ถ„์‚ฐ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•. ์ฃผ๋กœ ๋ฐ์ดํ„ฐ ์„ธํŠธ๊ฐ€ ๋‹จ์ผ DB์— ์ €์žฅํ•˜๊ธฐ์—๋Š” ๋„ˆ๋ฌด ํด ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

NO SQL

RDBMS๋กœ๋Š” ๊ด€๋ฆฌํ•  ์ˆ˜ ์—†๋Š” ๋ณต์žกํ•˜๊ณ  ์šฉ๋Ÿ‰์ด ํฐ ๋ฐ์ดํ„ฐ๋“ค์„ ๊ด€๋ฆฌ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ธฐ ์œ„ํ•œ ๋ชฉ์ ์œผ๋กœ ๋“ฑ์žฅํ•œ ๊ฐœ๋…์ด๋‹ค.

NOSQL์€ ๋ฐ์ดํ„ฐ์™€ ํŠธ๋ž˜ํ”ฝ์ด ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ์ฆ๊ฐ€ํ•จ์— ๋”ฐ๋ผ RDBMS์˜ ๋‹จ์ ์ธ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ์žฅ๋น„๊ฐ€ ์ข‹์•„์•ผ ํ•˜๋Š” Scale-up์˜ ํŠน์ง•์ด ๋น„์šฉ์„ ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ์ฆ๊ฐ€์‹œํ‚ค๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์€ ํฌ๊ธฐํ•˜๋˜ ๋น„์šฉ์„ ๊ณ ๋ คํ•˜์—ฌ ์—ฌ๋Ÿฌ ๋Œ€์˜ ๋ฐ์ดํ„ฐ์— ๋ถ„์‚ฐํ•˜์—ฌ ์ €์žฅํ•˜๋Š” Scale-out์„ ๋ชฉํ‘œ๋กœ ๋“ฑ์žฅํ•˜์˜€๋‹ค.

  • Not Only SQL์˜ ์•ฝ์ž๋กœ์จ, ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๋ฐ˜๋Œ€๋˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ, ํ…Œ์ด๋ธ” ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์ •์˜ํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • ๋”ฐ๋ผ์„œ ์ •ํ•ด์ง„ ์Šคํ‚ค๋งˆ๊ฐ€ ์—†์–ด ๋ณด๋‹ค ์ž์œ ๋กญ๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ถ„์‚ฐํ˜• ๊ตฌ์กฐ์ด๋‹ค.
    • ๋ถ„์‚ฐํ˜• ๊ตฌ์กฐ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ ๋Œ€์˜ ์„œ๋ฒ„์— ๋ถ„์‚ฐํ•ด ์ €์žฅํ•˜๊ณ , ๋ถ„์‚ฐ ์‹œ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ƒํ˜ธ ๋ณต์ œํ•ด ํŠน์ • ์„œ๋ฒ„์— ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ๋„ ๋ฐ์ดํ„ฐ ์œ ์‹ค์ด๋‚˜ ์„œ๋น„์Šค ์ค‘์ง€๊ฐ€ ์—†๋Š” ํ˜•ํƒœ์˜ ๊ตฌ์กฐ

์žฅ์ 

  • ๋ถ„์‚ฐ์ฒ˜๋ฆฌ์™€ ๋ณ‘๋ ฌ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.(ํ™•์žฅ์„ฑ)
  • ๋ฐ์ดํ„ฐ ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์ •์˜ํ•˜์ง€ ์•Š๋Š”๋‹ค.(ํ…Œ์ด๋ธ”๊ฐ„์˜ ๊ด€๊ณ„(join) ๋ถˆํ•„์š” = ์ฟผ๋ฆฌ ๋กœ์ง์˜ ๋ณต์žก๋„๊ฐ€ ๋‚ฎ๋‹ค)
  • RDBMS๋ณด๋‹ค ๋ณต์žก๋„๊ฐ€ ๋–จ์–ด์ ธ, ํ›จ์”ฌ ๋Œ€์šฉ๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ, ๊ด€๋ฆฌ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํ…Œ์ด๋ธ”์— ์Šคํ‚ค๋งˆ๊ฐ€ ์ •ํ•ด์ ธ์žˆ์ง€ ์•Š์•„ ๋ฐ์ดํ„ฐ ์ €์žฅ์ด ๋น„๊ต์  ์ž์œ ๋กญ๋‹ค. (์œ ์—ฐ์„ฑ)

๋‹จ์ 

  • ๋ณต์žกํ•œ ์กฐ์ธ ์‚ฌ์šฉ์ด ์–ด๋ ต๋‹ค.
    • ๊ธฐ๋ณธ์ ์œผ๋กœ ์กฐ์ธ์„ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • ์กฐ์ธํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์˜ค๋Š” ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๊ฐ ํ…Œ์ด๋ธ”๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€์„œ ํ•ฉ์ณ์•ผ ํ•œ๋‹ค.
  • ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ์ด ํ•ญ์ƒ ๋ณด์žฅ๋˜์ง€ ์•Š๋Š”๋‹ค. (์ค‘๋ณต ๋ฐ์ดํ„ฐ ์กด์žฌ ๊ฐ€๋Šฅ)
    • ๋”ฐ๋ผ์„œ ์ค‘๋ณต์œผ๋กœ ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋˜‘๊ฐ™์ด ์—…๋ฐ์ดํŠธ ํ•ด์ฃผ๋Š”๋ฐ ์‹œ๊ฐ„์„ ์†Œ๋ชจ
  • ์ธ๋ฑ์Šค ๊ตฌ์กฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งŽ์€ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์ถฉ๋ถ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

CAP ์ด๋ก 

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

๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ๊ฐ™์€ ์‹œ๊ฐ„์— ๊ฐ™์€ ๋ฐ์ดํ„ฐ

๋‹ค์ค‘์˜ ํด๋ผ์ด์–ธํŠธ์—์„œ ๊ฐ™์€ ์‹œ๊ฐ„์— ์กฐํšŒํ•˜๋Š” ๋ฐ์ดํ„ฐ๋Š” ํ•ญ์ƒ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ์ž„์„ ๋ณด์ฆํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

์ด๊ฒƒ์€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์ง€์›ํ•˜๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋Šฅ์ด์ง€๋งŒ ์ผ๊ด€์„ฑ์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š” NOSQL์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ์ด ๋Š์Šจํ•˜๊ฒŒ ์ฒ˜๋ฆฌ๋˜์–ด ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.

๋Š์Šจํ•˜๊ฒŒ ์ฒ˜๋ฆฌ๋œ๋‹ค๋Š” ๊ฒƒ์€ ๋ฐ์ดํ„ฐ์˜ ๋ณ€๊ฒฝ์„ ์‹œ๊ฐ„์˜ ํ๋ฆ„์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ๋…ธ๋“œ์— ์ „ํŒŒํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์„ ์ตœ์ข…์ ์œผ๋กœ ์ผ๊ด€์„ฑ์ด ์œ ์ง€๋œ๋‹ค๊ณ  ํ•˜์—ฌ ์ตœ์ข… ์ผ๊ด€์„ฑ ๋˜๋Š” ๊ถ๊ทน์  ์ผ๊ด€์„ฑ์„ ์ง€์›ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

๊ฐ NOSQL๋“ค์€ ๋ถ„์‚ฐ ๋…ธ๋“œ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™”๋ฅผ ์œ„ํ•ด์„œ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค.

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

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

๋…ธ๋“œ๊ฐ€ ๋‹ค์šด๋˜์–ด๋„ ๋‹ค๋ฅธ ๋…ธ๋“œ์— ๋ฌธ์ œ x

๊ฐ€์šฉ์„ฑ: ๋ชจ๋“  ํด๋ผ์ด์–ธํŠธ์˜ ์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ ์š”์ฒญ์— ๋Œ€ํ•˜์—ฌ ํ•ญ์ƒ ์‘๋‹ต์ด ๊ฐ€๋Šฅํ•ด์•ผ ํ•จ์„ ๋ณด์ฆํ•˜๋Š” ๊ฒƒ (= ๋‚ด๊ณ ์žฅ์„ฑ)

๋‚ด๊ณ ์žฅ์„ฑ์„ ๊ฐ€์ง„ NOSQL์€ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์—์„œ ๋ช‡ ๊ฐœ์˜ ๋…ธ๋“œ๊ฐ€ ๋ง๊ฐ€์ง€๋”๋ผ๋„ ์ •์ƒ์ ์ธ ์„œ๋น„์Šค๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

๋ช‡๋ช‡ NOSQL์€ ๊ฐ€์šฉ์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด **๋ฐ์ดํ„ฐ ๋ณต์ œ(Replication)**์„ ์‚ฌ์šฉํ•œ๋‹ค. ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์ค‘ ๋…ธ๋“œ์— ์ค‘๋ณต ์ €์žฅํ•˜์—ฌ ๊ทธ ์ค‘ ๋ช‡ ๋Œ€์˜ ๋…ธ๋“œ๊ฐ€ ๊ณ ์žฅ๋‚˜๋„ ๋ฐ์ดํ„ฐ๊ฐ€ ์œ ์‹ค๋˜์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

๋ฐ์ดํ„ฐ ์ค‘๋ณต ์ €์žฅ ๋ฐฉ๋ฒ•์—๋Š”

  • ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง„ ์ €์žฅ์†Œ๋ฅผ ํ•˜๋‚˜ ๋” ์ƒ์„ฑํ•˜๋Š” Master-Slave ๋ณต์ œ ๋ฐฉ๋ฒ•๊ณผ
  • ๋ฐ์ดํ„ฐ ๋‹จ์œ„๋กœ ์ค‘๋ณต ์ €์žฅํ•˜๋Š” Peer-to-Peer ๋ณต์ œ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

3. ๋„คํŠธ์›Œํฌ ๋ถ„ํ•  ํ—ˆ์šฉ์„ฑ(Partition tolerance)

์ผ๋ถ€ ๋ฉ”์„ธ์ง€ ์†์‹คํ•ด๋„ ์‹œ์Šคํ…œ ์ •์ƒ ๋™์ž‘

๋ถ„ํ•  ํ—ˆ์šฉ์„ฑ์ด๋ž€ ์ง€์—ญ์ ์œผ๋กœ ๋ถ„ํ• ๋œ ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ์—์„œ ๋™์ž‘ํ•˜๋Š” ์‹œ์Šคํ…œ์—์„œ ๋‘ ์ง€์—ญ ๊ฐ„์˜ ๋„คํŠธ์›Œํฌ๊ฐ€ ๋‹จ์ ˆ๋˜๊ฑฐ๋‚˜ ๋„คํŠธ์›Œํฌ ๋ฐ์ดํ„ฐ์˜ ์œ ์‹ค์ด ์ผ์–ด๋”๋ผ๋„ ๊ฐ ์ง€์—ญ ๋‚ด์˜ ์‹œ์Šคํ…œ์€ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•ด์•ผ ํ•จ์„ ์˜๋ฏธํ•œ๋‹ค.

CAP ์ด๋ก ์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•  ๋•Œ, ์–ด๋– ํ•œ ํŠน์„ฑ์— ์ค‘์‹ฌ์„ ๋‘๊ณ  ๊ด€๋ฆฌํ•˜๋Š๋ƒ์— ๋”ฐ๋ผ ์„ ํƒํ•˜๋Š” ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๊ณผ DBMS๊ฐ€ ๋‹ฌ๋ผ์งˆ ๊ฒƒ์ด๋‹ค.

CAP ์ด๋ก ๊ณผ DBMS

cap

CA Consistency + Availabilty, ์ผ๊ด€์„ฑ๊ณผ ๊ฐ€์šฉ์„ฑ์„ ๋งŒ์กฑํ•˜๋Š” DBMS

  • ์‹œ์Šคํ…œ ๋‹ค์šด์—๋„ ๋ฉ”์„ธ์ง€ ์†์‹ค์„ ๋ฐฉ์ง€
  • ํŠธ๋žœ์žญ์…˜ ์‚ฌ์šฉ
  • ๋Œ€ํ‘œ์ ์œผ๋กœ RDBMS๊ฐ€ ์žˆ๋‹ค

CP Consistency + Partition tolerance, ์ผ๊ด€์„ฑ๊ณผ ๋ถ„ํ•  ๋‚ด์„ฑ์„ ๋งŒ์กฑํ•˜๋Š” DBMS

  • ๋ฐ์ดํ„ฐ๋ณด๋‹ค๋Š” ์„ฑ๋Šฅ์ด ์ค‘์š”ํ•œ ํผํฌ๋จผ์Šคํ˜•์— ์ ํ•ฉ
  • ๋Œ€ํ‘œ์ ์œผ๋กœ MongoDB, Hbase๊ฐ€ ์žˆ๋‹ค

AP Availability + Partition tolerance, ๊ฐ€์šฉ์„ฑ๊ณผ ๋ถ„ํ•  ๋‚ด์„ฑ์„ ๋งŒ์กฑํ•˜๋Š” DBMS

  • ๋น„๋™๊ธฐํ™”๋œ ์„œ๋น„์Šค ์Šคํ† ์–ด์— ์ ํ•ฉ (์ผ๊ด€์„ฑ์„ ์š”ํ•˜์ง€ ์•Š๋Š” ์„œ๋น„์Šค)
  • ๋Œ€ํ‘œ์ ์œผ๋กœ Cassandra๊ฐ€ ์žˆ๋‹ค

CAP์™€ NOSQL

NoSQL์€ C + P ๋˜๋Š” A + P์˜ ํŠน์„ฑ์„ ์„ ํƒํ•˜์—ฌ ๊ฐ€์ ธ๊ฐ€๋Š” DBMS์ด๋‹ค.

๋น„ ๊ด€๊ณ„ํ˜• ๋ชจ๋ธ์„ ์ด์šฉํ•œ ๋ฐ์ดํ„ฐ ์ €์žฅ ๋ฐฉ์‹

NOSQL์˜ ๋˜ ๋‹ค๋ฅธ ํŠน์ง•์ด์ž ์žฅ์ ์€ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์„ ์ œ๊ณตํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

๋ฐ์ดํ„ฐ ์ž์ฒด๋ณด๋‹ค๋Š” ๊ทธ ๋ฐ์ดํ„ฐ๋กœ ๋ฌด์—‡์„ ํ•˜๊ณ ์‹ถ์€๊ฐ€์— ์ดˆ์ ์„ ๋งž์ถ˜๋‹ค.

Key-Value๋ฐฉ์‹

key-value

  • ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ํ˜•ํƒœ์˜ NOSQL
  • ํ‚ค๋ฅผ ๊ณ ์œ ํ•œ ์‹๋ณ„์ž๋กœ ์‚ฌ์šฉํ•˜๋Š” ํ‚ค-๊ฐ’ ์Œ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค.
  • ํ‚ค-๊ฐ’ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ํŒŒํ‹ฐ์…”๋‹์ด ๊ฐ€๋Šฅํ•˜๊ณ , ์ˆ˜ํ‰ ํ™•์žฅ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • Riak, Redis, Voldmort

Document ๋ฐฉ์‹

document

  • XML์ด๋‚˜ JSON, YAML ๊ฐ™์€ ๋ฐ์ดํ„ฐ ํƒ€์ž…(document)์„ ์ด์šฉํ•ด์„œ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ €์žฅํ•œ๋‹ค.
  • ํ‚ค-๊ฐ’ ๋ชจ๋ธ์„ ๊ฐœ๋…์ ์œผ๋กœ ํ™•์žฅํ•œ ๊ตฌ์กฐ๋กœ ํ•˜๋‚˜์˜ ํ‚ค์— ํ•˜๋‚˜์˜ ๊ตฌ์กฐํ™”๋œ ๋ฌธ์„œ๋ฅผ ์ €์žฅํ•˜๊ณ  ์กฐํšŒํ•œ๋‹ค.
  • ์ €์žฅ๋œ ๋ฌธ์„œ๋ฅผ ์ปฌ๋ ‰์…˜์œผ๋กœ ๊ด€๋ฆฌํ•˜๋ฉฐ ๋ฌธ์„œ ์ €์žฅ๊ณผ ๋™์‹œ์— ๋ฌธ์„œ ID์— ๋Œ€ํ•œ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ๋ฌธ์„œ ID์— ๋Œ€ํ•œ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ O(1) ์‹œ๊ฐ„ ์•ˆ์— ๋ฌธ์„œ๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋Œ€๋ถ€๋ถ„์˜ ๋ฌธ์„œ ๋ชจ๋ธ์€ BํŠธ๋ฆฌ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 2์ฐจ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. BํŠธ๋ฆฌ๋Š” ํฌ๊ธฐ๊ฐ€ ์ปค์ง€๋ฉด ์ปค์งˆ ์ˆ˜๋ก ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•  ๋•Œ ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง€๊ฒŒ ๋œ๋‹ค. (๋”ฐ๋ผ์„œ ์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ ๋น„์œจ์ด 7:3 ์ •๋„์ผ๋•Œ ์ข‹์€ ์„ฑ๋Šฅ์„ ๋ณด์ธ๋‹ค)
  • MongoDB, CouchDB

Column Model ๋ฐฉ์‹

column

  • RDBMS์—์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ row ๋‹จ์œ„๋กœ ์ €์žฅํ•œ๋‹ค๋ฉด, column model์€ column๋‹จ์œ„๋กœ ์ €์žฅํ•œ๋‹ค.

  • ๊ฐ column์€ column family๋กœ ๋ฌถ์ด๊ณ , ์ด family๋“ค์€ ๋˜ ๋‹ค๋ฅธ column์ด ๋  ์ˆ˜ ์žˆ๋‹ค.

  • ํ•˜๋‚˜์˜ ํ‚ค์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์นผ๋Ÿผ ์ด๋ฆ„๊ณผ ์นผ๋Ÿผ ๊ฐ’์˜ ์Œ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์กฐํšŒํ•œ๋‹ค.

  • ๋ชจ๋“  ์นผ๋Ÿผ์€ ํ•ญ์ƒ ํƒ€์ž„ ์Šคํƒฌํ”„ ๊ฐ’๊ณผ ํ•จ๊ป˜ ์ €์žฅ๋œ๋‹ค.

    • ์ €์žฅ์˜ ๊ธฐ๋ณธ ๋‹จ์œ„๋Š” ์ปฌ๋Ÿผ์œผ๋กœ ์ปฌ๋Ÿผ์€ column name column value time stamp๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.
  • ๊ตฌ๊ธ€์˜ Big Table์ด ๋Œ€ํ‘œ์ ์ธ ์˜ˆ์ด๋‹ค. ์ฐจํ›„ ์ปฌ๋Ÿผํ˜• NOSQL์€ ๋น…ํ…Œ์ด๋ธ”์˜ ์˜ํ–ฅ์„ ๋ฐ›์•˜๋‹ค.

  • Row key, Column Key, Column Family ๊ฐ™์€ ๋น…ํ…Œ์ด๋ธ” ๊ฐœ๋…์ด ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.

  • ๋ฐ์ดํ„ฐ๋ฅผ ๋จผ์ € ์ปค๋ฐ‹๋กœ๊ทธ์™€ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•œ ํ›„ ์‘๋‹ตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋น ๋ฅธ ์‘๋‹ต์†๋„๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

  • ์ฝ๊ธฐ ์—ฐ์‚ฐ ๋Œ€๋น„ ์“ฐ๊ธฐ ์—ฐ์‚ฐ์ด ๋งŽ์€ ์„œ๋น„์Šค๋‚˜ ๋น ๋ฅธ ์‹œ๊ฐ„ ์•ˆ์— ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ์กฐํšŒํ•˜๋Š” ์„œ๋น„์Šค๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ๊ฐ€์žฅ ์ข‹์€ ์„ฑ๋Šฅ์„ ๋ณด์ธ๋‹ค.

  • key-value์™€ ๋ฐ์ดํ„ฐ ์ €์žฅ ๋ฐฉ์‹์€ ๋™์ผ

  • ๋ณดํ†ต์˜ NOSQL์€ order by ๊ฐ™์€ ์ •๋ ฌ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€ ์•Š์ง€๋งŒ, ์ด ๋ชจ๋ธ์€ ๋‚ด๋ถ€์ ์œผ๋กœ key๋ฅผ ์ •๋ ฌ

  • ๋‚ ์งœ๋‚˜ ์„ ์ฐฉ์ˆœ์œผ๋กœ ๋ณด์—ฌ์ค„ ๋•Œ ์œ ์šฉ

  • Hbase, Casandra

Graph ๋ฐฉ์‹

graph

  • ๋ฐ์ดํ„ฐ๋ฅผ ๋…ธ๋“œ๋กœ ํ‘œํ˜„ํ•˜๊ณ , ๋…ธ๋“œ ์‚ฌ์ด์˜ ๊ด€๊ณ„๋ฅผ ํ™”์‚ดํ‘œ๋กœ ํ‘œํ˜„ํ•œ๋‹ค.
  • ๋ฐ์ดํ„ฐ๋“ค์˜ ๊ด€๊ณ„๋ฅผ ์ค‘์š”์‹œํ•ด์„œ ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋“ค์ด ์—ฃ์ง€๋กœ ์ง์ ‘ ์—ฐ๊ฒฐ๋  ์ˆ˜ ์žˆ์–ด ๋ฐ์ดํ„ฐ ์งˆ์˜ ์‹œ ํŠน์ • ๋…ธ๋“œ์™€ ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ ๋ฒˆ์˜ OP๋กœ ํš๋“ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • Sones, Allegro Graph

ํŒŒํ‹ฐ์…”๋‹: ๋…ผ๋ฆฌ์ ์ธ ๋ฐ์ดํ„ฐ element๋“ค์„ ๋‹ค์ˆ˜์˜ entity๋กœ ์ชผ๊ฐœ๋Š” ํ–‰์œ„๋ฅผ ๋œปํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ์šฉ์–ด. ์ฆ‰ ํฐ table์ด๋‚˜ index๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์‰ฌ์šด partiton์ด๋ผ๋Š” ์ž‘์€ ๋‹จ์œ„๋กœ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

RDBMS vs NOSQL

๋‘˜ ์ค‘ ์–ด๋–ค ๊ฒƒ์„ ์„ ํƒํ•ด์•ผ ํ• ๊นŒ?

RDMBS

  • ์•ฑ์˜ ์—ฌ๋Ÿฌ ๋ถ€๋ถ„์—์„œ ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ(ex. join)๊ฐ€ ์ž์ฃผ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒฝ์šฐ
    • NOSQL์ด๋ผ๋ฉด ํ•ญ์ƒ ์—ฌ๋Ÿฌ ์ปฌ๋ ‰์…˜์„ ์ˆ˜์ •ํ•ด์•ผ ํ•œ๋‹ค.
  • ๋ช…ํ™•ํ•œ ์Šคํ‚ค๋งˆ๊ฐ€ ์ค‘์š”ํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๊ฐ€ ๊ทน์ ์œผ๋กœ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์„ ๋•Œ
    • ๋Œ€๋ถ€๋ถ„ ์„œ๋น„์Šค๋Š” ์Šคํ‚ค๋งˆ๊ฐ€ ์œ ๋™์ ์ธ ๊ฒฝ์šฐ๊ฐ€ ๊ฑฐ์˜ ์—†๋‹ค.

NOSQL

  • ์ •ํ™•ํ•œ ๋ฐ์ดํ„ฐ ์š”๊ตฌ์‚ฌํ•ญ์„ ์•Œ ์ˆ˜ ์—†์„ ๋•Œ
  • ์ฝ๊ธฐ(read) ์ฒ˜๋ฆฌ๋ฅผ ์ž์ฃผ ํ•˜์ง€๋งŒ, ๋ฐ์ดํ„ฐ๋ฅผ ์ž์ฃผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ
    • ์ฆ‰ ํ•œ๋ฒˆ์˜ ๋ณ€๊ฒฝ์œผ๋กœ ์ˆ˜์‹ญ ๊ฐœ์˜ ๋ฌธ์„œ๋ฅผ ์ˆ˜์ •ํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ˆ˜ํ‰์ ์œผ๋กœ ํ™•์žฅํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ
    • ์ฆ‰ ๋ง‰๋Œ€ํ•œ ์–‘์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ค„์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ, ์ฝ๊ธฐ/์“ฐ๊ธฐ ์ฒ˜๋ฆฌ๋Ÿ‰์ด ํฐ ๊ฒฝ์šฐ

์ฐธ๊ณ 

CAP CAP RDBMSvsNOSQL NOSQL

๋ฉด์ ‘ ์˜ˆ์ƒ ์งˆ๋ฌธ

  1. NOSQL์€ ๋ฌด์—‡์ด๊ณ  ์–ด๋–ค ํŠน์ง•์ด ์žˆ๋‚˜์š”?
  1. RDBMS์™€ NOSQL์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ธ๊ฐ€์š”?
  1. NOSQL์˜ ๋ฐ์ดํ„ฐ ์ €์žฅ ๋ฐฉ์‹์—๋Š” ๋ฌด์—‡์ด ์žˆ๋‚˜์š”?