Welcome! ๐Ÿ™‹โ€โ™‚๏ธ View more

Engineering ๐Ÿ’ป/CS

[DB] SQL๊ณผ NoSQL

DeepFlame 2022. 2. 2. 18:22

๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃธ์— ์žˆ์–ด์„œ SQL๊ณผ NoSQL์„ ํ•„์ˆ˜์ ์œผ๋กœ ์ ‘ํ•ด์•ผํ•˜๋Š” ์–ธ์–ด์ด๊ณ , ๊ทธ ์ฐจ์ด๋„ ๋ถ„๋ช…ํžˆ ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. ์ด ์ „์— ์ •๋ฆฌ๋ฅผ ํ–ˆ์ง€๋งŒ, ์ข€ ๋” ์ž์„ธํžˆ ์ •๋ฆฌ๋ฅผ ํ•ด๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค! ๐Ÿ˜ค

https://deep-flame.tistory.com/7

 

[DB] ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ธฐ์ดˆ

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

deep-flame.tistory.com

 

 

SQL 


Structured Query Language์˜ ์ค„์ž„๋ง๋กœ, ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ์Šคํ…œ(RDBMS)์—์„œ ์ž๋ฃŒ๋ฅผ ๊ด€๋ฆฌ ๋ฐ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋œ ์–ธ์–ด์ด๋‹ค. 

๐Ÿ‘‰ SQL ๋ฌธ๋ฒ•์˜ ์ข…๋ฅ˜

  1. DDL (Data Definition Language, ๋ฐ์ดํ„ฐ ์ •์˜ ์–ธ์–ด)
    ๋ฐ์ดํ„ฐ๋ฅผ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ์–ธ์–ด (CREATE, ALTER, DROP...)
  2. DML (Data Manipulation Language, ๋ฐ์ดํ„ฐ ์กฐ์ž‘ ์–ธ์–ด)
    ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€/์ˆ˜์ •/์‚ญ์ œํ•˜๊ธฐ ์œ„ํ•œ ์–ธ์–ด (SELECT, INSERT, UPDATE ...)
  3. DCL (Data Control Language, ๋ฐ์ดํ„ฐ ์ œ์–ด ์–ธ์–ด)
    ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์ ‘๊ทผํ•˜๋Š” ๊ถŒํ•œ์„ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•œ ์–ธ์–ด (GRANT, REVOKE ...)

 

๐Ÿ‘‰ RDBMS์˜ ์ข…๋ฅ˜

  • Oracle
    ํ˜„์žฌ ๊ฐ€์žฅ ๋งŽ์ด ์“ฐ์ด๋Š” RDBMS. ์‚ฌ์‹ค์ƒ ํ‘œ์ค€์ด๋‹ค.
  • PostgreSQL
    ์˜คํ”ˆ์†Œ์Šค ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ๊ฐœ๋ฐœ๋œ ์†Œํ”„ํŠธ์›จ์–ด ์‹คํ—˜์ ์ด๊ณ  ์ง„๋ณด์ ์ธ ๊ธฐ๋Šฅ์„ ์ถ”๊ตฌํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ํ•„์š”ํ•œ ๋ถ€๋ถ„์„ ๊ณ ์•ˆํ•ด์„œ ๊ฐœ๋ฐœ๋œ๋‹ค.
  • MySQL
    ์ฒ˜์Œ์—๋Š” ๊ฒฝ๋Ÿ‰ DB๋ฅผ ๊ฐ•์กฐํ•˜์—ฌ ์ตœ์†Œํ•œ์˜ ๊ธฐ๋Šฅ๋งŒ์„ ๊ฐ–์ถ”์—ˆ์ง€๋งŒ, ์ง€๊ธˆ์€ ๊ธฐ๋Šฅ์ด ํ™•์žฅ๋จ

 

 

NoSQL


