๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป Computer Science/๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

[๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค] ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(RDB)์™€ ๋น„๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(NoSQL) ์ฐจ์ด

by Jay Din 2023. 11. 9.
728x90
๋ฐ˜์‘ํ˜•

RDB์™€ NoSQL 

๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
(RDB; Relational Database)
๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(RDB)๋Š” ์‚ฌ์ „์— ์—„๊ฒฉํ•˜๊ฒŒ ์ •์˜๋œ DB schema๋ฅผ ์š”๊ตฌํ•˜๋Š” table ๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค.
๋น„๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
(NoSQL; Not only SQL)
table ํ˜•์‹์ด ์•„๋‹Œ ๋น„์ •ํ˜• ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

 

RDB๋Š” ์—„๊ฒฉํ•œ schema๋กœ ์ธํ•ด ๋ฐ์ดํ„ฐ ์ค‘๋ณต์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ Update๊ฐ€ ๋งŽ์„ ๋•Œ ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

NoSQL์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ค‘๋ณต์œผ๋กœ ์ธํ•ด ๋ฐ์ดํ„ฐ update ์‹œ ๋ชจ๋“  ์ปฌ๋ ‰์…˜์—์„œ ์ˆ˜์ •์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— update๊ฐ€ ์ ๊ณ  ์กฐํšŒ๊ฐ€ ๋งŽ์„ ๋•Œ ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

 

* ๋น„์ •ํ˜• ๋ฐ์ดํ„ฐ๋ž€?
๋น„์ •ํ˜• ๋ฐ์ดํ„ฐ๋Š” ํ‹€์ด ์žกํ˜€์žˆ์ง€ ์•Š๊ณ  ์‚ฌ์ „ ์ •์˜๊ฐ€ ์—†๋Š” ๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค.
๋‹ค์–‘ํ•˜๊ณ  ๋ฐฉ๋Œ€ํ•œ ์–‘์˜ ๋ฐ์ดํ„ฐ์ด๋ฉฐ ๋ณ„๋„์˜ ๋ถ„์„ ์ฒ˜๋ฆฌ ๊ธฐ์ˆ ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
์ฆ‰, ๋ฏธ๋ฆฌ ์ •ํ•ด์ ธ์„œ ๊ณ ์ •๋˜์–ด ์žˆ๋Š” ํ•„๋“œ์— ์ €์žฅ๋˜์–ด ์žˆ์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ๋“ค์–ด, ํŽ˜์ด์Šค๋ถ, ํŠธ์œ„ํ„ฐ, ์œ ํŠœ๋ธŒ ๋“ฑ์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” ์†Œ์…œ ๋ฐ์ดํ„ฐ & Iot ํ™˜๊ฒฝ์—์„œ ์ƒ์„ฑ๋˜๋Š” ์œ„์น˜ ์ •๋ณด ๋˜๋Š” ์„ผ์„œ ๋ฐ์ดํ„ฐ์™€ ๊ฐ™์€ ์‚ฌ๋ฌผ ๋ฐ์ดํ„ฐ

 

Key-value storage system (NoSQL)์ด๋ž€?

๊ธฐ์กด์˜ ๊ด€๊ณ„ํ˜• database์˜ ๊ฒฝ์šฐ์—๋Š” ๋‹จ์ผ ๊ธฐ์—…์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š”๋ฐ ์ตœ์ ํ™” ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ตœ์‹  ๋ฐ์ดํ„ฐ๋“ค์€ ๊ผญ ๊ด€๊ณ„ํ˜•์œผ๋กœ ์ฒ˜๋ฆฌ๋  ํ•„์š”๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ๋„ ๋งŽ๊ณ , ๋‹ค๋ค„์•ผ ํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์–‘๋„ ํ›จ์”ฌ ์ปค์กŒ์Šต๋‹ˆ๋‹ค.

 

์ฆ‰, Big data๋ผ๊ณ  ์ผ๊ฑธ์–ด์ง€๋Š” ๋งŽ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ๋‹ค์–‘ํ•œ ํ•ด๊ฒฐ์ฑ… ์ค‘ ํ•˜๋‚˜์˜ ๋ฐฉ๋ฒ•์ด Key-value storage system์ž…๋‹ˆ๋‹ค.

 

