MongoDB๋?
- -
๐ MongoDB๋?
MongoDB๋ NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค ํ๋๋ก, JSON๊ณผ ์ ์ฌํ BSON(Binary JSON) ๋ฌธ์ ํ์์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฌธ์ ์งํฅ(Document-Oriented) ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋๋ค.
๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค(RDBMS)์ ๋ฌ๋ฆฌ ์คํค๋ง๊ฐ ๊ณ ์ ๋์ด ์์ง ์์ผ๋ฉฐ, ๋ฐ์ดํฐ๋ฅผ ์ปฌ๋ ์ (Collection)๊ณผ ๋ฌธ์(Document) ๋จ์๋ก ๊ด๋ฆฌํ๋ ๊ฒ์ด ํน์ง์ ๋๋ค.
๐น MongoDB์ ํต์ฌ ๊ฐ๋
1. ๋ฌธ์(Document)
MongoDB์ ๊ธฐ๋ณธ ์ ์ฅ ๋จ์๋ก, ํค-๊ฐ ์์ ๊ฐ์ง๋ JSON๊ณผ ์ ์ฌํ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋๋ค.
{
"_id": ObjectId("603d2f1d8b3c4a2f1c3a9e0c"),
"name": "ํ๊ธธ๋",
"age": 30,
"address": {
"city": "์์ธ",
"zipcode": "12345"
}
}
- _id: ๋ฌธ์์ ๊ณ ์ ์๋ณ์(๊ธฐ๋ณธ์ ์ผ๋ก ์๋ ์์ฑ๋จ)
- name, age, address: Key-Value ํ์์ผ๋ก ์ ์ฅ๋จ
- address์ฒ๋ผ **์ค์ฒฉ ๋ฌธ์(Nested Document)**๋ ์ง์
2. ์ปฌ๋ ์ (Collection)
์ปฌ๋ ์ ์ RDBMS์ ํ ์ด๋ธ(Table)๊ณผ ์ ์ฌํ ๊ฐ๋ ์ ๋๋ค.
- ์ฌ๋ฌ ๊ฐ์ ๋ฌธ์๋ฅผ ํฌํจํ๋ ์ปจํ ์ด๋ ์ญํ
- ๊ฐ์ ์ปฌ๋ ์ ๋ด์ ๋ฌธ์๋ ์๋ก ๋ค๋ฅธ ๊ตฌ์กฐ(์คํค๋ง)๋ฅผ ๊ฐ์ง ์ ์์
- ์: users ์ปฌ๋ ์ ์ ๋ค์ํ ํํ์ ์ฌ์ฉ์ ๋ฐ์ดํฐ ์ ์ฅ ๊ฐ๋ฅ
3. ๋ฐ์ดํฐ๋ฒ ์ด์ค(Database)
MongoDB๋ ํ๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ฌ๋ฌ ๊ฐ์ ์ปฌ๋ ์ ์ ํฌํจํ ์ ์์ต๋๋ค.
use myDatabase # ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ํ ๋๋ ์์ฑ
- use ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ ํํ๋ฉด ์๋ ์์ฑ๋จ
4. BSON(Binary JSON)
MongoDB๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋ BSON(Binary JSON) ํ์์ผ๋ก ๋ณํํ์ฌ ์ ์ฅํฉ๋๋ค.
- JSON๋ณด๋ค ๋น ๋ฅธ ์ฝ๊ธฐ/์ฐ๊ธฐ ์ฑ๋ฅ์ ์ ๊ณต
- ๋ค์ํ ๋ฐ์ดํฐ ํ์ ์ง์ (int, double, string, date, array, objectId ๋ฑ)
๐น MongoDB์ ์ฃผ์ ํน์ง
โ 1. ์คํค๋ง๋ฆฌ์ค(Schema-less) ๊ตฌ์กฐ
- RDBMS์ ๋ฌ๋ฆฌ ํ ์ด๋ธ ์คํค๋ง๋ฅผ ๋ฏธ๋ฆฌ ์ ์ํ ํ์ ์์
- ๊ฐ ๋ฌธ์๊ฐ ์๋ก ๋ค๋ฅธ ํ๋๋ฅผ ๊ฐ์ง ์ ์์ด ์ ์ฐํ ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง ๊ฐ๋ฅ
โ 2. ํ์ฅ์ฑ(Scalability) – ์ํ ํ์ฅ(Sharding) ์ง์
- Sharding(์ค๋ฉ): ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ๊ฐ์ ์๋ฒ์ ๋ถ์ฐํ์ฌ ์ ์ฅํ๋ ๊ธฐ์
- ๋๊ท๋ชจ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ๋ ์ฑ๋ฅ ์ ํ ์์ด ํ์ฅ ๊ฐ๋ฅ
โ 3. ๊ณ ์ฑ๋ฅ(High Performance)
- ๋ฐ์ดํฐ๊ฐ BSON(Binary JSON) ํ์์ผ๋ก ์ ์ฅ๋์ด ๋น ๋ฅธ ์กฐํ ๊ฐ๋ฅ
- ์ธ๋ฑ์ค(Index) ์ต์ ํ๋ฅผ ํตํด ๊ฒ์ ์ฑ๋ฅ ํฅ์
โ 4. ์๋ ๋ณต์ (Replication) ๋ฐ ๊ณ ๊ฐ์ฉ์ฑ(High Availability)
- **Replica Set(๋ ํ๋ฆฌ์นด ์ )**์ ํตํด ์๋์ผ๋ก ๋ฐ์ดํฐ ๋ณต์
- ํ ์๋ฒ๊ฐ ๋ค์ด๋๋๋ผ๋ ๋ค๋ฅธ ๋ณต์ ๋ณธ์ด ์๋ํ์ฌ ๋ฐ์ดํฐ ์์ค ๋ฐฉ์ง
โ 5. ๊ฐ๋ ฅํ ์ฟผ๋ฆฌ ๊ธฐ๋ฅ
- SQL๊ณผ ๋น์ทํ ๊ฐ๋ ฅํ ์ฟผ๋ฆฌ ์ธ์ด ์ ๊ณต
- ๋ค์ํ ํํฐ๋ง, ์ ๋ ฌ, ์ง๊ณ(Aggregation) ์ฐ์ฐ ์ง์
๐น MongoDB ๊ธฐ๋ณธ ๋ช ๋ น์ด
โถ๏ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ
show dbs # ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ชฉ๋ก ์กฐํ
use myDB # myDB ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ฉ ๋๋ ์์ฑ
db.dropDatabase() # ํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ญ์
โถ๏ธ ์ปฌ๋ ์ ๊ด๋ฆฌ
show collections # ์ปฌ๋ ์
๋ชฉ๋ก ์กฐํ
db.createCollection("users") # ์ปฌ๋ ์
์์ฑ
db.users.drop() # ์ปฌ๋ ์
์ญ์
โถ๏ธ ๋ฌธ์ ์ฝ์ (Insert)
db.users.insertOne({ "name": "ํ๊ธธ๋", "age": 30 }) # ๋จ์ผ ๋ฌธ์ ์ฝ์
db.users.insertMany([
{ "name": "๊น์ฒ ์", "age": 25 },
{ "name": "์ด์ํฌ", "age": 28 }
]) # ์ฌ๋ฌ ๋ฌธ์ ์ฝ์
โถ๏ธ ๋ฌธ์ ์กฐํ(Find)
db.users.find() # ๋ชจ๋ ๋ฌธ์ ์กฐํ
db.users.find({ "age": 30 }) # ํน์ ์กฐ๊ฑด ์กฐํ
db.users.find().sort({ "age": 1 }) # ๋์ด ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
โถ๏ธ ๋ฌธ์ ์์ (Update)
db.users.updateOne({ "name": "ํ๊ธธ๋" }, { $set: { "age": 31 } }) # ๋จ์ผ ๋ฌธ์ ์์
db.users.updateMany({}, { $set: { "active": true } }) # ๋ชจ๋ ๋ฌธ์์ ํ๋ ์ถ๊ฐ
โถ๏ธ ๋ฌธ์ ์ญ์ (Delete)
db.users.deleteOne({ "name": "ํ๊ธธ๋" }) # ํน์ ๋ฌธ์ ์ญ์
db.users.deleteMany({ "age": { $lt: 30 } }) # ๋์ด๊ฐ 30 ๋ฏธ๋ง์ธ ๋ชจ๋ ๋ฌธ์ ์ญ์
๐น MongoDB์ RDBMS ๋น๊ต
ํญ๋ชฉ | MongoDB(NoSQL) | RDBMS(MySQL, PostgreSQL ๋ฑ) |
๋ฐ์ดํฐ ๋ชจ๋ธ | ๋ฌธ์(Document) ์งํฅ | ํ ์ด๋ธ(Table) ๊ธฐ๋ฐ |
์คํค๋ง(Schema) | ์คํค๋ง ์์ (์ ์ฐํจ) | ์คํค๋ง ๊ณ ์ (์ ํํ) |
ํ์ฅ ๋ฐฉ์ | ์ํ ํ์ฅ(Sharding) | ์์ง ํ์ฅ(Scaling Up) |
์ฟผ๋ฆฌ ์ธ์ด | MongoDB Query Language (MQL) | SQL |
ํธ๋์ญ์ ์ง์ | ๊ธฐ๋ณธ์ ์ผ๋ก ์ฝํจ (ํ์ง๋ง ์ต์ ๋ฒ์ ์์ ์ง์) | ๊ฐ๋ ฅํ ํธ๋์ญ์ ์ง์ |
์ธ๋ฑ์ค | ์ง์ (B-Tree ๊ธฐ๋ฐ) | ์ง์ (B-Tree, Hash ๋ฑ) |
โ
MongoDB๋ ๋น์ ํ ๋ฐ์ดํฐ๋ ๋๋์ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํด์ผ ํ๋ ๊ฒฝ์ฐ ์ ์ฉํฉ๋๋ค.
โ
RDBMS๋ ๊ฐ๋ ฅํ ํธ๋์ญ์
๋ฐ ๋ฐ์ดํฐ ์ ํฉ์ฑ์ด ์ค์ํ ๊ฒฝ์ฐ ์ ํฉํฉ๋๋ค.
๐น MongoDB๊ฐ ์ ํฉํ ๊ฒฝ์ฐ
โ
๋น
๋ฐ์ดํฐ ์ฒ๋ฆฌ
โ
IoT, ๋ก๊ทธ ๋ฐ์ดํฐ ์ ์ฅ
โ
JSON ๊ธฐ๋ฐ ๋ฐ์ดํฐ ์ ์ฅ์ด ํ์ํ ๊ฒฝ์ฐ
โ
๋น ๋ฅธ ์ฝ๊ธฐ/์ฐ๊ธฐ ์ฑ๋ฅ์ด ํ์ํ ๊ฒฝ์ฐ
๐น MongoDB ์ฌ์ฉ ์์
๐ 1. ๋ก๊ทธ ๋ฐ์ดํฐ ์ ์ฅ
์๋ฒ ๋ก๊ทธ, ์ ํ๋ฆฌ์ผ์ด์ ๋ก๊ทธ ๋ฑ์ ๋๋ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ์ ์ฅํ๊ณ ๊ฒ์ํ ์ ์์
๐ 2. ์ค์๊ฐ ๋ถ์ ์์คํ
MongoDB์ Aggregation Framework๋ฅผ ์ฌ์ฉํ๋ฉด ์ค์๊ฐ ๋ฐ์ดํฐ ๋ถ์ ๊ฐ๋ฅ
๐ 3. IoT ๋ฐ ์ผ์ ๋ฐ์ดํฐ
๋ค์ํ ์ผ์ ๋ฐ์ดํฐ(๋น์ ํ ๋ฐ์ดํฐ)๋ฅผ ์ ์ฐํ๊ฒ ์ ์ฅ
๐ 4. ์์ ๋ฏธ๋์ด ๋ฐ ์ฌ์ฉ์ ํ๋กํ ๊ด๋ฆฌ
์คํค๋ง๊ฐ ์ ๋์ ์ด๊ธฐ ๋๋ฌธ์ ์์ ๋คํธ์ํฌ ๊ฐ์ ์๋น์ค์ ์ ํฉ
๐น ๊ฒฐ๋ก
MongoDB๋ ์ ์ฐํ ๋ฐ์ดํฐ ๊ตฌ์กฐ, ๋ฐ์ด๋ ํ์ฅ์ฑ, ๋น ๋ฅธ ์ฑ๋ฅ์ ์ ๊ณตํ๋ NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์
๋๋ค.
ํนํ, ๋น์ ํ ๋ฐ์ดํฐ์ ๋๋์ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํด์ผ ํ๋ ๊ฒฝ์ฐ์ ์ ํฉํฉ๋๋ค.
ํ์ง๋ง ํธ๋์ญ์
์ด ์ค์ํ ๊ธ์ต ์์คํ
๋ฑ์์๋ RDBMS๊ฐ ๋ ์ ์ ํ ์ ์์ต๋๋ค.
์ํฉ์ ๋ง๊ฒ RDBMS์ NoSQL์ ์ ํํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
'With AI' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Dart๋? (0) | 2025.03.03 |
---|---|
RESTful์ด๋? (1) | 2025.02.28 |
์น ์๋ฒ Apache์ Nginx (0) | 2025.02.26 |
MySQL๊ณผ MariaDB์ ๊ด๊ณ (0) | 2025.02.25 |
Maven์ด๋? (0) | 2025.02.24 |
์์คํ ๊ณต๊ฐ ๊ฐ์ฌํฉ๋๋ค.