"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > MongoDB 서버: 개요

MongoDB 서버: 개요

2024-11-09에 게시됨
검색:527

MongoDB Server: An Overview

MongoDB는 확장 가능하고 유연한 고성능 데이터 스토리지 솔루션을 제공하는 인기 있는 NoSQL 데이터베이스입니다. 테이블과 행을 사용하는 기존 관계형 데이터베이스와 달리 MongoDB는 BSON(Binary JSON)이라는 JSON과 유사한 유연한 구조를 사용하여 문서에 데이터를 저장합니다. 이를 통해 MongoDB는 복잡한 데이터 유형과 계층적 관계를 쉽게 처리할 수 있습니다.

이 기사에서는 MongoDB 서버의 아키텍처, 기능 및 모범 사례를 자세히 살펴보고 MongoDB 서버의 작동 방식과 이 서버가 현대적인 데이터 집약적 애플리케이션에 선택되는 이유를 이해하는 데 도움을 줄 것입니다.

MongoDB 서버의 주요 기능

  1. 문서 중심 스토리지 MongoDB는 관계형 데이터베이스의 행보다 더 많은 유연성을 제공하는 문서를 중심으로 설계되었습니다. 문서는 내장된 문서 및 배열을 지원하는 JSON과 유사한 문서의 이진 표현인 BSON으로 구성됩니다. 이를 통해 MongoDB는 조인이 필요 없이 단일 문서에서 복잡한 관계를 표현할 수 있습니다. 예를 들어 문서는 다음과 같습니다.

{
   "_id": 1,
   "name": "John Doe",
   "email": "[email protected]",
   "orders": [
       { "order_id": 101, "product": "Laptop", "quantity": 1 },
       { "order_id": 102, "product": "Mouse", "quantity": 2 }
   ]
}


이 경우 각 고객은 단일 문서에 자신만의 주문 컬렉션을 포함할 수 있으므로 데이터 검색이 더욱 효율적으로 이루어지고 복잡한 쿼리의 필요성이 줄어듭니다.

  1. 샤딩을 통한 수평 확장성 MongoDB는 데이터를 여러 서버에 분산시킬 수 있는 샤딩을 통한 수평적 확장을 지원합니다. 이는 데이터가 증가함에 따라 MongoDB가 더 많은 서버를 추가하여 이를 처리하고 성능과 용량을 모두 향상시킬 수 있음을 의미합니다. 샤딩을 사용하면 MongoDB가 성능에 미치는 영향을 최소화하면서 고가용성을 유지하고 대규모 데이터 세트를 수용할 수 있습니다.

3. 효율적인 쿼리를 위한 색인 생성
MongoDB는 문서의 모든 필드에 대한 인덱스 생성을 지원합니다. 인덱스는 데이터베이스가 인덱스된 필드를 보다 효율적으로 검색할 수 있도록 하여 쿼리 작업 속도를 크게 향상시킵니다. 인덱스가 없으면 MongoDB는 전체 컬렉션 스캔을 수행해야 하며, 이는 대규모 데이터세트의 경우 속도가 느려질 수 있습니다.
• 단일 필드 인덱스: 문서의 단일 필드를 인덱스합니다.
• 복합 색인: 문서의 여러 필드를 색인합니다.
• 텍스트 색인: 문서 내에서 효율적인 텍스트 검색이 가능합니다.
• 지리공간 색인: 위치 기반 데이터를 저장하고 쿼리하는 데 최적화되었습니다.

  1. 집계 프레임워크 MongoDB는 데이터 필터링, 그룹화, 정렬, 변환과 같은 복잡한 데이터 분석 작업을 수행할 수 있는 강력한 집계 프레임워크를 제공합니다. 이 기능은 SQL의 GROUP BY 및 JOIN 작업과 유사하지만 문서 기반 구조에 최적화되어 있습니다. 집계 파이프라인의 예:

db.sales.aggregate([
   { $match: { status: "completed" } },
   { $group: { _id: "$product", total: { $sum: "$quantity" } } },
   { $sort: { total: -1 } }
])


이 쿼리는 상태가 "완료"인 판매 문서를 필터링하여 제품별로 그룹화하고 판매된 각 제품의 수량을 합산하여 결과를 내림차순으로 정렬합니다.

  1. 고가용성을 위한 복제
    MongoDB는 데이터가 여러 서버에 복사되는 복제를 통해 고가용성을 보장합니다. MongoDB의 복제 세트 아키텍처를 사용하면 데이터베이스의 여러 인스턴스가 데이터를 동기화하여 서버 오류 시 중복성과 자동 장애 조치를 제공할 수 있습니다.
    일반적인 복제 세트는 다음으로 구성됩니다:
    • 기본 노드: 모든 쓰기 작업을 허용합니다.
    • 보조 노드: 기본 노드의 데이터를 복제하여 백업 역할을 합니다.
    • Arbiter Node: 복제본 세트의 일부이지만 데이터를 보유하지 않으며 장애 조치 중 연결을 끊는 데 사용됩니다.
    기본 노드에 장애가 발생하는 경우 보조 노드 중 하나가 자동으로 기본 노드로 승격됩니다.

  2. ACID 거래
    MongoDB 4.0부터 다중 문서 ACID(Atomicity, Consistency, Isolation, Durability) 트랜잭션에 대한 지원이 도입되었습니다. 트랜잭션은 여러 쓰기 작업이 성공적으로 완료되거나 그 중 아무 것도 적용되지 않도록 보장하여 전통적으로 관계형 데이터베이스와 관련된 강력한 데이터 일관성을 보장합니다.

  3. 유연한 스키마 설계
    MongoDB의 유연한 스키마를 통해 신속한 개발과 반복이 가능합니다. 관계형 데이터베이스에 의해 부과된 엄격한 테이블 구조에 대해 걱정하지 않고 동일한 컬렉션에 다양한 유형의 데이터를 저장할 수 있습니다. 이러한 유연성은 강력하지만 데이터 중복을 방지하고 효율적인 데이터 검색을 보장하려면 스키마를 신중하게 설계하는 것이 중요합니다.

  4. 실시간 애플리케이션에 대한 스트림 변경
    MongoDB는 변경 스트림을 제공하여 애플리케이션이 실시간 데이터 변경에 반응할 수 있도록 합니다. 변경 스트림은 실시간 분석, 알림 및 다양한 시스템 간의 데이터 동기화에 유용합니다.

  5. 임시 쿼리 지원
    MongoDB는 동적 쿼리를 지원하므로 개발자는 미리 정의된 구조가 아닌 데이터 값을 기반으로 쿼리를 구성할 수 있습니다. 모든 필드, 값 범위 또는 정규식을 기준으로 쿼리할 수 있습니다.

