SQL vs NoSQL
ย ๊ฐ์
โข
SQL์ Structured Query Language์ ์ฝ์๋ก, ๊ทธ ์์ฒด๊ฐ DB๊ฐ ์๋๋ค.
โข
SQL์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ ์์คํ
(RDBMS : Relational Database Management System)์ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด ์ค๊ณ๋ ํน์ ๋ชฉ์ ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ด๋ค.
โข
์์ ๋ถํฐ DB๋ SQL๋ก ๋ง๋ค์ด์ก๊ธฐ ๋๋ฌธ์, SQL์ด ๊ด๊ณํ DB๋ผ๋ ์๋ฏธ๋ก ์ฌ์ฉ๋๋ ๊ฒ์ด๋ผ ์ถ์ธก๋๋ค.
โข
SQL DB, NoSQL DB ๋ผ๊ณ ํํํด์ผ ์ ํํ์ง๋ง, ์๋ ์ ๋ฆฌ๋๋ ๋ด์ฉ์๋ SQL, NoSQL ๋ก ์ธ๊ธํ๋ค.
ย SQL (๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค)
โข
SQL์ ๊ตฌ์กฐํ๋ ์ฟผ๋ฆฌ ์ธ์ด (Structured Query Language) ์ ์ฝ์์ด๋ค.
โข
SQL์ ์ฌ์ฉํ๋ฉด ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ ์์คํ
(RDBMS)์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ, ์์ , ์ญ์ ๋ฐ ๊ฒ์ํ ์ ์๋ค.
โข
์ด๋ฌํ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ ์ ํด์ง ๋ฐ์ดํฐ ์คํค๋ง๋ฅผ ๋ฐ๋ผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ
์ด๋ธ์ ์ ์ฅ๋๋ฉฐ,
โข
๊ด๊ณ๋ฅผ ํตํด ์ฌ๋ฌ ๊ฐ์ ํ
์ด๋ธ์ ๋ฐ์ดํฐ๊ฐ ๋ถ์ฐ๋๋ ํน์ง์ด ์๋ค.
ย ์๊ฒฉํ ์คํค๋ง
โข
๋ฐ์ดํฐ๋ ํ
์ด๋ธ(table)์ Rows๋ก ์ ์ฅ๋๋ฉฐ, ๊ฐ ํ
์ด๋ธ์๋ ๋ช
ํํ๊ฒ ์ ์๋ ๊ตฌ์กฐ(structure)๊ฐ ์๋ค.
โข
๊ตฌ์กฐ(structure)๋ ์ปฌ๋ผ์ ์ด๋ฆ๊ณผ ๋ฐ์ดํฐ ์ ํ์ผ๋ก ์ ์๋๋ค.
โข
๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์คํค๋ง๋ฅผ ์ค์ํ์ง ์๋ row๋ ์ถ๊ฐํ ์ ์๋ค.
ย ๊ด๊ณ
โข
SQL ๊ธฐ๋ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋๋ค๋ฅธ ์ค์ํ ๋ถ๋ถ์ด๋ค.
โข
๋ฐ์ดํฐ๋ค์ ์ฌ๋ฌ๊ฐ์ ํ
์ด๋ธ์ ๋๋ ์ ๋ฐ์ดํฐ๋ค์ ์ค๋ณต์ ํผํ ์ ์๋ค.
โข
ํ
์ด๋ธ์ ๋๋ ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ฉด, ํ
์ด๋ธ์์ ์ค๋ณต ์์ด ํ๋์ ๋ฐ์ดํฐ๋ง์ ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์,
โข
๋ค๋ฅธ ํ
์ด๋ธ์์ ๋ถ์ ํํ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ์ํ์ด ์๋ค๋ ํน์ง์ด ์๋ค.
ย NoSQL (๋น๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค)
๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํ๊ณ์ ์ ๋
ธ์ถํ๊ฒ ๋์์ผ๋ฉฐ, ์ด๋ก์ธํด ์๋ก์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ธ NoSQL์ด ํ์ํ๊ฒ ๋์๋ค.
NoSQL์ ๊ธฐ๋ณธ์ ์ผ๋ก SQL(๊ด๊ณํ)๊ณผ ๋ฐ๋๋๋ ์ ๊ทผ ๋ฐฉ์์ ๋ฐ๋ฅด๊ธฐ ๋๋ฌธ์ ์ง์ด์ง ์ด๋ฆ์ด๋ค.
ย NoSQL์ ์ข ๋ฅ
โข
NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ข
๋ฅ๋ ํค-๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค, Document ๋ฐ์ดํฐ๋ฒ ์ด์ค, ๊ทธ๋ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฑ์ผ๋ก ๋๋๋ค.
โข
ํค-๊ฐ ๋ฐ์ดํธ๋ฒ ์ด์ค ๋ ํค์ ๊ฐ์ผ๋ก ๊ตฌ์ฑ๋ ๋ฐฐ์ด ๊ตฌ์กฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค ๊ฐ์ฅ ๋จ์ํ ๊ตฌ์กฐ๋ค.
โข
Document ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ ํ๋์ ๊ฐ์ ํํ๋ก ๊ตฌ์ฑ๋ ๋ฐ์ดํฐ๋ฅผ JSON ํฌ๋งท์ผ๋ก ๊ด๋ฆฌํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค ๊ฐ์ฅ ์ธ๊ธฐ๊ฐ ๋๋ค.
โข
๊ทธ๋ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ ๋
ธ๋์ ๊ด๊ณ๋ก ๊ตฌ์ฑ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก, ๊ทผ์ ํ ๊ฐ์ฒด๋ฅผ ๋ชจ๋ธ๋งํ ๋ชฉ์ ์ผ๋ก ์ค๊ณ๋์๋ค.
ย NoSQL์ ํน์ง
โข
์ ์ฐ์ฑ : ์คํค๋ง ์ ์ธ ์์ด ํ๋์ ์ถ๊ฐ ๋ฐ ์ญ์ ๊ฐ ์์ ๋ก์ด Schema-less ๊ตฌ์กฐ๋ค.
โข
ํ์ฅ์ฑ : ์ค์ผ์ผ ์์์ ์ํ ์๋ฒ ํ์ฅ์ด ์ฉ์ดํ๋ค.
โข
๊ณ ์ฑ๋ฅ : ๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ์ฑ๋ฅ์ด ๋ฐ์ด๋๋ค.
โข
๊ฐ์ฉ์ฑ : ์ฌ๋ฌ ๋์ ๋ฐฑ์
์๋ฒ ๊ตฌ์ฑ์ด ๊ฐ๋ฅํ์ฌ, ์ฅ์ ๋ฐ์ ์์๋ ๋ฌด์ค๋จ ์๋น์ค๊ฐ ๊ฐ๋ฅํ๋ค.
ย Scaling ์์ง์ , ์ํ์ ํ์ฅ
์์ง์ ํ์ฅ : ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ์ ์ฑ๋ฅ์ ํ์ฅ(CPU ์
๊ทธ๋ ์ด๋ ๋ฑ)
์ํ์ ํ์ฅ : ๋ ๋ง์ ์๋ฒ๊ฐ ์ถ๊ฐ๋๊ณ , ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ถ์ฐ
โข
๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ ๋ฐฉ์ ๋๋ฌธ์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ ์ผ๋ฐ์ ์ผ๋ก ์์ง์ ํ์ฅ ๋ง์ ์ง์ํ๋ค.
โข
์ํ์ ํ์ฅ ์ NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์๋ง ๊ฐ๋ฅํ๋ค.
โข
๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์๋ ๊ฐ์ ํ
์ด๋ธ ์คํค๋ง๋ฅผ ๊ฐ์ง ๋ฐ์ดํฐ๋ฅผ ๋ค์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ถ์ฐํ์ฌ ์ ์ฅ ํ๋ ๋ฐฉ์์ธ โ์ค๋ฉ (Sharding)โ ์ ํ์ฉํด์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํด์ ํ์ฉํ ์ ์์ง๋ง,
โข
๊ตฌํํ๊ธฐ๊ฐ ๋์ฒด๋ก ์ด๋ ค์ด ๋ฐ๋ฉด์, NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ด๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํ๋ฏ๋ก, ์ฌ๋ฌ ์๋ฒ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฝ๊ฒ ๋ถ๋ฆฌํ ์ ์๋ค.
ย ์ด๋ค ๊ฒ์ ์จ์ผ ํ ๊น?
์ด๋ค ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํด์ผ ํ ๊น? โ ํ์คํ ์ ๋ต์ ์๋ค.
SQL๊ณผ NoSQL์ ๋ชจ๋ ํ๋ฅญํ ์๋ฃจ์
์ด๊ณ , ๋ ๊ฐ์ง ์ค ํ๋์ ์๋ฃจ์
์ ์ ํํด์ผ ๋๋ ๋ฌธ์ ์์๋ ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋์ง, ์ด๋ค ์ ํ๋ฆฌ์ผ์ด์
์์ ์ฌ์ฉ๋๋์ง ๊ณ ๋ คํด์ผ ํ๋ค.
ย SQL์ ์ฅ์
โข
๋ช
ํํ๊ฒ ์ ์๋ ์คํค๋ง, ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ๋ณด์ฅ
โข
๊ด๊ณ๋ ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ค๋ณต์์ด ํ๋ฒ๋ง ์ ์ฅ๋๋ค.
ย NoSQL์ ์ฅ์
โข
์คํค๋ง๊ฐ ์๊ธฐ ๋๋ฌธ์, ํจ์ฌ ์ ์ฐํ๋ค. ์ธ์ ๋ ์ง ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์กฐ์ ํ๊ณ ์๋ก์ด โํ๋โ๋ฅผ ์ถ๊ฐํ ์ ์๋ค.
โข
๋ฐ์ดํฐ๋ ์ ํ๋ฆฌ์ผ์ด์
์ด ํ์๋ก ํ๋ ํ์์ผ๋ก ์ ์ฅ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ค๋ ์๋๊ฐ ๋นจ๋ผ์ง๋ค.
โข
์์ง ๋ฐ ์ํ ํ์ฅ์ด ๊ฐ๋ฅํ๋ฏ๋ก, ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ ํ๋ฆฌ์ผ์ด์
์์ ๋ฐ์์ํค๋ ๋ชจ๋ ์ฝ๊ธฐ/์ฐ๊ธฐ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๋ค.
ย SQL์ ๋จ์
โข
์๋์ ์ผ๋ก ๋ ์ ์ฐํ๋ค. ๋ฐ์ดํฐ ์คํค๋ง๋ ์ฌ์ ์ ๊ณํ๋๊ณ ์๋ ค์ ธ์ผ ํ๋ค (๋์ค์ ์์ ํ๊ธฐ๊ฐ ๋ฒ๊ฑฐ๋กญ๊ฑฐ๋ ๋ถ๊ฐ๋ฅํ ์ ์๋ค)
โข
๊ด๊ณ๋ฅผ ๋งบ๊ณ ์๊ธฐ ๋๋ฌธ์, JOIN ๋ฌธ์ด ๋ง์ ๋งค์ฐ ๋ณต์กํ ์ฟผ๋ฆฌ๊ฐ ๋ง๋ค์ด์ง ์ ์๋ค.
โข
์ํ์ ํ์ฅ์ด ์ด๋ ต๊ณ , ๋์ฒด๋ก ์์ง์ ํ์ฅ๋ง ๊ฐ๋ฅํ๋ค. ํน์ ์์ ์์ (์ฒ๋ฆฌํ ์ ์๋ ์ฒ๋ฆฌ๋๊ณผ ๊ด๋ จํ์ฌ) ์ฑ์ฅ ํ๊ณ์ ์ง๋ฉดํ๊ฒ ๋๋ค.
ย NoSQL์ ๋จ์
โข
์ ์ฐ์ฑ ๋๋ฌธ์, ๋ฐ์ดํฐ ๊ตฌ์กฐ ๊ฒฐ์ ์ ํ์ง ๋ชปํ๊ณ ๋ฏธ๋ฃจ๊ฒ ๋ ์ ์๋ค.
โข
๋ฐ์ดํฐ ์ค๋ณต์ ์ฌ๋ฌ ์ปฌ๋ ์
๊ณผ ๋ฌธ์๊ฐ(SQL ์ธ๊ณ์์์ฒ๋ผ ํ๋์ ํ
์ด๋ธ์ ํ๋์ ๋ ์ฝ๋๊ฐ ์๋๋ผ) ์ฌ๋ฌ ๊ฐ์ ๋ ์ฝ๋๊ฐ ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ, ์
๋ฐ์ดํธ๋ฅผ ํด์ผํ๋ค.
โข
๋ฐ์ดํฐ๊ฐ ์ฌ๋ฌ ์ปฌ๋ ์
์ ์ค๋ณต๋์ด ์๊ธฐ ๋๋ฌธ์, ์์ (update)๋ฅผ ํด์ผํ๋ ๊ฒฝ์ฐ, ๋ชจ๋ ์ปฌ๋ ์
์์ ์ํํด์ผ ํ๋ค (SQL ์ธ๊ณ์์๋ ์ค๋ณต๋ ๋ฐ์ดํฐ๊ฐ ์๊ธฐ ๋๋ฌธ์ ํ๋ฒ๋ง ์ํํ๋ฉด ๋๋ค)
ย SQL์ ์ฌ์ฉํ๊ธฐ ์ข์ ๊ฒฝ์ฐ
โข
๊ด๊ณ๋ฅผ ๋งบ๊ณ ์๋ ๋ฐ์ดํฐ๊ฐ ์์ฃผ ๋ณ๊ฒฝ(์์ )๋๋ ์ ํ๋ฆฌ์ผ์ด์
์ผ ๊ฒฝ์ฐ
โข
๋ณ๊ฒฝ๋ ์ฌ์ง๊ฐ ์๊ณ , ๋ช
ํํ ์คํค๋ง๊ฐ ์ฌ์ฉ์์ ๋ฐ์ดํฐ์๊ฒ ์ค์ํ ๊ฒฝ์ฐ
ย NoSQL์ ์ฌ์ฉํ๊ธฐ ์ข์ ๊ฒฝ์ฐ
โข
์ ํํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ ์ ์๊ฑฐ๋ ๋ณ๊ฒฝ, ํ์ฅ ๋ ์ ์๋ ๊ฒฝ์ฐ
โข
์ฝ๊ธฐ(read) ์ฒ๋ฆฌ๋ฅผ ์์ฃผํ์ง๋ง, ๋ฐ์ดํฐ๋ฅผ ์์ฃผ ๋ณ๊ฒฝ(update)ํ์ง ์๋ ๊ฒฝ์ฐ(ํ ๋ฒ์ ๋ณ๊ฒฝ์ผ๋ก ์ฌ๋ฌ ๋ฌธ์๋ฅผ ์
๋ฐ์ดํธ ํ ํ์๊ฐ ์๋ ๊ฒฝ์ฐ)
โข
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ํ์ผ๋ก ํ์ฅํด์ผ ํ๋ ๊ฒฝ์ฐ(๋ง๋ํ ์์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ค์ผ ํ๋ ๊ฒฝ์ฐ)