# SQL๊ณผ NOSQL์˜ ์ฐจ์ด



์›น ์•ฑ์„ ๊ฐœ๋ฐœํ•  ๋•Œ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์„ ํƒํ•  ๋•Œ ๊ณ ๋ฏผํ•˜๊ฒŒ ๋œ๋‹ค.


MySQL๊ณผ ๊ฐ™์€ SQL์„ ์‚ฌ์šฉํ• ๊นŒ? ์•„๋‹ˆ๋ฉด MongoDB์™€ ๊ฐ™์€ NoSQL์„ ์‚ฌ์šฉํ• ๊นŒ?

๋ณดํ†ต Spring์—์„œ ๊ฐœ๋ฐœํ•  ๋•Œ๋Š” MySQL์„, Node.js์—์„œ๋Š” MongoDB๋ฅผ ์ฃผ๋กœ ์‚ฌ์šฉํ–ˆ์„ ๊ฒƒ์ด๋‹ค.

ํ•˜์ง€๋งŒ ๊ทธ๋ƒฅ ๋‹จ์ˆœํžˆ ํ”„๋ ˆ์ž„์›Œํฌ์— ๋”ฐ๋ผ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๊ธฐ์— ์•ž์„œ ์ ํ•ฉํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ํƒํ•ด์•ผ ํ•œ๋‹ค. ์ฐจ์ด์ ์„ ์•Œ์•„๋ณด์ž


# SQL (๊ด€๊ณ„ํ˜• DB)


SQL์„ ์‚ฌ์šฉํ•˜๋ฉด RDBMS์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ, ์ˆ˜์ •, ์‚ญ์ œ ๋ฐ ๊ฒ€์ƒ‰ ํ•  ์ˆ˜ ์žˆ์Œ

๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—๋Š” ํ•ต์‹ฌ์ ์ธ ๋‘ ๊ฐ€์ง€ ํŠน์ง•์ด ์žˆ๋‹ค.

  • ๋ฐ์ดํ„ฐ๋Š” ์ •ํ•ด์ง„ ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ์— ๋”ฐ๋ผ ํ…Œ์ด๋ธ”์— ์ €์žฅ๋œ๋‹ค.
  • ๋ฐ์ดํ„ฐ๋Š” ๊ด€๊ณ„๋ฅผ ํ†ตํ•ด ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์— ๋ถ„์‚ฐ๋œ๋‹ค.

๋ฐ์ดํ„ฐ๋Š” ํ…Œ์ด๋ธ”์— ๋ ˆ์ฝ”๋“œ๋กœ ์ €์žฅ๋˜๋Š”๋ฐ, ๊ฐ ํ…Œ์ด๋ธ”๋งˆ๋‹ค ๋ช…ํ™•ํ•˜๊ฒŒ ์ •์˜๋œ ๊ตฌ์กฐ๊ฐ€ ์žˆ๋‹ค. ํ•ด๋‹น ๊ตฌ์กฐ๋Š” ํ•„๋“œ์˜ ์ด๋ฆ„๊ณผ ๋ฐ์ดํ„ฐ ์œ ํ˜•์œผ๋กœ ์ •์˜๋œ๋‹ค.

๋”ฐ๋ผ์„œ ์Šคํ‚ค๋งˆ๋ฅผ ์ค€์ˆ˜ํ•˜์ง€ ์•Š์€ ๋ ˆ์ฝ”๋“œ๋Š” ํ…Œ์ด๋ธ”์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์—†๋‹ค. ์ฆ‰, ์Šคํ‚ค๋งˆ๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๋Š” ์ด์ƒ์€ ์ •ํ•ด์ง„ ๊ตฌ์กฐ์— ๋งž๋Š” ๋ ˆ์ฝ”๋“œ๋งŒ ์ถ”๊ฐ€๊ฐ€ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ด ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํŠน์ง• ์ค‘ ํ•˜๋‚˜๋‹ค.


๋˜ํ•œ, ๋ฐ์ดํ„ฐ์˜ ์ค‘๋ณต์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด '๊ด€๊ณ„'๋ฅผ ์ด์šฉํ•œ๋‹ค.

ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”์—์„œ ์ค‘๋ณต ์—†์ด ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋งŒ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์—์„œ ๋ถ€์ •ํ™•ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ์œ„ํ—˜์ด ์—†์–ด์ง€๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.



# NoSQL (๋น„๊ด€๊ณ„ํ˜• DB)


๋ง๊ทธ๋Œ€๋กœ ๊ด€๊ณ„ํ˜• DB์˜ ๋ฐ˜๋Œ€๋‹ค.

์Šคํ‚ค๋งˆ๋„ ์—†๊ณ , ๊ด€๊ณ„๋„ ์—†๋‹ค!


NoSQL์—์„œ๋Š” ๋ ˆ์ฝ”๋“œ๋ฅผ ๋ฌธ์„œ(documents)๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

