IT Knowledge/Database/images/sql-vs-nosql-venn.svg
SQL vs NoSQL
๐ ํต์ฌ ์ฐจ์ด
| ํญ๋ชฉ | SQL | NoSQL |
|---|---|---|
| ์คํค๋ง | ๊ณ ์ | ์ ์ฐ |
| ํ์ฅ | ์์ง (Scale-up) | ์ํ (Scale-out) |
| ํธ๋์ญ์ | ACID ๋ณด์ฅ | ๊ฒฐ๊ตญ ์ผ๊ด์ฑ |
| ์กฐ์ธ | ์ง์ | ์ ํ์ |
| ์ฌ์ฉ ์ฌ๋ก | ๊ธ์ต, ERP | SNS, IoT, ๋น ๋ฐ์ดํฐ |
๐ฏ ์ค์ ์ฌ๋ก
์ฌ๋ก 1: ์ ์์๊ฑฐ๋ - SQL ์ ํ
์ด์ : ์ฌ๊ณ , ์ฃผ๋ฌธ, ๊ฒฐ์ ๋ ์ ํ์ฑ ํ์
-- ์ฃผ๋ฌธ ์ฒ๋ฆฌ (ํธ๋์ญ์
)
BEGIN TRANSACTION;
-- 1. ์ฌ๊ณ ํ์ธ ๋ฐ ์ฐจ๊ฐ
UPDATE products
SET stock = stock - 1
WHERE id = 123 AND stock > 0;
-- 2. ์ฃผ๋ฌธ ์์ฑ
INSERT INTO orders (user_id, product_id, amount)
VALUES (456, 123, 29000);
-- 3. ๊ฒฐ์ ์ฒ๋ฆฌ
INSERT INTO payments (order_id, amount, status)
VALUES (LAST_INSERT_ID(), 29000, 'COMPLETED');
COMMIT; -- ๋ชจ๋ ์ฑ๊ณตํ๊ฑฐ๋ ๋ชจ๋ ์คํจ์ฌ๋ก 2: ์์ ๋ฏธ๋์ด - NoSQL ์ ํ
์ด์ : ์คํค๋ง ์ ์ฐ์ฑ, ๋๊ท๋ชจ ํธ๋ํฝ
// MongoDB: ๊ฒ์๋ฌผ ์ ์ฅ
db.posts.insertOne({
userId: ObjectId('...'),
content: '์ฌํ ์ฌ์ง',
images: ['img1.jpg', 'img2.jpg'], // ๋ฐฐ์ด ์์ ๋กญ๊ฒ
tags: ['์ฌํ', '์ ์ฃผ๋'],
likes: [],
comments: [
{ userId: ObjectId('...'), text: '์ข์์!', createdAt: ISODate() }
],
createdAt: ISODate()
});
// ์ข์์ ์ถ๊ฐ (๊ฐ๋จ)
db.posts.updateOne(
{ _id: ObjectId('...') },
{ $push: { likes: userId } }
);๐ก ์ ํ ๊ฐ์ด๋
SQL ์ ํ:
- โ ๋ณต์กํ ๊ด๊ณ (์ฌ์ฉ์-์ฃผ๋ฌธ-์ํ)
- โ ๋ฐ์ดํฐ ์ ํฉ์ฑ ์ค์
- โ ๋ณต์กํ ์ฟผ๋ฆฌ ํ์
NoSQL ์ ํ:
- โ ๋น ๋ฅธ ์ฝ๊ธฐ/์ฐ๊ธฐ
- โ ์คํค๋ง ์์ฃผ ๋ณ๊ฒฝ
- โ ๋๊ท๋ชจ ํ์ฅ ํ์