contents

MongoDB는 유연한 JSON과 유사한 도큐먼트(document)에 데이터를 저장하는 인기 있는 오픈소스 NoSQL 데이터베이스입니다. 문서 지향 데이터베이스로서, 높은 확장성, 유연성, 그리고 개발자들이 쉽게 사용할 수 있도록 설계되어 현대 애플리케이션을 위한 최고의 선택지 중 하나가 되었습니다.

전통적인 관계형 데이터베이스(SQL 등)의 엄격한 행과 열 대신, MongoDB는 애플리케이션 코드의 객체와 자연스럽게 매핑되는 더 동적인 구조를 사용합니다.


MongoDB가 해결하는 핵심 문제: 경직성 vs. 유연성

MongoDB를 이해하는 가장 좋은 방법은 전통적인 SQL 데이터베이스와 비교하는 것입니다.

이러한 유연성 덕분에 데이터 모델이 변경될 때마다 복잡한 데이터베이스 마이그레이션을 수행할 필요가 없어 애플리케이션을 훨씬 더 빠르게 개발하고 반복할 수 있습니다.


핵심 개념: 데이터 모델 📄


주요 특징 및 아키텍처

1. 유연한 스키마

언급했듯이, 단일 컬렉션 내의 도큐먼트들은 동일한 필드 집합을 공유할 필요가 없습니다. 이는 제품 카탈로그, 사용자 프로필, IoT 데이터 스트림과 같이 데이터가 다양하거나 시간이 지남에 따라 진화하는 애플리케이션에 이상적입니다.

2. 풍부한 쿼리 언어

MongoDB는 단순한 키-값 저장소가 아닙니다. 필드 값, 범위, 정규 표현식 등을 기반으로 도큐먼트를 필터링할 수 있는 강력한 쿼리 언어를 제공합니다. 또한 데이터 처리 및 분석을 위한 강력한 애그리게이션 파이프라인도 지원합니다.

JavaScript

// "홍길동"이 작성하고 "mongodb" 태그가 있는 모든 포스트 찾기
db.posts.find({
  author: "홍길동",
  tags: { $in: ["mongodb"] }
})

3. 확장성 (샤딩) 🚀

이것은 MongoDB의 가장 유명한 기능 중 하나입니다. 데이터가 단일 서버에 담기에는 너무 커질 때, MongoDB는 샤딩(sharding) 을 사용하여 수평적으로 확장할 수 있습니다. 샤딩은 하나의 큰 컬렉션을 여러 서버(샤드)에 자동으로 분산시킵니다. 애플리케이션은 여전히 단일 라우터와 통신하며, MongoDB가 쿼리를 올바른 샤드로 라우팅하는 것을 처리합니다. 이를 통해 거의 무한한 확장성을 확보할 수 있습니다.

4. 고가용성 (레플리카 셋) ⛓️

데이터베이스가 항상 사용 가능하도록 보장하기 위해 MongoDB는 레플리카 셋(replica sets) 을 사용합니다. 레플리카 셋은 동일한 데이터 세트를 유지하는 서버 그룹입니다.

5. 인덱싱

쿼리 성능을 향상시키기 위해 MongoDB는 내장된 도큐먼트 및 배열 내 필드를 포함하여 도큐먼트의 모든 필드에 인덱스를 생성할 수 있도록 지원합니다. 적절한 인덱싱은 모든 데이터베이스에서 성능에 매우 중요하며, MongoDB도 예외는 아닙니다.


언제 MongoDB를 사용해야 하는가 (그리고 언제 피해야 하는가)

좋은 사용 사례:

대안을 고려해야 할 때:

references