๊ด€๊ณ„ํ˜• DB๋ฅผ ์ง€์–‘ํ•˜๋ฉฐ, ์Šคํ‚ค๋งˆ๊ฐ€ ์—†๊ฑฐ๋‚˜ ๋А์Šจํ•œ ์Šคํ‚ค๋งˆ๋ฅผ ์ œ๊ณตํ•˜๋Š” ์ €์žฅ์†Œ์ด๋‹ค. ๋ณต์žกํ•œ ๊ตฌ์กฐ๋ฅผ ์‰ฝ๊ฒŒ ์ €์žฅํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋Œ€๋Ÿ‰์˜ ๋ถ„์‚ฐ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ , ์กฐํšŒํ•˜๋Š”๋ฐ ํŠนํ™”๋œ ์–ธ์–ด์ด๋‹ค.

 

๐Ÿ‘‰ CAP ์ด๋ก 

์‹œ์Šคํ…œ์€ ์ผ๊ด€์„ฑ, ๊ฐ€์šฉ์„ฑ, ๋ถ„๋‹จ ํ—ˆ์šฉ์„ฑ ์ค‘ ๋‘ ๊ฐ€์ง€๋งŒ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋Š” CA/CP/AP๋กœ ๋‚˜๋‰œ๋‹ค.

์ถœ์ฒ˜: https://ohjongsung.io/2019/05/01/cap-%EC%9D%B4%EB%A1%A0%EA%B3%BC-pacelc-%EC%9D%B4%EB%A1%A0

 

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

    1. ๋™๊ธฐ์‹: ๋ฐ์ดํ„ฐ ์ €์žฅ ๊ฒฐ๊ณผ๋ฅผ ํด๋ผ์ด์–ธํŠธ๋กœ ์‘๋‹ตํ•˜๊ธฐ ์ „, ๋ชจ๋“  ๋…ธ๋“œ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค. (์‘๋‹ต์‹œ๊ฐ„์ด ๋А๋ฆฌ๋‹ค.)
    2. ๋น„๋™๊ธฐ์‹: ๋ฉ”๋ชจ๋ฆฌ๋‚˜ ์ž„์‹œ ํŒŒ์ผ์— ๊ธฐ๋กํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ์— ๋จผ์ € ์‘๋‹ตํ•œ ๋‹ค์Œ, ์ด๋ฒคํŠธ ๋˜๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ ๋…ธ๋“œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋™๊ธฐํ™”ํ•œ๋‹ค. (์“ฐ๊ธฐ ๋…ธ๋“œ์— ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ๊ฐ€ ์†์‹ค๋  ์ˆ˜ ์žˆ๋‹ค.)
  2. ๊ฐ€์šฉ์„ฑ (Availability)
    ๋ชจ๋“  ํด๋ผ์ด์–ธํŠธ์˜ ์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ ์š”์ฒญ์— ๋Œ€ํ•˜์—ฌ ํ•ญ์ƒ ์‘๋‹ต์ด ๊ฐ€๋Šฅํ•จ์„ ๋ณด์ฆํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด ๋ช‡ ๊ฐœ์˜ ๋…ธ๋“œ๊ฐ€ ๋ง๊ฐ€์ง€๋”๋ผ๋„ ์ •์ƒ์ ์ธ ์„œ๋น„์Šค๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
    ์ด๋ฅผ ์œ„ํ•ด ๋ช‡๋ช‡ NoSQL์€ ๋ฐ์ดํ„ฐ ๋ณต์ œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
    1. Master-Slave: ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง„ ์ €์žฅ์†Œ๋ฅผ ํ•˜๋‚˜ ๋” ์ƒ์„ฑ
    2. Peer-to-Peer: ๋ฐ์ดํ„ฐ ๋‹จ์œ„๋กœ ์ค‘๋ณต ์ €์žฅ

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

