!
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 선택:
- ✅ 빠른 읽기/쓰기
- ✅ 스키마 자주 변경
- ✅ 대규모 확장 필요