MongoDB๋กœ ๋ณด๋Š” NoSQL ์˜ˆ์‹œ

NoSQL์˜ ์ข…๋ฅ˜๋Š” Bigtable, DynamoDB, Cassandra, MongoDB ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ ์ค‘ MongoDB์˜ ์˜ˆ์‹œ๋ฅผ ๋ณด๋ฉด์„œ NoSQL์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

db.createCollection("student")

db.student.insert({"id": 2022394, "name": "Nossi", "class": ["Math", "Eng"]})
db.student.insert({"id": 2021921, "name": "Bob", "class": ["Eng"]})

db.student.find() // Fetch all students in JSON format
db.student.findOne({"id": 2022394}) // Find one matching student

db.student.remove({"name": "Nossi"}) // Delete matching students
db.student.drop() // Drops the entire collection

 

 

RDB์™€ NoSQL ์ฐจ์ด

  RDB(SQL) NoSQL
๋ฐ์ดํ„ฐ ์ €์žฅ ๋ชจ๋ธ table json document / key-value / ๊ทธ๋ž˜ํ”„ ๋“ฑ
๊ฐœ๋ฐœ ๋ชฉ์  ๋ฐ์ดํ„ฐ ์ค‘๋ณต ๊ฐ์†Œ ์• ์ž์ผ / ํ™•์žฅ๊ฐ€๋Šฅ์„ฑ / ์œ ์—ฐ์„ฑ
์˜ˆ์‹œ Oracle, MySQL, PostgreSQL ๋“ฑ MongoDB, DynamoDB ๋“ฑ
Schema ์—„๊ฒฉํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์œ ์—ฐํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ
โญ์žฅ์ โญ - ๋ช…ํ™•ํ•œ ๋ฐ์ดํ„ฐ๊ตฌ์กฐ ๋ณด์žฅ
- ๋ฐ์ดํ„ฐ ์ค‘๋ณต ์—†์ด ํ•œ๋ฒˆ๋งŒ ์ €์žฅ (๋ฌด๊ฒฐ์„ฑ)
- ๋ฐ์ดํ„ฐ ์ค‘๋ณต์ด ์—†์–ด์„œ ๋ฐ์ดํ„ฐ update ์šฉ์ด
- ์šฐ์—ฐํ•˜๊ณ  ์ž์œ ๋กœ์šด ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ
- ์ƒˆ๋กœ์šด ํ•„๋“œ ์ถ”๊ฐ€ ์ž์œ ๋กœ์›€
- ์ˆ˜ํ‰์  ํ™•์žฅ(scale out) ์šฉ์ด
โญ๋‹จ์ โญ - ์‹œ์Šคํ…œ์ด ์ปค์ง€๋ฉด join๋ฌธ์ด ๋งŽ์€ ๋ณต์žกํ•œ query๊ฐ€ ํ•„์š”
- ์ˆ˜ํ‰์  ํ™•์žฅ์ด ๊นŒ๋‹ค๋กœ์›Œ ๋น„์šฉ์ด ํฐ ์ˆ˜์ง์  ํ™•์žฅ(Scale up)์ด ์ฃผ๋กœ ์‚ฌ์šฉ๋จ
- ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๊ฐ€ ์œ ์—ฐํ•˜์ง€ ๋ชปํ•จ
- ๋ฐ์ดํ„ฐ ์ค‘๋ณต ๋ฐœ์ƒ ๊ฐ€๋Šฅ
- ์ค‘๋ณต ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์‹œ ๋ชจ๋“  ์ปฌ๋ ‰์…˜์—์„œ ์ˆ˜์ •์ด ํ•„์š”ํ•จ
- ๋ช…ํ™•ํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ๋ณด์žฅ ์•ˆ๋จ
โญ์‚ฌ์šฉโญ - ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๊ฐ€ ๋ณ€๊ฒฝ๋  ์—ฌ์ง€๊ฐ€ ์—†์ด ๋ช…ํ™•ํ•œ ๊ฒฝ์šฐ
- ๋ฐ์ดํ„ฐ update๊ฐ€ ์žฆ์€ ์‹œ์Šคํ…œ(์ค‘๋ณต ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์œผ๋ฏ€๋กœ ๋ณ€๊ฒฝ์— ์œ ๋ฆฌ)
- ์ •ํ™•ํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๊ฐ€ ์ •ํ•ด์ง€์ง€ ์•Š์€ ๊ฒฝ์šฐ
- Update๊ฐ€ ์ž์ฃผ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š๋Š” ๊ฒฝ์šฐ (์กฐํšŒ๊ฐ€ ๋งŽ์€ ๊ฒฝ์šฐ)
- ๋ฐ์ดํ„ฐ ์–‘์ด ๋งค์šฐ ๋งŽ์€ ๊ฒฝ์šฐ (scale out ๊ฐ€๋Šฅ )

 

