๊ด€๋ฆฌ ๋ฉ”๋‰ด

๋‚˜์˜ ๋ชจ์–‘

[DB] SQL vs NoSQL ๋ณธ๋ฌธ

WILT/DB

[DB] SQL vs NoSQL

kexon 2022. 8. 7. 15:23

๐Ÿ’™ SQL  vs  NoSQL

  SQL NoSQL
๊ธฐ๋ฐ˜ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋น„๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
๋ฐ์ดํ„ฐ ์ €์žฅ SQL์„ ์ด์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ํ…Œ์ด๋ธ”์— ์ €์žฅ key-value, document, wide-column, graph ๋“ฑ์˜ ๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ
๋ฐ์ดํ„ฐ ํ˜•์‹ ํ–‰(์—ด์˜ ๋ฐ์ดํ„ฐ ํ˜•์‹)๊ณผ ์—ด(์†์„ฑ)๋กœ ๊ตฌ์„ฑ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ณ ์ •๋˜์–ด์žˆ์ง€ ์•Š์Œ
์Šคํ‚ค๋งˆ - ์Šคํ‚ค๋งˆ์— ๋งž์ถฐ ์ฝ์–ด์™€์„œ ์ง๊ด€์ ์œผ๋กœ ํŒŒ์•… ๊ฐ€๋Šฅ
- ์ฒ˜๋ฆฌํ•˜๋ ค๋Š” ๋ฐ์ดํ„ฐ ์†์„ฑ๋ณ„๋กœ ์—ด(column)์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋ฏธ๋ฆฌ ์ •ํ•ด์•ผ๋จ
- ์Šคํ‚ค๋งˆ์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜ด(schema on read)
- ํ–‰ ์ถ”๊ฐ€ ์‹œ ์ฆ‰์‹œ ์ƒˆ๋กœ์šด ์—ด์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Œ
- ๊ฐœ๋ณ„ ์†์„ฑ์— ๋ชจ๋“  ์—ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜๋“œ์‹œ ์ž…๋ ฅํ•˜์ง€ ์•Š์•„๋„ ๋จ
์ฟผ๋ฆฌ ํ…Œ์ด๋ธ”์˜ ํ˜•์‹๊ณผ ํ…Œ์ด๋ธ”๊ฐ„์˜ ๊ด€๊ณ„์— ๋งž์ถฐ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญ ๊ตฌ์กฐํ™” ๋˜์ง€ ์•Š์€ ์ฟผ๋ฆฌ ์–ธ์–ด๋กœ๋„ ๋ฐ์ดํ„ฐ ์š”์ฒญ์ด ๊ฐ€๋Šฅ
ํ™•์žฅ์„ฑ ์ˆ˜์ง์ ์œผ๋กœ ํ™•์žฅ ์ˆ˜ํ‰์ ์œผ๋กœ ํ™•์žฅ
์ข…๋ฅ˜ MySQL, Oracle, SQLite, PostgresSQL, MariaDB MongoDB, Casandra

๐Ÿ’™ NoSQL๊ธฐ๋ฐ˜ ๋น„๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์„ฑ

Key-Value ํƒ€์ž…

  • ์†์„ฑ์„ Key-Value์˜ ์Œ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐฐ์—ด์˜ ํ˜•ํƒœ๋กœ ์ €์žฅ
  • Key: ์†์„ฑ ์ด๋ฆ„
  • Value: ์†์„ฑ์— ์—ฐ๊ฒฐ๋œ ๋ฐ์ดํ„ฐ ๊ฐ’
  • ๋Œ€ํ‘œ์ ์ธ Key-Value ํ˜•์‹์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค: Redis, Dynamo ๋“ฑ

