RDB와 NoSQL의 차이에 대해 설명해 주세요.
데이터를 저장하고 관리하는 방식의 차이로, RDB는 정형화된 스키마 기반의 관계형 구조, NoSQL은 유연한 스키마의 비관계형 구조입니다.
핵심 비교
| 항목 | RDB | NoSQL |
| 스키마 | 고정 (사전 정의 필수) | 유연 (동적 변경 가능) |
| 데이터 모델 | 테이블 (행/열) | 문서, 키-값, 그래프 등 |
| JOIN | O 지원 | X 대부분 미지원 |
| 트랜잭션 | O ACID 보장 | 대부분 최종 일관성 |
| 확장 방식 | 수직 확장 (Scale-Up) | 수평 확장 (Scale-Out) |
| 대표 제품 | MySQL, PostgreSQL, Oracle | MongoDB, Redis, Cassandra |
RDB - ACID
Atomicity : 트랜잭션은 전부 성공 or 전부 실패
Consistency : 트랜잭션 전후 데이터 무결성 보장
Isolation : 트랜잭션 간 독립적 실행
Durability : 커밋된 데이터는 영구 보존
NoSQL 종류
| 종류 | 대표 제품 | 적합한 사용 사례 |
| 문서형 | MongoDB | 계층적 데이터, 다양한 스키마 |
| 키-값형 | Redis | 캐시, 세션 관리 |
| 컬럼형 | Cassandra | 시계열 데이터, 대용량 쓰기 |
| 그래프형 | Neo4j | SNS 친구 관계, 추천 시스템 |
확장 방식 차이
RDB - 수직 확장 (Scale-Up)
┌────────────┐ ┌──────────────────┐
│ 서버 (4GB) │ → │ 서버 (16GB) │
└────────────┘ └──────────────────┘
더 좋은 하드웨어로 교체 (비용 급증, 한계 존재)
NoSQL - 수평 확장 (Scale-Out)
┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐
│ 서버 1 │ → │ 서버 1 │ │ 서버 2 │ │ 서버 3 │
└────────┘ └────────┘ └────────┘ └────────┘
서버를 추가해서 부하 분산 (유연한 확장)
데이터 구조 비교
-- RDB: 정규화된 테이블 구조
user 테이블 orders 테이블
| id | name | | id | user_id | product |
|----|------| |----|---------|---------|
| 1 | kim | | 1 | 1 | 상품A |
| 2 | 1 | 상품B |
// NoSQL (MongoDB): 한 문서에 모든 정보 포함
{
"_id": 1,
"name": "kim",
"orders": [
{ "id": 1, "product": "상품A" },
{ "id": 2, "product": "상품B" }
]
}
언제 무엇을 선택할까?
| 상황 | 선택 |
| 데이터 간 관계가 복잡하고 정합성이 중요 | O RDB |
| 금융, 결제 등 트랜잭션이 핵심 | O RDB |
| 스키마가 자주 바뀌거나 비정형 데이터 | O NoSQL |
| 대용량 트래픽, 빠른 수평 확장 필요 | O NoSQL |
| 캐시, 세션 등 빠른 읽기/쓰기 | O NoSQL (Redis) |
실무에서는 RDB + NoSQL을 함께 사용하는 경우가 많습니다. 예) MySQL(메인 데이터) + Redis(캐시) + MongoDB(로그/비정형 데이터)