Database

Database. 4일차 - MongoDB란?

머용? 2024. 2. 19. 16:36

MongoDB란?

- NoSQL 데이터베이스의 한 종류
- 문서 기반(Document-Oriented)의 데이터베이스 시스템
- 관계형 데이터베이스의 테이블 대신 JSON/BSON 형식의 동적인 문서를 사용하여 데이터를 저장하고 조회 ⇒ 이러한 특징은 유연성, 확장성을 가져옴.

MongoDB의 구조: Database - Collection - Document

  1. Database (데이터베이스):
    • MongoDB는 여러 개의 데이터베이스를 가질 수 있습니다. 각 데이터베이스는 독립적으로 관리되고 여러 컬렉션을 포함할 수 있습니다.
    • 데이터베이스는 일반적으로 관련된 데이터를 그룹화하는 데 사용됩니다.
  2. Collection (컬렉션):
    • 컬렉션은 문서(Document)의 그룹입니다. 테이블과 유사하게 데이터를 저장하며 스키마가 없어 유연한 구조를 가지고 있습니다.
    • 서로 다른 Document들이 하나의 컬렉션에 저장될 수 있습니다.
  3. Document (문서):
    • 문서는 MongoDB에서의 기본 데이터 단위로, JSON 형태의 키-값 쌍을 갖습니다.
    • 각 문서는 서로 다른 구조를 가질 수 있으며, 필요에 따라 필드를 동적으로 추가할 수 있습니다.
    • Document는 Collection 내에 저장되며, 각 Document는 고유한 ObjectId를 가집니다.

MongoDB Collection:

{
  "collection_name": "users",
  "documents": [
    {
      "_id": ObjectId("5fde7b8e69e01b3f95277b10"),
      "name": "John Doe",
      "age": 30,
      "city": "New York",
      "skills": ["JavaScript", "Python", "MongoDB"],
      "address": {
        "street": "123 Main St",
        "city": "New York",
        "zipcode": "10001"
      }
    },
    {
      "_id": ObjectId("5fde7c1569e01b3f95277b11"),
      "name": "Jane Smith",
      "age": 25,
      "city": "San Francisco",
      "skills": ["Java", "C++", "SQL"],
      "address": {
        "street": "456 Oak St",
        "city": "San Francisco",
        "zipcode": "94105"
      }
    },
    // Additional documents...
  ]
}

MongoDB Document:

{
  "_id": ObjectId("5fde7b8e69e01b3f95277b10"),
  "name": "John Doe",
  "age": 30,
  "city": "New York",
  "skills": ["JavaScript", "Python", "MongoDB"],
  "address": {
    "street": "123 Main St",
    "city": "New York",
    "zipcode": "10001"
  }
}

RDBMS의 구조와의 비교:

  1. Database (데이터베이스):
    • RDBMS에서의 Database는 일반적으로 정형화된 테이블들을 그룹화하고, 각 테이블은 고정된 스키마를 가집니다.
  2. Table (테이블):
    • RDBMS의 Table은 정해진 스키마를 가진 열과 행의 구조로 이루어져 있습니다.
    • 각 테이블은 레코드(행) 단위로 데이터를 저장하며, 각 레코드는 미리 정의된 열에 맞춰진 데이터를 가집니다.
  3. Row (레코드):
    • RDBMS에서의 레코드는 각각의 테이블에 속하는 하나의 행을 나타냅니다.
    • 각 레코드는 테이블의 스키마에 따라 고정된 구조를 가지고 있습니다.

주요 특징 및 개념

  1. 문서 기반 데이터베이스

    • MongoDB는 데이터를 문서(Document)라는 단위로 저장합니다. 각 문서는 키-값 쌍으로 이루어진 BSON(Binary JSON) 형식으로 표현되며, 여러 문서가 컬렉션(Collection)에 저장됩니다.
  2. 유연한 스키마

    • MongoDB는 동적 스키마(Dynamic Schema)를 사용하므로, 각 문서가 다른 구조를 가질 수 있습니다. 필드를 동적으로 추가하거나 제거할 수 있어 데이터 모델의 변경이 유연하게 이루어집니다.
  3. JSON/BSON 형식

    • 데이터는 JSON과 유사한 문서 구조를 사용하며, MongoDB에서는 BSON 형식으로 이진화되어 저장됩니다. 이는 대용량 데이터 처리 및 전송에서 성능 향상을 가져옵니다.

      • JSON

        {
          "name": "John",
          "age": 30,
          "city": "New York"
        }
      • BSON : JSON의 이진 표현 형식으로, JSON과 유사하지만 이진 데이터로 표현됩니다.

        \x16\x00\x00\x00          // 전체 크기
        \x02                       // 문자열 타입
        name\x00                   // 필드 이름
        \x04\x00\x00\x00John\x00   // 문자열 값
        \x10\x00                    // 16 (숫자 타입)
        age\x00\x00\x00            // 필드 이름
        \x1E\x00\x00\x00           // 30 (숫자 값)
        \x02\x00                    // 문자열 타입
        city\x00                   // 필드 이름
        \x0C\x00\x00\x00New York\x00  // 문자열 값
        \x00                       // 마지막
      • BSON은 이진 형식이므로 직렬화 및 역직렬화가 JSON보다 빠르게 이루어집니다. MongoDB는 BSON을 내부 저장 형식으로 사용하므로 데이터베이스의 입출력이 효율적으로 처리됩니다.

  1. 높은 확장성

    • MongoDB는 수평적 확장이 가능합니다. 여러 서버에 데이터를 분산하고 데이터베이스의 용량을 증가시킬 수 있어 대규모 애플리케이션에 적합합니다.

    • 수평적 확장
      : 수평적 확장을 위해선 데이터의 파티셔닝이나 샤딩(Sharding)과 같은 기술이 필요하며, 이는 구현 및 관리가 복잡할 수 있습니다. MongoDB는 처음부터 수평적 확장을 염두에 두고 설계되었으며, 데이터를 자동으로 분산 및 관리하는 기능을 내장하고 있어 비교적 쉽게 수평적 확장이 가능합니다.

  2. 인덱싱과 검색 기능

    • MongoDB는 인덱싱을 지원하여 데이터의 검색 속도를 향상시킵니다. 다양한 쿼리와 검색 연산자를 활용하여 유연한 데이터 검색이 가능합니다.
  3. 자동 샤딩(Sharding)

    • 대용량의 데이터를 처리하기 위해 자동 샤딩 기능을 제공합니다. 이를 통해 데이터베이스가 수평으로 확장되어 성능을 유지할 수 있습니다.

    • 샤딩(Sharding)
      1. Increased read/write throughput
      : 데이터를 여러 샤드에 분산시켜 병렬로 작업을 수행하므로 읽기/쓰기 처리량이 증가하며, 각 샤드 추가는 처리량을 선형적으로 확장시킵니다.

      2. Data Locality
      : Zone Sharding 을 통해 지리적으로 분산된 애플리케이션을 지원하고, 데이터의 저장 위치를 특정 지역에 강제화하여 데이터의 지역성을 제어할 수 있습니다.