๋ฌธ์„œํ˜•(Document) ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

  • ๋ฐ์ดํ„ฐ๋ฅผ ํ…Œ์ด๋ธ”์ด ์•„๋‹Œ ๋ฌธ์„œ์ฒ˜๋Ÿผ ์ €์žฅํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
  • ๋งŽ์€ ๋ฌธ์„œํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ JSON๊ณผ ์œ ์‚ฌํ•œ ํ˜•์‹์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌธ์„œํ™”ํ•˜์—ฌ ์ €์žฅ
  • ๊ฐ๊ฐ์˜ ๋ฌธ์„œ๋Š” ํ•˜๋‚˜์˜ ์†์„ฑ์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , ์ปฌ๋ ‰์…˜์ด๋ผ๊ณ  ํ•˜๋Š” ๊ทธ๋ฃน์œผ๋กœ ๋ฌถ์–ด์„œ ๊ด€๋ฆฌ
  • ๋Œ€ํ‘œ์ ์ธ ๋ฌธ์„œํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค: MongoDB

Wide-Column ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์—ด(column) ๋ฐ์ดํ„ฐ๋ฅผ ์ง‘์ค‘์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
  • ๊ฐ ์—ด์—๋Š” key-value ํ˜•์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜๊ณ , ์ปฌ๋Ÿผ ํŒจ๋ฐ€๋ฆฌ(column families)๋ผ๊ณ  ํ•˜๋Š” ์—ด ์ง‘ํ•ฉ์ฒด ๋‹จ์œ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌ
  • ํ•˜๋‚˜์˜ ํ–‰์— ๋งŽ์€ ์—ด์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ์–ด์„œ ์œ ์—ฐ์„ฑ์ด ๋†’์Œ
  • ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์— ํ•„์š”ํ•œ ์—ด์„ ์œ ์—ฐํ•˜๊ฒŒ ์„ ํƒํ•  ์ˆ˜ ์žˆ์–ด์„œ ๊ทœ๋ชจ๊ฐ€ ํฐ ๋ฐ์ดํ„ฐ ๋ถ„์„์— ์ฃผ๋กœ ์‚ฌ์šฉ
  • ๋Œ€ํ‘œ์ ์ธ wide-column ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค: Cassandra, HBase

๊ทธ๋ž˜ํ”„(Graph) ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

  • ์ž๋ฃŒ๊ตฌ์กฐ์˜ ๊ทธ๋ž˜ํ”„์™€ ๋น„์Šทํ•œ ํ˜•์‹์œผ๋กœ ๋ฐ์ดํ„ฐ ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
  • ๋…ธ๋“œ(nodes)์— ์†์„ฑ๋ณ„(entities)๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ
  • ๊ฐ ๋…ธ๋“œ๊ฐ„ ๊ด€๊ณ„๋Š” ์„ (edge)์œผ๋กœ ํ‘œํ˜„
  • ๋Œ€ํ‘œ์ ์ธ ๊ทธ๋ž˜ํ”„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค: Neo4J, InfiniteGraph

๐Ÿ’™ SQL ๊ธฐ๋ฐ˜ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ

1. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ACID ์„ฑ์งˆ์„ ์ค€์ˆ˜ํ•ด์•ผ ํ•  ๋•Œ

  • ACID: Atomicity(์›์ž์„ฑ), Consistency(์ผ๊ด€์„ฑ), Isolation(๋…๋ฆฝ์„ฑ), Durability(์ง€์†์„ฑ)
  • ACID๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์‹คํ–‰๋˜๋Š” ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜(Transaction)์˜ ์ƒํƒœ๋ณ€ํ™”๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ณผ์ •์—์„œ ์•ˆ์ „์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์„ฑ์งˆ์ด๋‹ค. SQL์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š” ๋ฐฉ์‹์„ ์ •ํ™•ํ•˜๊ฒŒ ๊ทœ์ •ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์˜ˆ์™ธ์ ์ธ ์ƒํ™ฉ์„ ์ค„์ด๊ณ , ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณดํ˜ธํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ชจ๋“  ๊ธˆ์œต ์„œ๋น„์Šค๋ฅผ ์œ„ํ•œ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์—์„œ๋Š” ๋ฐ˜๋“œ์‹œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ACID ์„ฑ์งˆ์„ ์ค€์ˆ˜ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ฐ˜์ ์œผ๋กœ SQL์„ ์ด์šฉํ•œ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

