Document Oriented

Document-Oriented Database는 NoSQL 데이터베이스의 한 유형으로, 데이터를 문서 형태로 저장하고 관리하는 시스템이다.
이 데이터베이스는 전통적인 관계형 데이터베이스와는 다르게 유연한 스키마를 가지며, 주로 JSON, BSON, XML과 같은 형식으로 데이터를 저장한다.

Document-Oriented Database의 대표적인 예로는 MongoDB, Couchbase, Amazon DocumentDB 등이 있다.

이러한 데이터베이스는 다음과 같은 상황에서 특히 유용하다:

Document-Oriented Database의 기본 구조를 MongoDB를 예시로 살펴보자:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// 도서 정보를 저장하는 문서 예시
{
    "_id": ObjectId("507f1f77bcf86cd799439011"),
    "title": "프로그래밍의 기초",
    "author": {
        "name": "김개발",
        "email": "kim@example.com"
    },
    "tags": ["프로그래밍", "컴퓨터", "입문"],
    "chapters": [
        {
            "number": 1,
            "title": "시작하기",
            "pages": 25
        },
        {
            "number": 2,
            "title": "기본 문법",
            "pages": 45,
            "exercises": ["Ex1", "Ex2", "Ex3"]
        }
    ],
    "published_date": ISODate("2023-01-15"),
    "price": 35000,
    "in_stock": true
}

Document-Oriented Database의 주요 특징

  1. 스키마 유연성 (Schema Flexibility)
    관계형 데이터베이스와 달리, 각 문서마다 다른 구조를 가질 수 있다.
    예를 들어:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
    // 일반적인 사용자 문서
    {
        "_id": ObjectId("…"),
        "name": "홍길동",
        "email": "hong@example.com"
    }
    
    // 추가 정보가 있는 프리미엄 사용자 문서
    {
        "_id": ObjectId("…"),
        "name": "김철수",
        "email": "kim@example.com",
        "premium": true,
        "preferences": {
            "theme": "dark",
            "notifications": ["email", "sms"]
        },
        "subscription": {
            "plan": "yearly",
            "expires": ISODate("2024-12-31")
        }
    }
    
  2. 계층적 데이터 구조 (Hierarchical Data Structure)
    문서 내에 중첩된 객체와 배열을 자연스럽게 표현할 수 있다:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
    // 블로그 게시글 문서 예시
    {
        "_id": ObjectId("…"),
        "title": "Document DB 소개",
        "content": "본문 내용…",
        "comments": [
            {
                "user": "reader1",
                "text": "좋은 글이네요",
                "timestamp": ISODate("2023-12-01"),
                "likes": 5,
                "replies": [
                    {
                        "user": "author",
                        "text": "감사합니다",
                        "timestamp": ISODate("2023-12-01")
                    }
                ]
            }
        ],
        "tags": ["database", "nosql", "tutorial"]
    }
    
  3. 쿼리 기능 (Query Capabilities)
    강력하고 유연한 쿼리 기능을 제공한다:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    
    // 복잡한 쿼리 예시
    db.books.find({
        // 가격이 30000원 이상이고
        "price": { $gte: 30000 },
        // "프로그래밍" 태그가 있으며
        "tags": "프로그래밍",
        // 재고가 있는 책들을 검색
        "in_stock": true
    })
    
    // 중첩된 데이터 쿼리
    db.books.find({
        "chapters.exercises": "Ex1"
    })
    
  4. 확장성 (Scalability)
    수평적 확장이 용이하며, 대규모 데이터 처리에 적합하다:

    1
    2
    3
    
    // 샤딩 구성 예시
    sh.enableSharding("bookstore")
    sh.shardCollection("bookstore.books", {"_id": "hashed"})
    

Document-Oriented Database의 주요 활용 사례

  1. 콘텐츠 관리 시스템 (CMS)
    블로그, 위키, 문서 관리 시스템 등에서 문서의 구조가 유동적인 경우 적합하다.

  2. 실시간 분석 시스템
    로그 데이터, 사용자 활동 데이터 등 구조가 자주 변경되는 데이터를 처리할 때 유용하다.

  3. 이커머스 플랫폼
    제품 정보, 주문 내역 등 복잡하고 중첩된 데이터 구조를 다룰 때 효과적이다.

주의해야 할 점들

  1. 데이터 일관성
    문서 간의 관계를 관리할 때 추가적인 주의가 필요하다.

  2. 메모리 사용
    중첩된 데이터 구조로 인해 메모리 사용량이 증가할 수 있다.

  3. 쿼리 최적화
    복잡한 쿼리의 경우 적절한 인덱싱 전략이 중요하다.


참고 및 출처