์—ฌ๊ธฐ์„œ SQL๊ณผ ํ•ต์‹ฌ์ ์ธ ์ฐจ์ด๊ฐ€ ์žˆ๋Š”๋ฐ, SQL์€ ์ •ํ•ด์ง„ ์Šคํ‚ค๋งˆ๋ฅผ ๋”ฐ๋ฅด์ง€ ์•Š์œผ๋ฉด ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ NoSQL์—์„œ๋Š” ๋‹ค๋ฅธ ๊ตฌ์กฐ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ™์€ ์ปฌ๋ ‰์…˜์— ์ถ”๊ฐ€๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.


๋ฌธ์„œ(documents)๋Š” Json๊ณผ ๋น„์Šทํ•œ ํ˜•ํƒœ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ฒ˜๋Ÿผ ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์— ๋‚˜๋ˆ„์–ด๋‹ด์ง€ ์•Š๊ณ , ๊ด€๋ จ ๋ฐ์ดํ„ฐ๋ฅผ ๋™์ผํ•œ '์ปฌ๋ ‰์…˜'์— ๋„ฃ๋Š”๋‹ค.

๋”ฐ๋ผ์„œ ์œ„ ์‚ฌ์ง„์— SQL์—์„œ ์ง„ํ–‰ํ•œ Orders, Users, Products ํ…Œ์ด๋ธ”๋กœ ๋‚˜๋ˆˆ ๊ฒƒ์„ NoSQL์—์„œ๋Š” Orders์— ํ•œ๊บผ๋ฒˆ์— ํฌํ•จํ•ด์„œ ์ €์žฅํ•˜๊ฒŒ ๋œ๋‹ค.

๋”ฐ๋ผ์„œ ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์— ์กฐ์ธํ•  ํ•„์š”์—†์ด ์ด๋ฏธ ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ์„ ๊ฐ–์ถ˜ ๋ฌธ์„œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด NoSQL์ด๋‹ค. (NoSQL์—๋Š” ์กฐ์ธ์ด๋ผ๋Š” ๊ฐœ๋…์ด ์กด์žฌํ•˜์ง€ ์•Š์Œ)


๊ทธ๋Ÿฌ๋ฉด ์กฐ์ธํ•˜๊ณ  ์‹ถ์„ ๋•Œ NoSQL์€ ์–ด๋–ป๊ฒŒ ํ• ๊นŒ?

์ปฌ๋ ‰์…˜์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์ œํ•˜์—ฌ ๊ฐ ์ปฌ๋ ‰์…˜ ์ผ๋ถ€๋ถ„์— ์†ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ์‚ฐ์ถœํ•˜๋„๋ก ํ•œ๋‹ค.

ํ•˜์ง€๋งŒ ์ด๋Ÿฌ๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ์ค‘๋ณต๋˜์–ด ์„œ๋กœ ์˜ํ–ฅ์„ ์ค„ ์œ„ํ—˜์ด ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์กฐ์ธ์„ ์ž˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ž์ฃผ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ์ผ ๋•Œ NoSQL์„ ์“ฐ๋ฉด ์ƒ๋‹นํžˆ ํšจ์œจ์ ์ด๋‹ค.



# ํ™•์žฅ ๊ฐœ๋…

๋‘ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋น„๊ตํ•  ๋•Œ ์ค‘์š”ํ•œ Scaling ๊ฐœ๋…๋„ ์กด์žฌํ•œ๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„์˜ ํ™•์žฅ์„ฑ์€ '์ˆ˜์ง์ ' ํ™•์žฅ๊ณผ '์ˆ˜ํ‰์ ' ํ™•์žฅ์œผ๋กœ ๋‚˜๋ˆ„์–ด์ง„๋‹ค.

  • ์ˆ˜์ง์  ํ™•์žฅ : ๋‹จ์ˆœํžˆ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๊ฒƒ (ex. CPU ์—…๊ทธ๋ ˆ์ด๋“œ)
  • ์ˆ˜ํ‰์  ํ™•์žฅ : ๋” ๋งŽ์€ ์„œ๋ฒ„๊ฐ€ ์ถ”๊ฐ€๋˜๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์ „์ฒด์ ์œผ๋กœ ๋ถ„์‚ฐ๋จ์„ ์˜๋ฏธ (ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ž‘๋™ํ•˜์ง€๋งŒ ์—ฌ๋Ÿฌ ํ˜ธ์ŠคํŠธ์—์„œ ์ž‘๋™)

๋ฐ์ดํ„ฐ ์ €์žฅ ๋ฐฉ์‹์œผ๋กœ ์ธํ•ด SQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์ˆ˜์ง์  ํ™•์žฅ๋งŒ ์ง€์›ํ•จ

์ˆ˜ํ‰์  ํ™•์žฅ์€ NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ๋งŒ ๊ฐ€๋Šฅ



# ๊ทธ๋Ÿผ ๋‘˜ ์ค‘์— ๋ญ˜ ์„ ํƒ?

