DEV Community

Gunwoo
Gunwoo

Posted on

๐Ÿค” SQL vs NoSQL?

๐Ÿ“ ๊ถ๊ธˆํ•œ ๋ชจ๋“  ๊ฒƒ์„ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.
๐Ÿ˜Ž ๊ธฐ๋ก์—์„œ ๋ฉˆ์ถ”์ง€ ์•Š๊ณ  ๋‚˜์˜ ๊ฒƒ์œผ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
๐Ÿ™ˆ ์ž˜๋ชป๋œ ์ •๋ณด๊ฐ€ ์žˆ๋‹ค๋ฉด ์–ธ์ œ๋“ ์ง€ ๋Œ“๊ธ€์— ๋‚จ๊ฒจ์ฃผ์„ธ์š” :D

๐Ÿค” SQL?

SQL์€ Structured Query Language์˜ ์•ฝ์ž๋ฉฐ ๊ตฌ์กฐํ™”๋œ ์ฟผ๋ฆฌ ์–ธ์–ด์ด๋‹ค. SQL์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์–ธ์–ด์˜ ๊ธฐ์ค€์œผ๋กœ ์ฃผ๋กœ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์‚ฌ์šฉ๋œ๋‹ค. ๋Œ€ํ‘œ์ ์ธ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ๋Š” MySQL, Oracle, SQLite, PostgreSQL, MariaDB ๋“ฑ์ด ์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ฟผ๋ฆฌ๋ž€ ์ €์žฅ๋˜์–ด ์žˆ๋Š” ์ •๋ณด๋ฅผ ํ•„ํ„ฐํ•˜๊ธฐ ์œ„ํ•œ ์งˆ๋ฌธ์œผ๋กœ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋งŒ์„ ๊ฐ€์ ธ์˜ค๊ฒŒ ๋„์™€์ค€๋‹ค. SQL์€ ๊ตฌ์กฐํ™”๋œ ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•˜๋Š” DB(๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค)์—์„œ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ด€๊ณ„ํ˜• DB์—์„œ๋Š” ํ…Œ์ด๋ธ”์„ ์‚ฌ์ „์— ์ •์˜ํ•œ ๋’ค์— ๊ทธ์— ์•Œ๋งž๋Š” ๋ฐ์ดํ„ฐ๋งŒ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ์ฒ˜์Œ ์Šคํ‚ค๋งˆ ์„ค๊ณ„์‹œ ํ•„์š”ํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ ๋˜์—ˆ๋˜ ๋ฐ์ดํ„ฐ๋ณด๋‹ค ๋” ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๊ฒŒ ๋˜์—ˆ๋‹ค๊ณ  ์‰ฝ๊ฒŒ ์Šคํ‚ค๋งˆ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค. ์ด๋ฅผ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด์„  ORM์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. (Sequelize, TypeORM, ๋“ฑ)
๊ด€๊ณ„ํ˜• DB๋Š” ์Šคํ‚ค๋งˆ ์„ค๊ณ„์‹œ one-to-one, one-to-many, many-to-many๋ฅผ ๋ช…ํ™•์ด ๊ทœ์ •์„ํ•˜๊ณ  ์Šคํ‚ค๋งˆ๋ฅผ ์งœ์•ผํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•จ์œผ๋กœ ์ค‘๋ณต๋˜๊ฑฐ๋‚˜ ์ž˜๋ชป ์ž…๋ ฅ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์‰ฝ๊ฒŒ DB์— ์‚ฝ์ผ๋  ์ˆ˜ ์—†๋‹ค๋Š” ์žฅ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

๐Ÿง Where to use SQL?

  • ์ดˆ๊ธฐ ์Šคํ‚ค๋งˆ ๊ตฌ์„ฑ์„ ํ†ตํ•ด์„œ ๋Œ€๋ถ€๋ถ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์„ ๋•Œ
  • ์Šคํ‚ค๋งˆ ๊ตฌ์กฐ๋Š” ๋น„๊ต์  ๊ฐ„๋‹จํ•˜์ง€๋งŒ Update๊ฐ€ ๋งŽ์„ ๋•Œ
  • Scale up์„ ํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ ์„ ๋•Œ (์„œ๋ฒ„์˜ ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋˜์–ด์•ผ ๋จ)

๐Ÿค” NoSQL?

