2023. 9. 11. 00:27ใ3. Node.js
SQL
"Structured Query Language" SQL์ 1970๋
๋๋ถํฐ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ ์์คํ
(RDBMS)์์ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐ ๋๋ฆฌ ์ฌ์ฉ๋์ด ์จ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด. ์คํ ๋ฆฌ์ง ๋น์ฉ์ด ๋น์๋ ์ด๊ธฐ์๋ SQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๋ฐ์ดํฐ ์ค๋ณต์ ์ค์ด๋ ๋ฐ ์ค์ ์ ๋์๋ค.
์ค๋๋ ์๋ SQL์ ๋ค์ํ ๋ฐฉ์์ผ๋ก ์ฐ๊ฒฐ๋ ํ๊ณผ ํ
์ด๋ธ์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฟผ๋ฆฌํ๋๋ฐ ์ฌ์ฉ๋๋ค. ํ๋์ ํ
์ด๋ธ ๋ ์ฝ๋๋ ๋ค๋ฅธ ๋ ์ฝ๋ ๋๋ ๋ค๋ฅธ ๋ง์ ๋ ์ฝ๋์ ์ฐ๊ฒฐ๋ ์ ์๊ณ ํ
์ด๋ธ๊ณผ ๋ค๋ฅธ ๋ง์ ๋ ์ฝ๋๋ค ๊ฐ์ ๋ง์ ๊ด๊ณ๋ฅผ ํ์ฑํ ์ ์๋ค. ๋น ๋ฅธ ๋ฐ์ดํฐ ์ ์ฅ ๋ฐ ๋ณต๊ตฌ๋ฅผ ์ ๊ณตํ๋ ์ด๋ฌํ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋๋์ ๋ฐ์ดํฐ์ ๋ณต์กํ SQL ์ฟผ๋ฆฌ๋ก ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
NoSQL
NoSQL ์ ๋น๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค. ์ฆ, SQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ค๋ฅธ ๊ตฌ์กฐ(ํ๊ณผ ์ด์ด ์๋)๋ฅผ ํ์ฉํ๊ณ ๋ฐ์ดํฐ์ ๊ฐ์ฅ ์ ํฉํ ํ์์ ์ฌ์ฉํ ์ ์์ด ์ ์ฐ์ฑ์ด ๋ ๋๋ค. NoSQL์ด๋ผ๋ ์ฉ์ด๋ 2000๋
๋ ์ด๋ฐ๊น์ง ๋ง๋ค์ด์ง์ง ์์๋ค. NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ผ๋ถ SQL ๋ช
๋ น์ ์ง์ํ๊ธฐ ๋๋ฌธ์ ์์คํ
์ด SQL์ ์ฌ์ฉํ์ง ์๋๋ค๋ ์๋ฏธ๋ ์๋๋ค. ๋ณด๋ค ์ ํํ๊ฒ๋ "NoSQL"์ "SQL๋ฟ๋ง ์๋๋ผ"๋ก ์ ์ํ๋ ๊ฒฝ์ฐ๋ ์๋ค.
( ์๋์ ์์์ ํตํด SQL๊ณผ NoSQL์ ์ฐจ์ด๋ฅผ ๋ ์์๋ด๋ ์ข์ ๊ฒ ๊ฐ์ ํจ๊ป ์ฒจ๋ถํ๋ค. )
[ SQL ]
โธ SQL ์๋๋ฐฉ์
SQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ ๋๋ ๋ณ์์ ์คํฐํฐ ์ฌ์ด์ ๊ด๊ณ๊ฐ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ์ ์ฉ.
( * ์ฌ๊ธฐ์ ์คํฐํฐ Entity๋? : https://coding-factory.tistory.com/870 ์ฐธ์กฐ )
โธ ํ์ฅ์ฑ
์ผ๋ฐ์ ์ผ๋ก SQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์์ง์ผ๋ก ํ์ฅํ ์ ์๋ค. ์ฆ, ๋ ๋ง์ CPU, RAM ๋๋ SSD ๊ธฐ๋ฅ ์ ์ถ๊ฐํ๋ ๋ ํฐ ์๋ฒ๋ก ๋ง์ด๊ทธ๋ ์ด์
ํ์ฌ ์๋ฒ์ ๋ก๋๋ฅผ ๋๋ฆด ์ ์๋ค. ์์ง์ ํ์ฅ์ฑ์ด ๊ฐ์ฅ ์์ฃผ ์ฌ์ฉ๋์ง๋ง, SQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ถํ ๋๋ ๋ถํ ๋
ผ๋ฆฌ๋ฅผ ํตํด ์ํ์ ์ผ๋ก ํ์ฅํ ์๋ ์์ง๋ง ์ ๋๋ก ์ง์๋์ง๋ ์๋๋ค.
โธ ๊ตฌ์กฐ
SQL ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง๋ ์ด ๋๋ ์์ฑ๊ณผ ๋ ์ฝ๋ ํ์ด ์๋ ํ
์ด๋ธ์ ์ฌ์ฉํ์ฌ ๊ด๊ณํ, ํ
์ด๋ธ ํ์ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ตฌ์ฑํฉ๋๋ค. SQL์ ์๊ฒฉํ๊ฒ ์ฌ์ ์ ์๋ ์คํค๋ง๋ก ์๋ํ๊ธฐ ๋๋ฌธ์ SQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์์ํ๊ธฐ ์ ์ ๋ฐ์ดํฐ๋ฅผ ๊ตฌ์ฑํ๊ณ ๊ตฌ์กฐํํด์ผ ํ๋ค.
โธ ์์ฑ
SQL์ ์ฌ์ฉํ๋ RDBMS๋ ACID๋ผ๋ ์ฝ์ด๋ก ์๋ ค์ง ๋ค ๊ฐ์ง ์์ฑ์ ๋ํ๋ด์ผ ํฉ๋๋ค. ์ด๋ฅผ ํตํด ํธ๋์ญ์
์ด ์ฑ๊ณต์ ์ผ๋ก ์ฒ๋ฆฌ๋๊ณ SQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์์ ์ฑ์ด ๋์์ง๋ค.
์์์ฑ: ๋ชจ๋ ํธ๋์ญ์
์ ์์ ํ ์ฑ๊ณตํ๊ฑฐ๋ ์คํจํด์ผ ํ๋ฉฐ ์์คํ
์ค๋ฅ๊ฐ ๋ฐ์ํ๋๋ผ๋ ๋ถ๋ถ์ ์ผ๋ก ์๋ฃ๋ ์ํ๋ก ๋ ์ ์๋ค.
์ผ๊ด์ฑ: ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ชจ๋ ๋จ๊ณ์์ ์์์ ๊ฒ์ฆํ๊ณ ๋ฐฉ์งํ๋ ๊ท์น์ ๋ฐ๋ผ์ผ ํ๋ค.
๊ฒฉ๋ฆฌ: ๋์ ํธ๋์ญ์ ์ ์๋ก ์ํฅ์ ๋ฏธ์น ์ ์๋ค.
๋ด๊ตฌ์ฑ: ํธ๋์ญ์
์ ์ต์ข
์ ์ด๋ฉฐ ์์คํ
์ค๋ฅ๋ผ๋ ์ ์ฒด ํธ๋์ญ์
์ "๋กค๋ฐฑ"ํ ์ ์๋ค.
[ NoSQL ]
โธ NoSQL ์๋ ๋ฐฉ์
SQL๊ณผ ๋ฌ๋ฆฌ NoSQL ์์คํ
์ ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ด์์ ๋ค์ํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ก ์์
ํ ์ ์๋ค. ๊ตฌ์กฐํ๋์ง ์์ ๋ฐ์ดํฐ์ ๋ํ ๋์ ์คํค๋ง๋ฅผ ํ์ฉํ๋ฏ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฌ์ ๊ณํํ๊ณ ๊ตฌ์ฑํ ํ์๊ฐ ์ ๊ณ ์์ ์ด ๋ ์ฝ๋ค. NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋ฉด ์๋ก์ด ์์ฑ๊ณผ ํ๋๋ฅผ ์ถ๊ฐํ ์ ์์ ๋ฟ๋ง ์๋๋ผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ์ฒด์์ ๋ค์ํ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ ์ ์๋ค.
โธ ํ์ฅ์ฑ
NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ํ์ ์ผ๋ก ๋ ์ ํ์ฅ๋๋ค. ์ฆ, ๋ก๋๋ฅผ ๋๋ฆฌ๊ธฐ ์ํด ํ์์ ๋ฐ๋ผ ์ถ๊ฐ ์๋ฒ๋ ๋
ธ๋๋ฅผ ์ถ๊ฐํ ์ ์๋ค.
โธ ๊ตฌ์กฐ
NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๊ด๊ณํ์ด ์๋๋ฏ๋ก ๋ฐ์ดํฐ๋ฅผ ํ๊ณผ ํ
์ด๋ธ์๋ง ์ ์ฅํ์ง ์๋๋ค.
๋์ ์ผ๋ฐ์ ์ผ๋ก ๋ค์ ๋ค ๊ฐ์ง ์ ํ์ ๊ตฌ์กฐ ์ค ํ๋์ ์ํ๋ค.
์ด ์ค์ฌ์์๋ ๋ฐ์ดํฐ๊ฐ ํ์ด ์๋ ๊ฑฐ์ ๋ฌด์ ํ์ ์ด๋ก ๊ทธ๋ฃนํ๋ ์
์ ์ ์ฅ๋ฉ๋๋ค.
ํค-๊ฐ ์ ์ฅ์๋ ์ฐ๊ด ๋ฐฐ์ด(์ฌ์ ๋๋ ๋งต์ด๋ผ๊ณ ๋ ํจ)์ ๋ฐ์ดํฐ ๋ชจ๋ธ๋ก ์ฌ์ฉ. (์ด ๋ชจ๋ธ์ ๋ฐ์ดํฐ๋ฅผ ํค-๊ฐ ์์ ์ปฌ๋ ์
์ผ๋ก ๋ํ๋ธ๋ค.)
๋ฌธ์๋ฅผ ์ฌ์ฉํ์ฌ XML, YAML, JSON(JavaScript Object Notation) ๋ฐ BSON์ ํฌํจํ ํ์ค ํ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ดํ๊ณ ์ธ์ฝ๋ฉํ๋ ๋ฌธ์ ์ ์ฅ์. ๋จ์ผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ด์ ๋ฌธ์๊ฐ ๋ค์ํ ๋ฐ์ดํฐ ์ ํ์ ๊ฐ์ง ์ ์๋ค๋ ์ด์ ์ด ์๋ค.
๊ทธ๋ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค - ์๋ก ๋ค๋ฅธ ๋ฐ์ดํฐ ์ธํธ๊ฐ ์๋ก ์ด๋ป๊ฒ ๊ด๋ จ๋์ด ์๋์ง ๋ณด์ฌ์ฃผ๋ ๊ทธ๋ํ์ ๋ฐ์ดํฐ๋ฅผ ๋ํ๋ธ๋ค. Neo4 j, RedisGraph(Redis์ ๋ด์ฅ๋ ๊ทธ๋ํ ๋ชจ๋) ๋ฐ OrientDB๋ ๊ทธ๋ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์.
โธ ์์ฑ
SQL์ ACID ์์ฑ์ ์๊ตฌํ์ง๋ง NoSQL์ CAP ์ด๋ก ์ ๋ฐ๋ฅธ๋ค.
(IBM์ DB2, MongoDB, AWS์ DynamoDB ๋ฐ Apache์ CouchDB์ ๊ฐ์ ์ผ๋ถ NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ACID ๊ท์น์ ํตํฉํ๊ณ ๋ฐ๋ฅผ ์ ์์)
CAP ์ด๋ก ์ ๋ฐ๋ฅด๋ฉด ๋ถ์ฐ ๋ฐ์ดํฐ ์์คํ
์ ๋ค์ ์ธ ๊ฐ์ง ์์ฑ(์ฝ์ด CAP๋ฅผ ํ์ฑํจ) ์ค ๋ ๊ฐ์ง๋ง ๋์์ ๋ณด์ฅํ ์ ์๋ ์ ์ถฉ์์ ํ์ฉํ๋ค.
์ผ๊ด์ฑ: ๋ชจ๋ ์์ฒญ์ ์ต์ ๊ฒฐ๊ณผ๋ ์ค๋ฅ๋ฅผ ์์ ํฉ๋๋ค.
MongoDB๋ ๊ฐ๋ ฅํ ์ผ๊ด์ฑ์ ๊ฐ์ถ ์์คํ
์ ํ ์์ธ ๋ฐ๋ฉด Cassandra์ ๊ฐ์ ๋ค๋ฅธ ์์คํ
์ ์ต์ข
์ผ๊ด์ฑ์ ์ ๊ณตํฉ๋๋ค.
๊ฐ์ฉ์ฑ: ๋ชจ๋ ์์ฒญ์๋ ์ค๋ฅ๊ฐ ์๋ ๊ฒฐ๊ณผ๊ฐ ์์ต๋๋ค.
ํํฐ์
ํ์ฉ ์ค์ฐจ : ๋
ธ๋ ๊ฐ์ ์ง์ฐ์ด๋ ์์ค๋ก ์ธํด ์์คํ
์๋์ด ์ค๋จ๋์ง ์์ต๋๋ค.
๊ด๋ จURL : https://www.ibm.com/blog/sql-vs-nosql/
SQL vs. NoSQL Databases: What's the Difference? - IBM Blog
Explore key differences between SQL and NoSQL databases and learn which type of database is best for various use cases. SQL is a decades-old method for accessing relational databases, and most who work with databases are familiar with it. As unstructured d
www.ibm.com
์ ํ๋ธ ์กฐ์ฝ๋ฉ๋์ ์์์ ๋ณด๊ณ ํ ๋ฒ ๋ ๋ด์ฉ์ ์ ๋ฆฌํด ๋ณด์๋ค.
โธ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋?
์ฌ๋ฌ ์ฌ๋์ด๋ ํ๋ก๊ทธ๋จ์ด ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ๊ณต์ ํ๊ธฐ ์ํด ์ฒด๊ณ์ ์ผ๋ก ๊ด๋ฆฌ๋๋ ๋ฐ์ดํฐ์ ์งํฉ์ '๋ฐ์ดํฐ๋ฒ ์ด์ค'๋ผ๊ณ ํ๋ค.
์ด๋ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ด๋ฆฌํ๋ ์์คํ
์ 'DBMS'๋ผ๊ณ ๋ถ๋ฅด๊ณ ๋ฐ์ดํฐ์ ํน์ฑ์ ๋ฐ๋ผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌ๋๋ ๋ค์ํ ์ข
๋ฅ์ ์กด์ฌํ๋ค.
๊ทธ๊ฒ์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค, ์ฆ 'SQL DB'์ ๋๋จธ์ง์ธ 'NoSQL DB'๋ก ๋๋์ด ๋ถ๋ฅด๊ธฐ๋ก ํ๋ค.
โธ SQL์ด๋ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํธ์์ฉํ ๋ ์ฌ์ฉํ๋ ์ธ์ด( =RDB)๋ก
ํ๊ณผ ์ด์ ํํ๋ก ์ ์ฅ( ์์
๊ณผ ์ ์ฌํ๋ค๊ณ ๋ณผ ์ ์์) ๋๋ค.
๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ์ ํ์ด๋ค.
์คํค๋ง(Shema)๋ผ๋ ํ์ ๋ง์ถ์ด์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋์ด ์ฒด๊ณ์ ์ด๊ณ ์์ ์ ์ด๋ค.
๋ํ์ ์ผ๋ก MySQL, PostgreSQL, SQLite, ORCLEDB์ด ์๋ค.
โธ ๋ฐ๋์ธ NoSQL์,
์คํค๋ง(Shema)๊ฐ ์ ํด์ง์ง ์์ ์ ์ฐ์ฑ ํ์ฅ์ฑ ์ฑ๋ฅ ์ธก๋ฉด์์ ํจ๊ณผ์ ์ด๋ค.
๋ค์ํ ์ข
๋ฅ๊ฐ ์๋ค.
๋ํ์ ์ผ๋ก ( key-value, Document, Graph, mongoDB, AmzonDocmentDB )
key-value๋ฅผ ์๋ก ๋ค๋ฉด, python ๋์
๋๋ฆฌ์ ํํ๋ฅผ ๊ฐ์ง๋ค. ์ฆ ๋จ์ํ ํํ๋ก ์๋๊ฐ ๋น ๋ฅด๋ค๋ ์ฅ์ ์ด ์๋ค.
Graph๋ node์ ์์ฑ๋ณ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฐฉ์์ผ๋ก SNS ๋ฐ ์ถ์ฒ์์ง์ ์ํ DB์ ์ฃผ๋ก ์ฌ์ฉ๋๋ค.
ํ์ฉ๋์ ๋ง๊ฒ ์ฌ์ฉ์ ํ๋ฉด ๋๋ค๋ ์ฅ์ ์ด ์๋ค.
