275. NoSQL 데이터 모델 4가지

핵심 인사이트 (3줄 요약)

  1. 본질: NoSQL 데이터 모델은 키-값 저장소, 문서 저장소, 컬럼 패밀리 저장소, 그래프 저장소의 네 가지로 분류되며, 각각 다른 데이터 구조와 적합한 사용 사례를 가진다.
  2. 가치: 각 데이터 모델은 특정 유형의 데이터와 작업에 최적화되어 있어, 데이터 특성上 맞는 모델을 선택하면 성능과 개발 효율성을 크게 높일 수 있다.
  3. 융합: 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 등)는 여러 모델을 지원한다.