์ •๋‹ต์€ ์—†๋‹ค. ๋‘˜๋‹ค ํ›Œ๋ฅญํ•œ ์†”๋ฃจ์…˜์ด๊ณ  ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š๋ƒ์— ๋”ฐ๋ผ ์„ ํƒ์„ ๊ณ ๋ คํ•ด์•ผํ•œ๋‹ค.


# SQL ์žฅ์ 

  • ๋ช…ํ™•ํ•˜๊ฒŒ ์ •์˜๋œ ์Šคํ‚ค๋งˆ, ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ๋ณด์žฅ
  • ๊ด€๊ณ„๋Š” ๊ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ค‘๋ณต์—†์ด ํ•œ๋ฒˆ๋งŒ ์ €์žฅ

# SQL ๋‹จ์ 

  • ๋œ ์œ ์—ฐํ•จ. ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ๋ฅผ ์‚ฌ์ „์— ๊ณ„ํšํ•˜๊ณ  ์•Œ๋ ค์•ผ ํ•จ. (๋‚˜์ค‘์— ์ˆ˜์ •ํ•˜๊ธฐ ํž˜๋“ฌ)
  • ๊ด€๊ณ„๋ฅผ ๋งบ๊ณ  ์žˆ์–ด์„œ ์กฐ์ธ๋ฌธ์ด ๋งŽ์€ ๋ณต์žกํ•œ ์ฟผ๋ฆฌ๊ฐ€ ๋งŒ๋“ค์–ด์งˆ ์ˆ˜ ์žˆ์Œ
  • ๋Œ€์ฒด๋กœ ์ˆ˜์ง์  ํ™•์žฅ๋งŒ ๊ฐ€๋Šฅํ•จ

# NoSQL ์žฅ์ 

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

# NoSQL ๋‹จ์ 

  • ์œ ์—ฐ์„ฑ์œผ๋กœ ์ธํ•ด ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ๊ฒฐ์ •์„ ๋ฏธ๋ฃจ๊ฒŒ ๋  ์ˆ˜ ์žˆ์Œ
  • ๋ฐ์ดํ„ฐ ์ค‘๋ณต์„ ๊ณ„์† ์—…๋ฐ์ดํŠธ ํ•ด์•ผ ํ•จ
  • ๋ฐ์ดํ„ฐ๊ฐ€ ์—ฌ๋Ÿฌ ์ปฌ๋ ‰์…˜์— ์ค‘๋ณต๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ˆ˜์ • ์‹œ ๋ชจ๋“  ์ปฌ๋ ‰์…˜์—์„œ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•จ (SQL์—์„œ๋Š” ์ค‘๋ณต ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์œผ๋ฏ€๋กœ ํ•œ๋ฒˆ๋งŒ ์ˆ˜ํ–‰์ด ๊ฐ€๋Šฅ)


# SQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์šฉ์ด ๋” ์ข‹์„ ๋•Œ

  • ๊ด€๊ณ„๋ฅผ ๋งบ๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ž์ฃผ ๋ณ€๊ฒฝ๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฒฝ์šฐ

    NoSQL์—์„œ๋Š” ์—ฌ๋Ÿฌ ์ปฌ๋ ‰์…˜์„ ๋ชจ๋‘ ์ˆ˜์ •ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋น„ํšจ์œจ์ 

  • ๋ณ€๊ฒฝ๋  ์—ฌ์ง€๊ฐ€ ์—†๊ณ , ๋ช…ํ™•ํ•œ ์Šคํ‚ค๋งˆ๊ฐ€ ์‚ฌ์šฉ์ž์™€ ๋ฐ์ดํ„ฐ์—๊ฒŒ ์ค‘์š”ํ•œ ๊ฒฝ์šฐ


# NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์šฉ์ด ๋” ์ข‹์„ ๋•Œ

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


ํ•˜๋‚˜์˜ ์ œ์‹œ ๋ฐฉ๋ฒ•์ด์ง€ ์™„์ „ํ•œ ์ •๋‹ต์ด ์ •ํ•ด์ ธ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.

SQL์„ ์„ ํƒํ•ด์„œ ๋ณต์žกํ•œ JOIN๋ฌธ์„ ๋งŒ๋“ค์ง€ ์•Š๋„๋ก ์„ค๊ณ„ํ•˜์—ฌ ๋‹จ์ ์„ ์—†์•จ ์ˆ˜๋„ ์žˆ๊ณ 

NoSQL์„ ์„ ํƒํ•ด์„œ ์ค‘๋ณต ๋ฐ์ดํ„ฐ๋ฅผ ์ค„์ด๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์„ค๊ณ„ํ•ด์„œ ๋‹จ์ ์„ ์—†์•จ ์ˆ˜๋„ ์žˆ๋‹ค.

์ตœ์ข… ์ˆ˜์ • : 10/3/2022, 1:23:47 PM