RDB와 NoSQL의 차이에 대해 설명해 주세요.

데이터를 저장하고 관리하는 방식의 차이로, RDB는 정형화된 스키마 기반의 관계형 구조, NoSQL은 유연한 스키마의 비관계형 구조입니다.

핵심 비교

항목RDBNoSQL
스키마고정 (사전 정의 필수)유연 (동적 변경 가능)
데이터 모델테이블 (행/열)문서, 키-값, 그래프 등
JOINO 지원X 대부분 미지원
트랜잭션O ACID 보장대부분 최종 일관성
확장 방식수직 확장 (Scale-Up)수평 확장 (Scale-Out)
대표 제품MySQL, PostgreSQL, OracleMongoDB, Redis, Cassandra

RDB - ACID

Atomicity   : 트랜잭션은 전부 성공 or 전부 실패
Consistency : 트랜잭션 전후 데이터 무결성 보장
Isolation   : 트랜잭션 간 독립적 실행
Durability  : 커밋된 데이터는 영구 보존

NoSQL 종류

종류대표 제품적합한 사용 사례
문서형MongoDB계층적 데이터, 다양한 스키마
키-값형Redis캐시, 세션 관리
컬럼형Cassandra시계열 데이터, 대용량 쓰기
그래프형Neo4jSNS 친구 관계, 추천 시스템

확장 방식 차이

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(로그/비정형 데이터)

CSLOG에서 보기