MongoDB
SQL vs NoSQL

SQL
SQL(Structured Query Language)์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ ์์คํ (RDBMS)์ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด ์ค๊ณ๋ ํน์ ๋ชฉ์ ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ด๋ค. ๋ง์ ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ จ ํ๋ก๊ทธ๋จ๋ค์ด SQL์ ํ์ค์ผ๋ก ์ฑํํ๊ณ ์๋ค. - ์ํคํผ๋์ -
๋์ค์ ์ผ๋ก ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ Oracle, MySQL ๋ฑ์ด ์ด ๋ฒ์ฃผ์ ํฌํจ๋๋ค.
NoSQL
NoSQL(์๋ ์๋ฏธ: non SQL ๋๋ non relational) ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ ํต์ ์ธ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ณด๋ค ๋ ์ ํ์ ์ธ ์ผ๊ด์ฑ ๋ชจ๋ธ์ ์ด์ฉํ๋ ๋ฐ์ดํฐ์ ์ ์ฅ ๋ฐ ๊ฒ์์ ์ํ ๋งค์ปค๋์ฆ์ ์ ๊ณตํ๋ค. NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋น ๋ฐ์ดํฐ์ ์ค์๊ฐ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ ์ ์ด์ฉ์ ๋๋ฆฌ ์ฐ์ธ๋ค. SQL ๊ณ์ด ์ฟผ๋ฆฌ ์ธ์ด๋ฅผ ์ฌ์ฉํ ์ ์๋ค๋ ์ฌ์ค์ ๊ฐ์กฐํ๋ค๋ ๋ฉด์์ "Not only SQL"๋ก ๋ถ๋ฆฌ๊ธฐ๋ ํ๋ค.
NoSQL ๋ถ๋ฅ๋ ๋ค์๊ณผ ๊ฐ๋ค.
Wide Columnar Store : ์นด์ฐ๋๋ผ
Document Store : MongoDB
Key-Value Store : ๋ค์ด๋๋ชจ, ๋ ๋์ค
Graph Store: Neo4j
๊ทธ ์ค์์ ์ ๋ช ํ๊ฑด ์นด์ฐ๋๋ผ, MongoDB, AWS์ DynamoDB, Redis ์ ๋?
SQL๊ณผ NoSQL ๋น๊ต