2. ์†Œํ”„ํŠธ์›จ์–ด์— ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๊ตฌ์กฐ์ ์ด๊ณ  ์ผ๊ด€์ ์ผ ๋•Œ

  • ์†Œํ”„ํŠธ์›จ์–ด(ํ”„๋กœ์ ํŠธ)์˜ ๊ทœ๋ชจ๊ฐ€ ๋งŽ์€ ์„œ๋ฒ„๋ฅผ ํ•„์š”๋กœ ํ•˜์ง€ ์•Š๊ณ  ์ผ๊ด€๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ฃผ๋กœ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ์œ ํ˜•๊ณผ ๋†’์€ ํŠธ๋ž˜ํ”ฝ์„ ์ง€์›ํ•˜๋„๋ก ์„ค๊ณ„๋œ NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•ด์•ผ๋งŒ ํ•˜๋Š” ์ด์œ ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๐Ÿ’™ NoSQL ๊ธฐ๋ฐ˜ ๋น„๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ

  1. ๋ฐ์ดํ„ฐ์˜ ๊ตฌ์กฐ๊ฐ€ ๊ฑฐ์˜ ๋˜๋Š” ์ „ํ˜€ ์—†๋Š” ๋Œ€์šฉ๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๋•Œ
    • ๋Œ€๋ถ€๋ถ„์˜ NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ์œ ํ˜•์— ์ œํ•œ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์— ์ •ํ˜•ํ™” ๋˜์ง€ ์•Š์€ ๋งŽ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ NoSQL์„ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ํšจ์œจ์ ์ผ ์ˆ˜ ์žˆ๋‹ค.
  2. ํด๋ผ์šฐ๋“œ ์ปดํ“จํŒ… ๋ฐ ์ €์žฅ๊ณต๊ฐ„์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•  ๋•Œ
    • ํด๋ผ์šฐ๋“œ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ €์žฅ์†Œ๋ฅผ ๊ตฌ์ถ•ํ•˜๋ฉด, ์ €๋ ดํ•œ ๋น„์šฉ์˜ ์†”๋ฃจ์…˜์„ ์ œ๊ณต๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. ์†Œํ”„ํŠธ์›จ์–ด์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ™•์žฅ์„ฑ์ด ์ค‘์š”ํ•˜๋‹ค๋ฉด, ์œ ์—ฐํ•˜๊ฒŒ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋Š” NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
  3. ๋น ๋ฅด๊ฒŒ ์„œ๋น„์Šค๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์ž์ฃผ ์—…๋ฐ์ดํŠธํ•  ๋•Œ
    • NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์Šคํ‚ค๋งˆ๋ฅผ ๋ฏธ๋ฆฌ ์ค€๋น„ํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋น ๋ฅด๊ฒŒ ๊ฐœ๋ฐœํ•˜๋Š” ๊ณผ์ •์—์„œ ๋งค์šฐ ์œ ๋ฆฌํ•˜๋‹ค. (ex. ๋น ๋ฅด๊ฒŒ ํ”„๋กœํ† ํƒ€์ž…์„ ์ถœ์‹œํ•ด์•ผ ํ•  ๋•Œ)
    • ์†Œํ”„ํŠธ์›จ์–ด ๋ฒ„์ „๋ณ„๋กœ ๋งŽ์€ ๋‹ค์šดํƒ€์ž„(๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„๋ฅผ ์˜คํ”„๋ผ์ธ์œผ๋กœ ์ „ํ™˜ํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ์ž‘์—… ์‹œ๊ฐ„)์—†์ด ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์ž์ฃผ ์—…๋ฐ์ดํŠธ ํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ, ์Šคํ‚ค๋งˆ๋ฅผ ๋งค๋ฒˆ ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋Š” ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ณด๋‹ค NoSQL ๊ธฐ๋ฐ˜์˜ ๋น„๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ๋” ์ ํ•ฉํ•˜๋‹ค.

๐Ÿ’™ Which one do we use?

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

Comments