๊ด€๊ณ„ํ˜• DB๋Š” CA ์‹œ์Šคํ…œ์ด๋‹ค. ๋”ฐ๋ผ์„œ ๋‹ค๋Ÿ‰์˜ ์„œ๋ฒ„๋ฅผ ์šด์šฉํ•˜๋Š” ํด๋Ÿฌ์Šคํ„ฐ๋ง์— ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค.
๋Œ€๋ถ€๋ถ„์˜ NoSQL์€ ๋Œ€์šฉ๋Ÿ‰ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•˜๋Š”๋ฐ ์•Œ๋งž์€ CP๋‚˜ AP ์‹œ์Šคํ…œ์ด๋‹ค.

 

 

๐Ÿ‘‰ ์ €์žฅ ๋ฐฉ์‹์— ๋”ฐ๋ฅธ NoSQL ๋ถ„๋ฅ˜

Key-Value, Document, Column์œผ๋กœ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋‹ค.

1. Key-Value Model

  • ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ํ˜•ํƒœ. ์ €์žฅ๊ณผ ์กฐํšŒ๋ผ๋Š” ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ์›์น™์— ์ถฉ์‹คํ•œ DB.
    ํ•˜๋‚˜์˜ ํ‚ค์— ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ์ด๋‹ค.
  • ๊ฐ’์— ๋ชจ๋“  ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ํ—ˆ์šฉํ•จ → ๊ฐœ๋ฐœ์ž๋“ค์ด ๋ฐ์ดํ„ฐ ์ž…๋ ฅ ๋‹จ๊ณ„์—์„œ ๊ฒ€์ฆ๋กœ์ง์„ ์ œ๋Œ€๋กœ ๊ตฌํ˜„ํ•ด์•ผ ํ•จ
  • ํ•˜๋‚˜์˜ ์„œ๋น„์Šค ์š”์ฒญ์— ๋‹ค์ˆ˜์˜ ๋ฐ์ดํ„ฐ ์กฐํšŒ ๋ฐ ์ˆ˜์ • ์—ฐ์ƒ์ด ๋ฐœ์ƒํ•˜๋ฉด ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜์—ฌ ์ •ํ•ฉ์„ฑ์„ ๋ณด์žฅํ•  ์ˆ˜ ์—†๋‹ค. (AP)
  • ๊ฐ„๋‹จํ•œ DB๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ž์ฃผ ์ฝ๊ณ  ์“ฐ๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉํ•œ๋‹ค.
    1. ์žฅ๋ฐ”๊ตฌ๋‹ˆ ์ •๋ณด์™€ ๊ฐ™์€ ์ผ์‹œ์  ์†์„ฑ ์ถ”์ 
    2. ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ ์ •๋ณด์™€ ๊ตฌ์„ฑ ์ •๋ณด ์ €์žฅ
    3. ์ด๋ฏธ์ง€๋‚˜ ์˜ค๋””์˜ค ํŒŒ์ผ๊ฐ™์€ ๋Œ€์šฉ๋Ÿ‰ ๊ฐ์ฒด ์ €์žฅ
  • Redis. AWS DynamoDB.

 

2. Document Model

  • key-value Model์˜ ํ™•์žฅํ•œ ๊ตฌ์กฐ. ํ•˜๋‚˜์˜ ํ‚ค์— ํ•˜๋‚˜์˜ ๊ตฌ์กฐํ™”๋œ ๋ฌธ์„œ๋ฅผ ์ €์žฅํ•˜๊ณ  ์กฐํšŒํ•œ๋‹ค.
    ์—ฌ๊ธฐ์„œ ๋ฌธ์„œ๋ž€ JSON์ด๋‚˜ XML๊ฐ™์€ ํ‘œ์ค€ ํ˜•์‹์„ ๊ฐ€์ง„ ๋ฌธ์„œ์ด๋‹ค. (Key-Value์™€ ์ฐจ์ด์ )
  • B ํŠธ๋ฆฌ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 2์ฐจ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์“ฐ๊ธฐ์˜ ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง€๊ฒŒ ๋œ๋‹ค. (์ฝ๊ธฐ:์“ฐ๊ธฐ = 7:3 → ์ด์ƒ์ )
  • ์•„๋ž˜์™€ ๊ฐ™์ด ์‚ฌ์šฉ๋œ๋‹ค.
    1. ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์“ฐ๋Š” ์›น ์‚ฌ์ดํŠธ์šฉ ๋ฐฑ์—”๋“œ ์ง€์›
    2. ์ œํ’ˆ์ฒ˜๋Ÿผ ๋‹ค์–‘ํ•œ ์†์„ฑ์ด ์žˆ๋Š” ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ
    3. ๋‹ค์–‘ํ•œ ์œ ํ˜•์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ถ”์ 
    4. JSON ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์•ฑ
    5. ๋น„์ •๊ทœํ™”๋œ ์ค‘์ฒฉ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์•ฑ
  • MongoDB.

