🔍 관계형 데이터베이스(RDB) vs 비관계형 데이터베이스(NoSQL)
관계형 데이터베이스(RDB, Relational Database)와 비관계형 데이터베이스(NoSQL, Not Only SQL)는 데이터 저장 및 관리 방식에서 차이가 있습니다.
어떤 데이터베이스를 선택할지는 데이터 구조, 확장성, 성능 요구 사항에 따라 결정됩니다.
✅ 1. 관계형 데이터베이스(RDB: Relational Database)
📌 개념:
- 데이터를 테이블(표, Table) 형태로 저장하며, 행(Row)과 열(Column) 로 구성됨.
- SQL(Structured Query Language) 를 사용하여 데이터를 조작.
- 정규화(Normalization) 를 통해 데이터 중복을 최소화하고 무결성을 유지.
📌 특징:
✔ 스키마(테이블 구조) 고정 → 사전에 명확한 데이터 모델이 필요
✔ 데이터 무결성(Integrity) 보장 → 외래 키(Foreign Key), 트랜잭션(Transaction) 지원
✔ 트랜잭션 ACID(원자성, 일관성, 격리성, 지속성) 보장
✔ 수직적 확장(Scale-up) 위주 → 서버 성능을 업그레이드하여 확장
📌 예제:
CREATE TABLE Users (
id INT PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100) UNIQUE
);
📌 대표적인 관계형 데이터베이스:
- MySQL
- PostgreSQL
- Oracle Database
- Microsoft SQL Server
✅ 2. 비관계형 데이터베이스(NoSQL: Not Only SQL)
📌 개념:
- 데이터를 테이블이 아닌 다양한 방식(Document, Key-Value, Column-Family, Graph 등)으로 저장.
- SQL 대신 다양한 데이터 접근 방식(JSON, BSON, Key-Value 등) 사용.
- 스키마 유연성(Flexible Schema) → 정해진 테이블 구조 없이 자유롭게 데이터 저장 가능.
📌 특징:
✔ 스키마가 유연함 → 데이터 구조 변경이 쉬움
✔ 수평적 확장(Scale-out) 용이 → 여러 노드를 추가하여 확장 가능
✔ 대량의 비정형 데이터(소셜미디어, 로그 데이터 등) 처리에 적합
✔ ACID 대신 CAP 이론(Consistency, Availability, Partition Tolerance) 고려
📌 주요 유형과 예제:
1️⃣ 문서 지향형(Document-Oriented) DB
- JSON, BSON 형식으로 데이터를 저장
- 예: MongoDB
{
"id": 1,
"name": "John Doe",
"email": "john.doe@example.com"
}
2️⃣ 키-값(Key-Value) DB
- Key와 Value 형태로 데이터를 저장
- 예: Redis, DynamoDB
{ "user:1001": "{name: 'Alice', age: 25}" }
3️⃣ 열 기반(Column-Family) DB
- 테이블과 유사하지만, 컬럼을 유연하게 관리 가능
- 예: Cassandra, HBase
4️⃣ 그래프(Graph) DB
- 관계(연결)를 중요하게 다루는 데이터베이스
- 예: Neo4j
🔥 차이점 비교 (RDB vs NoSQL)
비교 항목 | 관계송 데이터베이스(RDB) | 비관계형 데이터베이스(NoSQL) |
데이터 모델 | 테이블(행/열) 기반 | 문서, 키-값, 그래프, 컬럼 기반 |
스키마 | 고정됨 (정해진 구조 필요) | 유연함 (동적 구조 가능) |
트랜잭션 | ACID 지원 (데이터 무결성 보장) | 대부분 CAP 이론 기반 (Consistency 또는 Availability 중 선택) |
확장성 | 수직 확장(Scale-up) | 수평 확장(Scale-out) |
성능 | 읽기/쓰기 성능이 안정적 | 대량의 데이터 처리에 유리 |
사용 사례 | 금융, ERP, 전자상거래 | 소셜 미디어, 로그 데이터, IoT, 빅데이터 |
🎯 어떤 경우에 어떤 데이터베이스를 선택해야 할까?
✅ RDB (MySQL, PostgreSQL, Oracle 등) 선택이 적합한 경우
✔ 데이터가 정형화되어 있고, 정확성(무결성) 이 중요한 경우
✔ 트랜잭션(예: 은행, 결제 시스템) 처리가 필요한 경우
✔ 관계형 데이터(외래 키 등으로 연결된 데이터)가 많은 경우
✅ NoSQL (MongoDB, Redis, Cassandra 등) 선택이 적합한 경우
✔ 데이터 구조가 자주 바뀌고, 유연성이 중요한 경우
✔ 대량의 데이터(빅데이터, 로그, 소셜 미디어 등)를 빠르게 처리해야 하는 경우
✔ 수평적 확장(Scale-out)이 필요한 경우 (대규모 트래픽)
✔ 읽기/쓰기 성능을 극대화해야 하는 경우 (예: Redis 캐싱)
🎯 정리
RDB vs NoSQL | 관계형 데이터베이스(RDB) | 비관계형 데이터베이스 (NoSQL) |
데이터 구조 | 고정된 스키마 | 동적 스키마 |
확장성 | 수직 확장 (Scale-up) | 수평 확장 (Scale-out) |
트랜잭션 | ACID 지원 | CAP 이론 기반 |
성능 | 중소 규모 데이터에 최적화 | 빅데이터 처리에 최적화 |
사용 사례 | 은행, 전자상거래, ERP | 로그, IoT, 소셜 미디어, 캐싱 |
📌 결론:
- 데이터 무결성이 중요하고 관계형 구조가 필요하면 RDB 사용!
- 대량의 데이터 처리, 유연한 스키마, 빠른 성능이 필요하면 NoSQL 사용! 🚀
'서버&백엔드 > 🗃️ SQL' 카테고리의 다른 글
정규화 과정 (0) | 2025.01.21 |
---|---|
nextval 중복된 키값이 고유제약조건을 위반하는 문제해결 (0) | 2024.09.02 |
DBeaver Functions Comment 표시설정하는법 (0) | 2024.08.07 |
PostgreSQL | 쿼리 성능 분석하기 (1) | 2024.07.03 |
추출한 CSV파일 채우기 드래그 한번에 하기 (0) | 2024.06.30 |