๐ ์ถ์ฒ : https://ko.wikipedia.org/wiki/NoSQL
์ฑ๋ฅ๋ฉด๊ณผ ํ์ฅ์ฑ ๋ฉด์์๋ NoSQL์ด SQL๋ณด๋ค ์ฐ์ํ๋ค. ๋ํ ์ ์ฐํ๋ฉฐ ๋ณต์ก์ฑ์ด ๋ฎ์๊ฒ์ด ํน์ง์ด๋ค. ํ์ง๋ง ๋ง๋ฅ ์ข์์ ๋ง ์๋๊ฑด ์๋๋ค. ACID ํธ๋์ญ์ (์์์ฑ/์ผ๊ด์ฑ/๊ณ ๋ฆฝ์ฑ/์๊ตฌ์ฑ)์ ๋ณด์ฅ๋ฐ๊ธฐ ์ํด์๋ RDBMS๋ฅผ ์ฐ๋ ํธ์ด ์ข๋ค. ๊ฐ๋ น ์ํ์ ๋ฌด๋ ํ์ฌ์ ๋ฌด๊ฐ์ ์ค์ํ DB๋ RDBMS๋ฅผ ์ฐ๋ ๊ฒ์ ๊ถ์ฅํ๋ค.
โ ๊ฒฐ๋ก ์ ์ผ๋ก SQL, NoSQL ๋ญ๊ฐ ์ข๊ณ ๋์๋๊ฐ ์๋๋ผ ์ฌ์ฉํ๋ ์ฉ๋์ ๋ฐ๋ผ ์ ํํ๋ฉด ๋๋ค.
\
MongoDB ์์๋ณด๊ธฐ
MongoDB๋ C++๋ก ์์ฑ๋ ์คํ์์ค ๋ฌธ์์งํฅ(Document-Oriented) ํฌ๋ก์ค ํ๋ซํผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ด๋ค.
1. Document
Document๋ RDBMS์์์ Row(ํน์ ํํ)๊ณผ ๋์ผํ ๊ฐ๋ . ์๋ฅผ ๋ค์ด ์๋์ ๊ฐ์ JSON ํํ์ key-value ์์ผ๋ก ์ด๋ฃจ์ด์ง ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ํ๋์ Document๋ผ๊ณ ๋ณด๋ฉด ๋๋ค.
{
"_id": "5f2ad6b54866e5109dd2367b"
"username": "ํ๊ธธ๋",
"hashedPassword": "๋น๋ฐ๋ฒํธ",
}
๊ฐ Document๋ _id๋ฅผ ๊ฐ๊ณ ์๋๋ฐ ์ด ๊ฐ์ ์ ์ผํ๋ค. Primary Key๋ ๋์ผํ ๊ฐ๋ .
ํน์ดํ๊ฒ๋ RDBMS์ฒ๋ผ ์คํค๋ง๋ก ์ ํด์ง ๋ญ๊ฐ๊ฐ ์๋ค. ๋ฐ๋ผ์ username, hashedPassword ๋ฐ์๋ค๊ฐ email์ ์ถ๊ฐํ Document๋ฅผ ์๋ก ์์ฑํด๋ ๋ฌธ์ ์์ด ๋์ํ๋ค.
2. Collection
Collection์ Document์ ๊ทธ๋ฃน์ด๋ค. RDBMS๋ก ๋ฐ์ง์๋ฉด Table๊ณผ ๋น์ทํ ๊ฐ๋ . ๋ค๋ง ์์์ ๋งํ๋ฏ์ด ์คํค๋ง๋ฅผ ๊ฐ์ง๊ณ ์์ง ์๋ค.
3. Database
Database๋ Collection๋ค์ ๋ฌผ๋ฆฌ์ ์ธ ์ปจํ ์ด๋์ด์ ๊ฐ์ฅ ์์ ๊ฐ๋ ์ด๋ค. RDBMS์์์ Database์ ๋์ผํ๋ค.
Q. MongoDB์์ Join์?
RDBMS์์๋ ํญ์ Join์ด ์ผ์์ ์ผ๋ก ๋ง์ด ์ฌ์ฉํ๋ค. ๊ทธ๋ ๋ค๋ฉด MongoDB๋ ์กฐ์ธ์ด๋ ๊ฐ๋ ์ด ์์๊น? ๋ถ๊ฐ๋ฅํ์ง๋ ์์ง๋ง ์ผ๋ฐ์ ์ผ๋ก๋ ๊ทธ๋ ๊ฒ ์ฐ์ด์ง ์๋๋ค.
post์ comment๊ฐ ์๋ค๊ณ ๊ฐ์ ํด๋ณผ๊น? postํ๋์๋ comment๊ฐ ์ฌ๋ฌ๊ฐ๊ฐ ์์ผ๋๊น 1๋๋ค ๊ด๊ณ์ด๋ค. ๋ฐ๋ผ์ RDBMS๋ฅผ ์ผ๋ค๋ฉด 2๊ฐ์ ํ ์ด๋ธ๋ก ๋ถ๋ฆฌ์์ผฐ์๊ฑฐ๋ค. ํ์ง๋ง MongoDB๋ ๋ถ๋ฆฌ์ํค์ง ์๋ ๋์ ์ post ๋ด๋ถ์ comment๋ฅผ ๋ฃ๋๋ค. ์ด๋ฅผ ์๋ธ๋คํ๋จผํธ๋ผ๊ณ ํ๋ค.
๋ฐ๋ผ์ ์๋์ ๊ฐ์ ํํ๊ฐ ๋์ค๊ฒ ๋ฉ๋๋ค.
{
_id: POST_ID,
title: POST_TITLE,
content: POST_CONTENT,
username: POST_WRITER,
tags: [ TAG1, TAG2, TAG3 ],
comments: [
{
username: COMMENT_WRITER,
mesage: COMMENT_MESSAGE,
time: COMMENT_TIME
},
]
}
์ถ์ฒ : https://velopert.com/436
\
์ฐธ๊ณ
poiemaweb ์ฌ์ดํธ : https://poiemaweb.com/mongdb-basics
velopert๋ ๋ธ๋ก๊ทธ : https://velopert.com/436
SQL vs NoSQL : https://velog.io/@thms200/SQL-vs-NoSQL
Last updated