275. NoSQL 데이터 모델 4가지
핵심 인사이트 (3줄 요약)
- 본질: NoSQL 데이터 모델은 키-값 저장소, 문서 저장소, 컬럼 패밀리 저장소, 그래프 저장소의 네 가지로 분류되며, 각각 다른 데이터 구조와 적합한 사용 사례를 가진다.
- 가치: 각 데이터 모델은 특정 유형의 데이터와 작업에 최적화되어 있어, 데이터 특성上 맞는 모델을 선택하면 성능과 개발 효율성을 크게 높일 수 있다.
- 융합: CAP 정리, BASE 속성, Eventually Consistency, 수평 확장, 분산 아키텍처와 밀접하게 연관된다.
Ⅰ. 개요 및 필요성 (Context & Necessity)
네 가지 NoSQL 데이터 모델 개요
NoSQL 데이터베이스는 데이터 모델에 따라 네 가지로 분류된다. 각 모델은 서로 다른 데이터 구조와 연산을 제공하며, 특정 유형의 작업에 최적화되어 있다.
| 데이터 모델 | 데이터 구조 | 대표 시스템 | 적합한 용도 |
|---|---|---|---|
| 키-값 저장소 | 키와 값의 쌍 | Redis, Memcached, DynamoDB | 세션, 캐시, 단순 설정 |
| 문서 저장소 | JSON/XML 문서 | MongoDB, CouchDB | 반정형 데이터, 카탈로그 |
| 컬럼 패밀리 저장소 | 와이드 컬럼 | Cassandra, HBase | 시계열, 로그, 대량 쓰기 |
| 그래프 저장소 | 노드, 엣지, 속성 | Neo4j, Neptune | 소셜 네트워크, 추천 시스템 |
필요성
관계형 데이터베이스의 고정 스키마와 테이블 구조가 모든 유형의 데이터를 효과적으로 처리하기 어려운 경우가 많다. 반정형/비정형 데이터, 관계 중심 데이터, 시계열 데이터 등 다양한 데이터 특성에 최적화된 다양한 데이터 모델이 필요하다.
📢 섹션 요약: NoSQL의 네 가지 데이터 모델(키-값, 문서, 컬럼 패밀리, 그래프)은 각각 다른 특장과 용도를 가지며, 데이터 특성에 맞는 모델 선택이 중요하다.
Ⅱ. 아키텍처 및 핵심 원리 (Deep Dive)
1. 키-값 저장소 (Key-Value Store)
┌─────────────────────────────────────────────────────────────────────────────┐
│ 키-값 저장소 구조 │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ 키-값 쌍의 집합 │ │
│ │ │ │
│ │ ┌──────────┬──────────────────────┐ │ │
│ │ │ 키 │ 값 │ │ │
│ │ ├──────────┼──────────────────────┤ │ │
│ │ │ user:001 │ {name: "Kim", age: 30} │ │ │
│ │ │ user:002 │ {name: "Lee", age: 25} │ │ │
│ │ │ prod:100 │ {name: "TV", price: 1000} │ │ │
│ │ │ sess:abc │ "session_data_..." │ │ │
│ │ │ cart:001 │ [items...] │ │ │
│ │ └──────────┴──────────────────────┘ │ │
│ │ │ │
│ │ 기본 연산: │ │
│ │ • GET key → 값 조회 │ │
│ │ • SET key value → 값 저장 │ │
│ │ • DEL key → 삭제 │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
│ │
│ 장점: 단순함, 매우 빠른 성능, 손쉬운 수평 확장 │
│ 단점: 복잡한 쿼리 불가, 값의 구조를 활용하려면 애플리케이션에서 파싱 필요 │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
2. 문서 저장소 (Document Store)
┌─────────────────────────────────────────────────────────────────────────────┐
│ 문서 저장소 구조 │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ JSON 문서의 집합 │ │
│ │ │ │
│ │ { │ │
│ │ "_id": "1", │ │
│ │ "name": "Kim", │ │
│ │ "email": "kim@test.com", │ │
│ │ "address": { │ │
│ │ "city": "Seoul", │ │
│ │ "zip": "12345" │ │
│ │ }, │ │
│ │ "orders": [ │ │
│ │ {"order_id": "O001", "amount": 100}, │ │
│ │ {"order_id": "O002", "amount": 200} │ │
│ │ ] │ │
│ │ } │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
│ │
│ 기본 연산: │
│ • find({field: value}) → 조건에 맞는 문서 조회 │
│ • insert(document) → 문서 삽입 │
│ • update(query, data) → 문서 갱신 │
│ • delete(query) → 문서 삭제 │
│ │
│ 장점: 유연한 스키마, 복잡한 데이터 구조 표현, 색인 및 쿼리 가능 │
│ 단점: 쓰기보다 읽기 최적화, 중첩 구조의 깊이 제한 가능 │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
3. 컬럼 패밀리 저장소 (Column Family Store)
┌─────────────────────────────────────────────────────────────────────────────┐
│ 컬럼 패밀리 저장소 구조 │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ 와이드 컬럼 테이블 │ │
│ │ │ │
│ │ Row Key: user:001 │ │
│ │ ┌────────────────┬────────────────┬────────────────┬─────────────┐ │ │
│ │ │ name │ email │ orders │ metadata │ │ │
│ │ ├────────────────┼────────────────┼────────────────┼─────────────┤ │ │
│ │ │ Kim │ kim@test.com │ O001:100 │ ... │ │ │
│ │ │ │ │ O002:200 │ │ │ │
│ │ │ │ │ O003:300 │ │ │ │
│ │ └────────────────┴────────────────┴────────────────┴─────────────┘ │ │
│ │ │ │
│ │ ※ 컬럼 패밀리: 관련 컬럼을 그룹화 (orders: 주문 정보 컬럼 그룹) │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
│ │
│ 장점: 대량 쓰기/읽기 최적화, 압축 효율 높음, 시계열 데이터에 특화 │
│ 단점: 조인 미지원, 쿼리 제한적, 데이터 모델 설계 복잡 │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
4. 그래프 저장소 (Graph Store)
┌─────────────────────────────────────────────────────────────────────────────┐
│ 그래프 저장소 구조 │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ 그래프 구조 │ │
│ │ │ │
│ │ (Kim) ────friend───▶ (Lee) │ │
│ │ │ │ │ │
│ │ friend friend │ │
│ │ ▼ ▼ │ │
│ │ (Park) ────friend───▶ (Choi) │ │
│ │ │ │
│ │ 노드: Kim, Lee, Park, Choi │ │
│ │ 엣지: friend (관계) │ │
│ │ 속성: 각 노드의 정보 (name, age 등) │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
│ │
│ 기본 연산: │
│ • CREATE (노드/엣지 생성) │
│ • MATCH (조건에 맞는 노드/경로 탐색) │
│ • OPTIONAL MATCH (왼쪽 외부 조인类似) │
│ • RETURN (결과 반환) │
│ │
│ 장점: 복잡한 관계 탐색 효율적,.social network分析에 최적화 │
│ 단점: 대규모 데이터에서 수평 확장 어려움, 다른 모델보다 복잡 │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
[다이어그램 해설] 네 가지 NoSQL 데이터 모델은 각각 다른 데이터 구조를 가진다. 키-값 저장소는 가장 단순하지만 확장성이 높고, 문서 저장소는 유연한 스키마로 반정형 데이터에 적합하다. 컬럼 패밀리 저장소는 대량 읽기/쓰기에 최적화되어 있고, 그래프 저장소는 관계 탐색에 특화되어 있다. 어떤 모델을 선택할지는 데이터의 특성과 작업 유형에 따라 달라진다.
📢 섹션 요약: 네 가지 NoSQL 데이터 모델은 각각 다른 데이터 구조와 장단점을 가지며, 사용 사례에 맞는 올바른 모델 선택이 중요하다.
Ⅲ. 결론
NoSQL의 네 가지 데이터 모델(키-값, 문서, 컬럼 패밀리, 그래프)은 각각 다른 특장과 용도를 가진다. 데이터의 구조, 작업의 특성, 확장성 요구사항 등을 고려하여 적절한 모델을 선택해야 한다. 또한 하나의 시스템에서 여러 데이터 모델을 지원하는 다중 모델 데이터베이스도 있다.
📢 섹션 요약: NoSQL의 네 가지 데이터 모델은 각각 다른 용도에 최적화되어 있으며, 데이터 특성과 작업 유형에 따라 올바른 모델을 선택해야 한다.
핵심 인사이트 ASCII 다이어그램 (Concept Map)
┌─────────────────────────────────────────────────────────────────────────────┐
│ NoSQL Data Models Concept Map │
│ │
│ ┌─────────────────────────────────┐ │
│ │ NoSQL 4 Data Models │ │
│ │ (NoSQL 데이터 모델 4가지) │ │
│ └───────────────┬────────────────┘ │
│ │ │
│ ┌──────────────────────────┼──────────────────────────┐ │
│ ▼ ▼ ▼ │
│ ┌──────────┐ ┌──────────────┐ ┌──────────────────┐ │
│ │ Key-Value│ │ Document │ │ Column Family │ │
│ │ (키-값) │ │ (문서) │ │ (컬럼패밀리) │ │
│ │ Redis等 │ │ MongoDB等 │ │ Cassandra等 │ │
│ └──────────┘ └──────────────┘ └──────────────────┘ │
│ ▼ │
│ ┌──────────────┐ │
│ │ Graph │ │
│ │ (그래프) │ │
│ │ Neo4j等 │ │
│ └──────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
참고
- NoSQL 데이터 모델은 키-값, 문서, 컬럼 패밀리, 그래프의 4가지가 있다.
- 각 모델은 서로 다른 데이터 구조와 적합한 용도를 가진다.
- 사용 사례의 특성에 따라 올바른 모델을 선택해야 한다.
- 다중 모델 DB(ArangoDB, Cosmos DB 등)는 여러 모델을 지원한다.