Document Model์˜ ์˜ˆ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

{
"_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"
    ]
}

 

3. Column Model

  • Rowํ˜•์œผ๋กœ ์ €์žฅํ•˜๋Š” ๋Œ€์‹  Column์œผ๋กœ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
    • c1 ์—ด์˜ ๊ฐ’์„ ์กฐํšŒํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์šฐ๋ฆฌ๋Š” ๋ชจ๋“  ํ–‰์„ ์ฝ์–ด์•ผํ•œ๋‹ค.
      ์ถœ์ฒ˜: https://nesoy.github.io/articles/2019-10/Column-Oriented-DBMS
    • ์•„๋ž˜ ์ฒ˜๋Ÿผ ํ•œ๋ฒˆ์˜ ์กฐํšŒ๋กœ c1 ์—ด์˜ ๊ฐ’์„ ๋ชจ๋‘ ๊ฐ€์ ธ์˜ค๊ณ  ์‹ถ๋‹ค. → Column Model ์‚ฌ์šฉ
      ์ถœ์ฒ˜: https://nesoy.github.io/articles/2019-10/Column-Oriented-DBMS
  • ํ•˜๋‚˜์˜ ํ‚ค์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์นผ๋Ÿผ ์ด๋ฆ„๊ณผ ์นผ๋Ÿผ ๊ฐ’์˜ ์Œ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์กฐํšŒํ•œ๋‹ค. ์ €์žฅ์˜ ๊ธฐ๋ณธ ๋‹จ์œ„๋Š” Column์ด๋ฉฐ, Column ์ˆ˜๊ฐ€ ๋งŽ๋‹ค๋ฉด ์ด๋ฅผ ๋ฌถ์–ด Column Family๋กœ ๊ตฌ์„ฑํ•œ๋‹ค.
  • ๋‹ค์ˆ˜์˜ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์šด์˜๋œ๋‹ค. ๋งŒ์•ฝ ๋‹จ์ผ์„œ๋ฒ„์—์„œ ์šด์˜ํ•ด๋„ ๋ ๋งŒํผ ๋ฐ์ดํ„ฐ๊ฐ€ ์ ๋‹ค๋ฉด ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค.
  • ์ฝ๊ธฐ๋ณด๋‹ค ์“ฐ๊ธฐ์— ํŠนํ™”๋˜์–ด ์žˆ๋‹ค. ๋น ๋ฅธ ์‹œ๊ฐ„ ์•ˆ์— ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ์กฐํšŒํ•˜๋Š” ์„œ๋น„์Šค๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ๊ฐ€์žฅ ์ข‹์€ ์„ฑ๋Šฅ์„ ๋ณด์ธ๋‹ค.
    1. ์ˆ˜๋ฐฑ๋งŒ ํ…Œ๋ผ๋ฐ”์ดํŠธ ์ •๋„์˜ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์•ฑ
    2. ์ง€๋ฆฌ์ ์œผ๋กœ ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ์— ๋ถ„์‚ฐ๋˜์–ด ์žˆ๋Š” ์•ฑ
    3. ๋™์  ํ•„๋“œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์•ฑ
  • BigTable. Cassandra. HBase.

 

 

์ฐธ๊ณ 
https://jaemunbro.medium.com/nosql-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%ED%8A%B9%EC%84%B1-%EB%B9%84%EA%B5%90-c9abe1b2838c