MongoDB 서버 아키텍처
MongoDB의 아키텍처는 고가용성, 확장성 및 성능을 보장하는 여러 핵심 구성 요소를 중심으로 구축되었습니다.

  1. 샤딩된 클러스터 MongoDB는 샤딩 아키텍처를 사용하여 여러 노드에 걸쳐 수평으로 확장됩니다. 샤드 클러스터는 각각 데이터의 하위 집합을 담당하는 샤드(개별 MongoDB 서버)에 데이터를 배포합니다. • 샤드: 샤딩된 데이터의 일부를 저장하는 단일 MongoDB 서버 또는 복제본 세트입니다. • 구성 서버: 클러스터에 대한 메타데이터 및 구성 설정을 저장합니다. • 쿼리 라우터(mongos): 애플리케이션과 샤딩된 클러스터 간의 인터페이스 역할을 하며 쿼리를 적절한 샤드로 라우팅합니다.
  2. 복제본 세트 MongoDB의 복제본 세트는 하나의 기본 노드와 여러 개의 보조 노드가 있는 데이터베이스(노드)의 여러 인스턴스로 구성됩니다. 복제는 중복성과 내결함성을 보장합니다. 기본 노드가 다운되면 보조 노드가 자동으로 기본 노드로 승격됩니다.
  3. 스토리지 엔진(WiredTiger) MongoDB는 기본적으로 문서 수준 잠금, 압축 및 높은 동시성을 제공하는 WiredTiger 스토리지 엔진을 사용합니다. 이 엔진을 사용하면 MongoDB가 많은 동시 작업을 통해 처리량이 높은 애플리케이션을 지원할 수 있습니다.

MongoDB 서버 사용 모범 사례
MongoDB를 최대한 활용하려면 성능, 확장성 및 데이터 무결성에 대한 모범 사례를 따르는 것이 중요합니다.

1. 효율적인 스키마 설계
MongoDB는 유연한 스키마 설계를 허용하지만 데이터 중복과 불필요한 중첩을 피하는 것이 중요합니다. 복잡한 데이터 관계를 지원하는 동시에 문서를 최대한 작고 컴팩트하게 유지하여 쿼리 패턴을 중심으로 스키마를 계획하세요.

2. 색인 전략
성능 향상을 위해 자주 쿼리되는 필드에 대한 인덱스를 만듭니다. 그러나 과도한 색인 생성은 쓰기 작업 속도를 저하시킬 수 있으므로 피하세요.

3. 샤딩 키
샤딩을 사용할 때 성능 병목 현상을 방지하기 위해 샤드 전체에 데이터를 균등하게 분산하는 적절한 샤딩 키를 선택하세요.

4. 복제 세트 사용
프로덕션 애플리케이션의 경우 항상 MongoDB를 복제본 세트 구성으로 배포하여 고가용성과 내결함성을 보장하세요.

5. 성능 모니터링 및 최적화
MongoDB Atlas와 같은 MongoDB의 내장 모니터링 도구와 Prometheus 또는 Grafana와 같은 외부 도구를 사용하여 MongoDB 인스턴스의 성능을 모니터링하세요. 느린 쿼리를 정기적으로 확인하고 인덱스 또는 집계 파이프라인을 사용하여 최적화합니다.
6. 백업 및 복구
데이터 내구성을 보장하기 위해 정기적인 백업 전략을 구현합니다. 전체 백업에는 mongodump 및 mongorestore를 사용하고, 관리형 백업 솔루션에는 MongoDB Atlas를 활용하세요.

결론
MongoDB 서버는 고성능, 유연성 및 확장성이 필요한 최신 애플리케이션을 위해 설계된 강력한 NoSQL 데이터베이스입니다. 수평 샤딩, 복제본 세트, 강력한 인덱싱, ACID 트랜잭션과 같은 기능을 갖춘 MongoDB는 소규모 앱부터 엔터프라이즈급 시스템까지 모든 것을 구축하는 개발자가 선택하는 데이터베이스가 되었습니다. 핵심 기능, 아키텍처 및 모범 사례를 이해하면 MongoDB 배포의 효율성과 안정성을 극대화할 수 있습니다.

릴리스 선언문 이 글은 https://dev.to/keploy/mongodb-server-an-overview-336j?1 에서 복제하였습니다. 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제해 주시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3