์ˆ˜์ง์  ํ™•์žฅ(Scale up)๊ณผ ์ˆ˜ํ‰์  ํ™•์žฅ(Scale out) ์ฐจ์ด

DB์™€ ๋น„๊ตํ•˜์—ฌ NoSQL์˜ ํŠน์ง•์€ ACID, Transaction์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

RDB๋Š” ACID์™€ Transaction์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ์ˆ˜ํ‰์  ํ™•์žฅ์ด ์‰ฝ์ง€๊ฐ€ ์•Š์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ, RDB ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” multiple server๋กœ ์ˆ˜ํ‰์  ํ™•์žฅ์„ ํ•˜๊ฒŒ ๋˜๋ฉด join์„ ํ•˜๊ธฐ ์œ„ํ•ด ๊ต‰์žฅํžˆ ๋ณต์žกํ•œ ๊ณผ์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

 

RDB๋„ ์ˆ˜ํ‰์  ํ™•์žฅ์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ NoSQL์— ๋น„ํ•ด ํ›จ์”ฌ ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค.

RDB๋ฅผ ์ˆ˜ํ‰์  ํ™•์žฅํ•˜๋ ค๋ฉด ์ƒค๋”ฉ(sharding, ๋ฐ์ดํ„ฐ๊ฐ€ ์ˆ˜ํ‰์ ์œผ๋กœ ๋ถ„ํ• ๋˜๊ณ  ๊ธฐ๊ธฐ์˜ ๋ชจ์Œ ์ „๋ฐ˜์— ๊ฑธ์ณ ๋ถ„์‚ฐ๋˜๋Š” ๊ฒฝ์šฐ)์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

ACID ์ค€์ˆ˜๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ RDB๋ฅผ ์ƒค๋”ฉํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ๊นŒ๋‹ค๋กœ์šด ์ž‘์—…์ž…๋‹ˆ๋‹ค.

 

์ •๋ฆฌํ•˜๋ฉด

NoSQL์„ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์€ ๊ฒฝ์šฐ

NoSQL์€ ์ •ํ™•ํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๊ฐ€ ์ •ํ•ด์ง€์ง€ ์•Š์€ ๊ฒฝ์šฐ, ๋ฐ์ดํ„ฐ update๊ฐ€ ์ž์ฃผ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š๊ณ  ์กฐํšŒ๊ฐ€ ๋งŽ์€ ๊ฒฝ์šฐ, ๋˜ scale out์ด ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ๋ฐ์ดํ„ฐ ์–‘์ด ๋งค์šฐ ๋งŽ์€ ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์Šต๋‹ˆ๋‹ค.

RDB๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์€ ๊ฒฝ์šฐ

RDB๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๊ฐ€ ๋ช…ํ™•ํ•˜์—ฌ ๋ณ€๊ฒฝ๋  ์—ฌ์ง€๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ, ๋˜ ๋ฐ์ดํ„ฐ ์ค‘๋ณต์ด ์—†์œผ๋ฏ€๋กœ ๋ฐ์ดํ„ฐ update๊ฐ€ ์žฆ์€ ์‹œ์Šคํ…œ์—์„œ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์Šต๋‹ˆ๋‹ค.

 

 

 


์ฐธ๊ณ 

https://www.nossi.dev/cs/db

https://velog.io/@uvictoli/%EB%B9%84%EC%A0%95%ED%98%95-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4

728x90
๋ฐ˜์‘ํ˜•