SQL์ด ๊ตฌ์กฐํ™” ์ฟผ๋ฆฌ ์–ธ์–ด๋ผ๋ฉด, NoSQL์€ ๋น„๊ตฌ์กฐํ™” ์ฟผ๋ฆฌ ์–ธ์–ด์ด๋‹ค. SQL์ด ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ํ…Œ์ด๋ธ”๋กœ ๊ตฌ์กฐํ™”๋˜์–ด ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค๋ฉด, NoSQL์€ ๋น„๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ณ ์ •๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค. JOIN(no Relations)์˜ ๊ฐœ๋…์ด ์‚ฌ๋ผ์ง€๊ณ , JOIN์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์กฐํšŒ๊ฐ€ SQL๋ณด๋‹ค ๋น„๊ต์  ๋น ๋ฅด๋‹ค. NoSQL ๊ธฐ๋ฐ˜์˜ ๋น„๊ด€๊ณ„ํ˜• DB๋Š” ๋‹ค์–‘ํ•œ ํƒ€์ž…์œผ๋กœ ๊ตฌ์„ฑ๋  ์ˆ˜ ์žˆ๋‹ค.

  • Key-Value ํƒ€์ž…: ์—ฌ๊ธฐ์„œ key๋Š” ์†์„ฑ ์ด๋ฆ„์„ ๋œปํ•˜๊ณ , value๋Š” ์†์„ฑ์— ์—ฐ๊ฒฐ๋œ ๋ฐ์ดํ„ฐ ๊ฐ’์„ ๋œปํ•œ๋‹ค.
  • ๋ฌธ์„œํ˜•(Document) ํƒ€์ž…: ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌธ์„œ์ฒ˜๋Ÿผ ์ €์žฅํ•œ๋‹ค. ๋ณดํ†ต JSON ์œ ์‚ฌ ํ˜•์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌธ์„œํ™”ํ•œ๋‹ค. ๊ฐ๊ฐ์˜ ๋ฌธ์„œ๋Š” ํ•˜๋‚˜์˜ ์†์„ฑ์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , ์ปฌ๋ ‰์…˜์ด๋ผ ํ•˜๋Š” ๊ทธ๋ฃน์œผ๋กœ ๋ฌถ์–ด์„œ ๊ด€๋ฆฌํ•œ๋‹ค. ๋Œ€ํ‘œ์ ์ธ ๋ฌธ์„œํ˜• DB๋กœ๋Š” MongoDB๊ฐ€ ์žˆ๋‹ค.
  • Wide-Column ํƒ€์ž…: DB์˜ ์—ด์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ๋ฅผ ์ค‘์ ์œผ๋กœ ์‚ผ๊ณ , ๊ฐ ์—ด์—๋Š” key-value ํ˜•์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜๊ณ , ์ปฌ๋Ÿผ ํŽ˜๋ฐ€๋ฆฌ๋ผ ํ•˜๋Š” ์—ด์˜ ์ง‘ํ•ฉ์ฒด ๋‹จ์œ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค. ๋Œ€ํ‘œ์ ์ธ Wide-Column DB๋กœ Cassandra, HBase๊ฐ€ ์žˆ๋‹ค.
  • ๊ทธ๋ž˜ํ”„ ํƒ€์ž…: ์ž๋ฃŒ๊ตฌ์กฐ ๊ทธ๋ž˜ํ”„์™€ ๋น„์Šทํ•œ ํ˜•์‹์ด๋‹ค. ๋Œ€ํ‘œ์ ์ธ ํ•ด๋‹น DB๋กœ InfiniteGraph, Neo4J๊ฐ€ ์žˆ๋‹ค.

๐Ÿง Where to use NoSQL?

  • ์ดํ›„์— ์–ด๋–ค ๋ฐ์ดํ„ฐ๊ฐ€ ์ถ”๊ฐ€๋  ์ง€ ์˜ˆ์ƒํ•  ์ˆ˜ ์—†์„ ๋•Œ
  • Read / Write๊ฐ€ Update๊ฐ€ ๋ณด๋‹ค ํ˜„์ €ํžˆ ๋งŽ์„ ๋•Œ
  • Scale up์„ ํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์„ ๋•Œ (์„œ๋ฒ„์˜ ์ˆ˜๋Ÿ‰๋งŒ ๋” ์ถ”๊ฐ€ํ•˜๋ฉด OK)

๐Ÿ‘€ References

Top comments (0)