| 비교 항목 | SQL | NoSQL |
|---|---|---|
| 데이터 모델 | 정형(Structured) 테이블 기반, 행(row)과 열(column) 구성 | 비정형/반정형(Unstructured/Semi-structured) JSON, 문서, 그래프, Key-Value 등 다양한 구조 |
| 스키마(Schema) | 고정(Fixed Schema) 사전에 정의 필요 ⇒ 스키마 변경 어려움 | 유연(Flexible Schema) 필드 추가/삭제 자유 ⇒ 스키마 변경이 유연함 |
| 데이터 관계 | 외래키(FK)로 관계 정의 (정규화 중심) | 데이터 중복 허용, 관계는 애플리케이션 단에서 처리 |
| 확장성(Scalability) | 수직 확장(Vertical Scaling) 서버 성능 업그레이드 | 수평 확장(Horizontal Scaling) 노드 추가로 확장 |
| 트랜잭션 | ACID (Atomicity, Consistency, Isolation, Durability) | BASE (Basically Available, Soft state, Eventually consistent) |
| 쿼리 언어 | 표준 SQL 문법 | 데이터베이스별 고유 쿼리 언어 (MongoDB의 find, Redis의 get/set 등) |
| 성능 특성 | 일관성(Consistency) 중시 | 가용성(Availability) 및 확장성 중심 |
| 항목 | SQL | NoSQL |
|---|---|---|
| 트랜잭션 모델 | ACID (정합성 우선) | BASE (가용성, 확장성 우선) |
| Consistency (일관성) | 즉시 보장 | 최종 일관성(Eventual Consistency) |
| 사용 예시 | 금융, 회계, ERP 시스템 | 로그, 세션, 캐시, SNS 데이터 등 |
트랜잭션이란 DB에서 한 번에 수행되어야 하는 논리적 작업 단위임.
여러 쿼리를 하나의 작업처럼 묶어서 성공 / 실패를 함께 처리함.
| 원칙 | 설명 | 예시 |
|---|---|---|
| Atomicity (원자성) | 모든 연산이 하나의 단위로 실행되어야 함 — 일부만 성공 불가 | 결제 실패 시 주문도 취소됨 |
| Consistency (일관성) | 트랜잭션 전후 데이터 무결성이 유지되어야 함 | 재고 수량이 음수가 되면 안 됨 |
| Isolation (격리성) | 동시에 실행되는 트랜잭션 간의 간섭 방지 | 두 사용자가 동시에 같은 주문 수정 불가 |
| Durability (지속성) | 커밋된 데이터는 영구 저장 | 시스템 다운 후에도 데이터 유지 |
| 원칙 | 설명 |
|---|---|
| Basically Available | 시스템은 언제나 응답을 반환해야 함 (완벽하지 않아도 됨) |
| Soft state | 데이터는 일시적으로 불안정할 수 있음 |
| Eventually consistent | 시간이 지나면 데이터는 최종적으로 일관된 상태에 수렴 |