MongoDB란 무엇인가요? 전문가를 위한 가이드

Jeffrey Erickson | Senior Writer | 2024년 10월 30일

MongoDB는 2007년, 그 이름의 유래가 된 방대한(humongous) 소규모 거래를 추적하고자 했던 광고 서비스 업계의 개발자 2명에 의해 만들어졌습니다. '10gen'으로 명명되었던 이 새로운 데이터베이스는 JSON 형식 파일로 구성된 단순한 문서 '버킷'에 데이터를 저장했으며 매우 빠르게 확장할 수 있었습니다. 광고 노출 횟수를 집계하는 단순한 용도로 개발되었기에 데이터 모델이나 엄격한 트랜잭션 동시성 관리가 크게 필요하지 않았고 위험 부담도 적었습니다.

그러나 MongoDB는 개발자들이 갈망하던 단순성을 제공하는 데이터베이스였습니다. 2009년 오픈 소스 개발 모델로 출시된 후, 2018년 SSPL(Server Side Public License)로 전환되었으며, Expedia, Lyft, eBay 등 수많은 기업을 고객으로 확보하며 많은 오픈 소스 개발 스택의 표준 데이터 저장소로 발전했습니다. 무엇이 MongoDB를 그렇게 각광받게 만들었는지 살펴보겠습니다.

MongoDB란 무엇인가요?

MongoDB는 현대적인 웹 및 모바일 애플리케이션에 널리 사용되는 오픈소스 문서 데이터베이스입니다. 전통적인 테이블 기반 관계형 방식 대신 유연한 문서 중심 접근 방식으로 데이터를 저장하는 NoSQL 데이터베이스로 분류됩니다. MongoDB의 매력은 단순성과 개발자 중심 설계입니다. 예를 들어, Mongo 상호작용은 생성(create), 읽기(read), 업데이트(update), 삭제(delete)를 의미하는 CRUD라는 약어로 정의됩니다.

MongoDB는 데이터를 JSON 문서 형태로 저장하여 정형, 비정형, 반정형 등의 모든 데이터를 다양한 애플리케이션에 비교적 쉽게 활용할 수 있도록 만들어 줍니다. MongoDB의 유연한 데이터 모델은 개발자가 비정형 데이터를 저장할 수 있도록 지원하고 빠른 파일 액세스를 위한 인덱싱 지원과 데이터 보호 및 가용성을 위한 복제 기능을 제공합니다. 따라서 개발자는 MongoDB를 활용해 정교한 애플리케이션을 설계하고 구축할 수 있습니다.

MongoDB는 수천 개의 광고 게재 사이트에서의 광고 노출 수를 추적하기 위해 개발되었지만 오픈소스 웹 개발 환경에서 유연한 데이터 저장소로서 빠르게 인기를 얻게 되었습니다. 2007년 첫 출시 이후 지속적으로 발전하며 임시 쿼리, 인덱싱, 실시간 집계 등의 강력한 기능 세트를 구축해 왔습니다. 개발자에게 어필하는 MongoDB의 주요 이점은 대부분의 인기 관계형 데이터베이스에 비해 직관적으로 사용 가능하고 빠르게 시작할 수 있다는 점입니다. MongoDB에 저장되는 JSON 문서 유형은 JavaScript 또는 Python 사전 등 인기 프로그래밍 언어에서 사용되는 익숙한 데이터 유형과 매핑됩니다. 또한 MongoDB는 PHP, .Net, Java, Python, Node.js 등 대부분의 프로그래밍 언어를 위한 드라이버 지원을 포함한 포괄적인 클라이언트 라이브러리 메뉴를 제공합니다.

다른 모든 기술 도구와 마찬가지로 MongoDB도 특정 영역에서는 강점을, 다른 영역에서는 약점을 보입니다. MongoDB가 설계된 목적인 온라인 광고 추적은 빠른 동시 액세스 성능을 요구했지만 그에 비해 트랜잭션 정확도 요구 사항은 엄격하지 않았고, 실시간 분석 성능은 거의 요구하지 않았습니다. 오늘날에도 MongoDB는 가용성(availability), 확장성(scalability), 결과적 일관성(eventual consistency)을 의미하는 BASE 원칙을 기반으로 개발되고 있습니다. 따라서 MongoDB는 일반적으로 고가용성과 확장성이 주요 설계 고려사항인 시나리오에서 사용됩니다. 반면 재무 운영이나 미션 크리티컬 기업 환경 등과 관련된 작업에는 일반적으로 관계형 데이터베이스가 사용됩니다. 관계형 데이터베이스는 데이터베이스 작업의 신뢰성과 일관성을 보장하는 ACID 트랜잭션(원자성, 일관성, 격리성, 내구성)을 제공합니다. 그러나 오늘날의 기술 업체들은 개발자들을 위해 JSON의 개발 편의성과 SQL의 장점을 모두 갖춘 솔루션을 제공하고 있습니다.

MongoDB 작동 방식 다이어그램, 아래 설명:
MongoDB의 작동 방식

데이터는 애플리케이션에서 MongoDB 데이터베이스로 어떻게 이동하나요?

  • 다양한 프로그래밍 언어로 작성된 클라이언트 애플리케이션들이 MongoDB 데이터베이스와 상호작용합니다.
    1. 드라이버는 애플리케이션이 MongoDB와 통신할 수 있도록 만들어 주는 언어별 라이브러리입니다.
    2. MongoDB 데이터베이스 서버는 데이터가 저장되고 관리되는 위치입니다. 단일 클러스터, 복제 클러스터, 또는 샤딩된 클러스터일 수 있습니다.
    3. 데이터 파일은 MongoDB 데이터베이스 내에 실제 문서를 보관합니다.
    4. 청크 스토리지 시스템은 파일을 고정된 크기의 섹션으로 분할하여 저장하는 곳입니다.
    이 다이어그램은 애플리케이션과 MongoDB 데이터베이스 간의 기본 데이터 흐름을 보여줍니다.

    MongoDB 환경

    MongoDB는 소기업, 중견기업, 대기업용 프로젝트를 진행하는 개발자들의 요구에 두루 부응할 수 있는 다양한 수준의 구성과 서비스를 제공합니다.

    • MongoDB Atlas는 다양한 클라우드 공급업체 전반에 데이터베이스를 배포하고 관리하기 위한 MongoDB의 서비스형 데이터베이스(DBaaS) 제품입니다. Atlas는 확장 및 백업과 같은 다양한 관리 작업을 자동화합니다.
    • MongoDB Community는 NoSQL 솔루션이 필요한 중소 규모의 프로젝트에 적합하도록 맞춤화된 오픈소스 버전입니다. 오픈소스이므로 수정 및 혁신에 적합하며 개발자들이 필요한 지원을 받을 수 있는 강력한 커뮤니티를 제공합니다. 그러나 커뮤니티 버전은 공식 지원 및 서비스 수준 계약(SLA)이 부족하고, 보안 옵션이 적으며, 제한된 관리 도구만을 제공합니다.
    • MongoDB Enterprise Advanced는 MongoDB 커뮤니티의 프리미엄 상용 버전입니다. 향상된 보안 옵션과 엔터프라이즈급 사용 사례를 지원하는 인메모리 스토리지 엔진을 제공합니다.

    핵심 요점

    • MongoDB는 정형, 반정형, 비정형 데이터 저장에 널리 사용되는 NoSQL 데이터베이스입니다.
    • MongoDB는 기존 관계형 데이터베이스의 테이블 대신 컬렉션으로 구성된 JSON 문서에 데이터를 저장합니다.
    • MongoDB는 경직된 스키마를 요구하지 않으므로 애플리케이션 기능의 변화에 맞춰 함께 변화할 수 있는 유연한 데이터 모델을 지원합니다.
    • MongoDB는 원래 광고 서비스 산업에서 빠른 저장 및 검색을 위해 설계되었으며 트랜잭션 일관성이나 신속한 데이터 분석은 초기 개발 과정에서 거의 고려되지 않았습니다. 이후 추가된 샤딩과 같은 새로운 기술들이 MongoDB의 기능을 확장해 주었습니다.
    • MongoDB는 기존 관계형 데이터베이스와는 다른 강점을 제공하므로 개발자들은 두 접근 방식의 장점을 모두 활용할 수 있는 방법을 찾곤 합니다.

    MongoDB 알아보기

    MongoDB는 문서 지향 데이터 모델을 사용하는 NoSQL 데이터베이스입니다. 각 레코드는 MySQL과 같은 일반적인 관계형 데이터베이스에서 흔히 볼 수 있는 행과 열 대신 컬렉션에 저장된 문서입니다.

    MongoDB는 BSON(바이너리 JSON)이라는 형식으로 JSON 문서를 저장합니다. MongoDB는 문서의 비관계형 특성을 활용해 정형 애플리케이션 데이터는 물론 반정형 및 비정형 데이터도 저장하고 처리할 수 있습니다. 관계형 데이터베이스와 달리 MongoDB는 경직된 스키마를 사용하지 않습니다. 그 대신 사용하는 문서는 유연하며 배열과 중첩된 문서를 포함할 수 있으므로 복잡하고 계층적인 데이터 저장이 가능합니다.

    MongoDB와 같은 문서 데이터베이스는 매우 큰 데이터 세트를 처리할 때 샤딩(sharding)이라는 기술을 사용하여 데이터를 여러 노드나 클러스터에 분산합니다. 이는 빠른 저장 및 검색을 가능하게 하는 모델입니다. 이러한 아키텍처는 광고 서비스를 위해 만들어진 MongoDB에게 합리적인 선택이었습니다. 광고 서비스 분야에서는 수천 개의 웹사이트에서 수백만 개의 광고가 언제든지 호출될 수 있기 때문입니다. 광고 간 비교 분석이 본질적으로 필요하지 않았기 때문에 데이터를 물리적으로 분산 및 분리할 수 있었습니다.

    계층적 문서 데이터베이스는 읽기 작업에 매우 빠르지만, 시스템이 모든 중첩된 엔티티의 데이터를 분석해야 하기 때문에 데이터 분석은 느릴 수 있습니다. 반면 관계형 데이터베이스는 데이터를 별도의 테이블에 저장하며 단일 '객체'가 데이터베이스 내 여러 테이블에서 참조될 수 있으므로 대규모 환경에서 더 효율적인 분석 작업이 가능합니다. 일반적으로 개발팀은 이러한 상이한 강점을 모두 고려해 애플리케이션의 현재 요구사항에 가장 적합한 데이터 관리 시스템을 선택합니다. 또는 관계형 및 JSON 문서 데이터를 비롯한 다양한 데이터 유형에 대한 완전한 SQL 액세스를 제공하는 멀티모달 데이터베이스를 선택할 수도 있습니다.

    ACID vs. BASE

    어느 쪽을 선택할지는 애플리케이션의 요구 사항에 따라 달라집니다.

    ACID(원자성, 일관성, 격리성, 내구성) BASE(기본 가용성, 소프트 상태, 결과적 일관성)

    원자성: 전체 트랜잭션이 단일 단위로 처리되도록 보장합니다. 모든 변경 사항은 함께 성공하거나, 함께 실패합니다. 이는 데이터의 불일치 상태를 남길 수 있는 부분적 업데이트를 방지하는 방식입니다.

    일관성: 트랜잭션 후 데이터베이스가 유효한 상태에서 다른 유효한 상태로 전환되도록 보장합니다. 비즈니스 규칙과 데이터 무결성을 적용합니다.

    격리: 동시 트랜잭션이 서로 간섭하지 않도록 보장합니다. 여러 트랜잭션이 동시에 발생하더라도 각 트랜잭션은 분리된 상태로 실행되는 것처럼 보입니다.

    내구성: 트랜잭션이 커밋되면 변경 사항이 영구 저장소에 기록되어 충돌과 같은 시스템 장애의 영향을 받지 않습니다.

    기본 가용성: 데이터 가용성 극대화에 집중합니다. 시스템은 부분적 장애 발생 시에도 가동 상태를 유지하도록 노력하므로 대부분의 읽기 및 쓰기 작업이 계속해서 진행될 수 있습니다.

    소프트 상태: 쓰기 작업 후 데이터 일관성이 즉시 보장되지 않습니다. 변경 사항이 모든 복제본에 반영되기까지 약간의 지연이 발생해 일시적인 불일치로 이어질 수 있습니다.

    결과적 일관성: 복제본 간 변경 사항을 동기화하는 백그라운드 프로세스를 지속적으로 수행해 시간이 지나면 결과적인 일관성이 확보됩니다.

    장점:

    높은 데이터 무결성과 강력한 일관성을 제공하는 ACID는 금융 거래와 같이 정확성이 요구되는 애플리케이션에 이상적입니다.

    장점:

    높은 가용성과 확장성을 제공하는 BASE는 높은 업타임과 응답성이 필요한 애플리케이션, 특히 분산 시스템에 이상적입니다. 일관성 요구사항이 완화되어 더 빠른 쓰기 속도와 향상된 확장성을 제공합니다.

    단점:

    성능적인 부담을 야기하는 ACID 보장을 지속적으로 유지하면 쓰기 속도 저하로 이어질 수 있습니다. 엄격한 일관성 요구사항은 확장성이 매우 높은 환경에서의 관리를 어렵게 만들 수 있습니다.

    단점:

    데이터 동기화 과정에서 일시적인 불일치가 발생할 수 있는 BASE는 엄격한 데이터 무결성과 즉각적인 일관성이 중요한 애플리케이션에는 적합하지 않습니다.

    MongoDB의 작동 방식은 무엇인가요?

    MongoDB는 데이터를 컬렉션에 저장합니다. 컬렉션은 관계형 데이터베이스의 테이블과 유사합니다. 각 컬렉션에는 구조가 서로 다를 수 있는 여러 문서가 포함됩니다. 문서 파일은 자기 기술적입니다. 즉, 각 문서에 문서 내 각 필드를 설명하는 메타데이터가 포함되어 있으므로 시스템에 문서 구조를 선언할 필요가 없습니다.

    MongoDB는 성능 향상을 위해 문서의 모든 필드에 대한 인덱싱을 지원합니다. 인덱스는 쿼리의 효율적인 실행을 지원하며, 기본 인덱스와 보조 인덱스를 포함할 수 있습니다. MongoDB의 쿼리 언어는 CRUD(생성, 읽기, 업데이트, 삭제) 작업을 지원하며 복잡한 집계, 텍스트 검색, 지리 공간 쿼리 등을 수행할 수 있습니다. 응답 시간 개선을 위한 집계 프레임워크를 제공하므로 개발자가 서버 측에서 복잡한 데이터 처리를 설정할 수 있습니다. 이는 데이터를 다른 플랫폼(Apache Spark, Hadoop 등)으로 이동하지 않고도 데이터가 저장된 클러스터 내에서 분석을 수행할 수 있음을 의미합니다. 결과적으로 클라이언트와 주고받는 데이터 전송량을 줄일 수 있습니다.

    MongoDB는 복제 데이터 세트를 지원하여 고가용성을 제공하고 성능을 향상시킵니다. 복제본은 모든 인스턴스에 읽기 및 쓰기 작업을 분산시킴으로써 로드 밸런싱에 활용될 수 있습니다. 또한 복제본 세트는 서로 다른 데이터베이스 서버에 데이터의 동일한 사본을 여럿 저장함으로써 중복성을 제공하고 데이터 가용성을 높입니다. MongoDB는 하드웨어 장애나 유지보수 시 복제본 세트를 활용해 자동 페일오버 및 데이터 중복성을 지원합니다.

    확장성 측면에서 MongoDB는 샤딩을 통한 수평적 확장성을 지원합니다. 이는 여러 머신의 여러 데이터베이스에 데이터를 분산하는 방식입니다. 샤딩된 클러스터는 여러 복제본 세트로 구성될 수 있습니다. 샤딩은 데이터가 샤드 간에 어떻게 분산되는지를 결정하는 샤드 키를 정의하는 방식으로 구성됩니다. 샤딩 기술은 데이터 세트와 부하를 여러 서버에 분산함으로써 대규모 데이터 세트와 높은 처리량 작업을 관리하는 데 도움을 줍니다.


    샤딩의 작동 방식

    각 샤드는 샤딩된 데이터베이스의 데이터 하위 집합을 호스팅하는 독립적인 데이터베이스 인스턴스입니다.

    샤딩의 작동 방식 다이어그램
    이 다이어그램은 상단의 클라이언트 애플리케이션에서 하단의 데이터베이스 샤드로의 단방향 흐름을 나타냅니다.

    MongoDB vs. RDBMS

    MySQL, Postgres, Oracle Database와 같은 관계형 데이터베이스와 CouchDB, DynamoDB, MongoDB와 같은 문서 중심 데이터베이스에는 각각의 장단점이 있으며, 개중 어느 쪽을 선택할지는 일반적으로 개발 중인 애플리케이션의 고유한 요구 사항과 제약 조건에 따라 정해집니다.

    관계형 데이터베이스 관리 시스템(RDBMS)은 Structured Query Language(SQL)를 사용하는 반면, MongoDB의 문서 중심 형식은 문서 저장소 API를 사용합니다. 그러나 MongoDB Query Language(MQL)는 문서 생성, 읽기, 업데이트, 삭제 등의 작업을 수행하는 JavaScript와 유사한 언어를 사용합니다.

    MongoDB에는 테이블과 행의 개념이 없으며 스키마가 없으므로 데이터베이스 사용 전 정의해야 할 구조가 적습니다. 그러나 중앙 스키마가 없으므로 컬렉션에 액세스하는 각 애플리케이션이 문서를 이해해야 합니다. 따라서 '스키마'는 데이터베이스에 정의되지 않고 애플리케이션 코드 내에 존재합니다. 한 앱이 스키마를 변경하면 다른 앱이 손상될 수 있습니다. 관계형 데이터베이스(RDBMS)의 경우 스키마가 RDBMS의 설계도 역할을 수행하고 데이터 조직과 상호 관계가 명시적으로 정의되는 반면, MongoDB는 데이터 간 관계라는 개념이 본질적으로 결여되어 있습니다.

    MongoDB는 키-값 저장소, 그래프, 문서 등 다양한 데이터 형식을 사용하며 데이터 구조가 시간에 따라 변경될 수 있으므로 데이터 저장소의 유연성이 두드러집니다. 이는 데이터 무결성을 보장하기 위해 엄격한 정의, 계층 구조 및 이를 기반으로 한 검증 절차를 사용하는 RDBMS와는 다릅니다.

    기본적인 MongoDB 인스턴스 설정은 간단하지만, 샤딩과 복제본을 포함한 대규모 분산 MongoDB 클러스터를 구성하고 유지 관리하는 것은 복잡할 수 있으며, 아키텍처와 구성 옵션을 잘 이해해야 합니다.


    주된 차이점

    관계형 MongoDB
    데이터 모델 고정된 행 및 열이 있는 테이블을 사용하며 데이터는 미리 정의된 스키마로 구조화됩니다. 동적 스키마를 사용하는 JSON과 유사한 구조인 문서 모음을 사용합니다.
    스키마 유연성 데이터를 추가하기 위해서는 사전 설정이 필수적인 스키마가 필요합니다. 동적 스키마를 가집니다. 컬렉션 내 다른 문서에 영향을 주지 않고 문서에 새 필드를 추가할 수 있습니다.
    쿼리 언어 복잡한 쿼리에 큰 강점을 보이는 SQL을 사용해 데이터를 정의 및 조작합니다. SQL보다 직관적이지만 완전성 및 다재다능함은 떨어지는 문서 기반 쿼리 언어를 사용합니다.
    확장성 기존 시스템에 추가 자원을 투입해야 하는 수직 확장 방식을 주로 사용하나, 샤딩 및 Oracle Real Application Clusters와 같은 발전된 기능을 활용한 수평 확장도 지원합니다. 샤딩을 통해 여러 머신 클러스터에 데이터를 분산하는 수평 확장 방식으로 설계되었습니다.
    트랜잭션 다중 행 트랜잭션을 지원하며 ACID 준수를 통해 데이터 손실이나 손상을 용납하지 않는 애플리케이션에 적합합니다. 다중 문서 트랜잭션을 지원하지만 대부분의 기존 관계형 데이터베이스보다 성능이 떨어진다는 평가를 받습니다. 분산 데이터 환경에서 특히 그렇습니다.
    성능 정확한 트랜잭션을 보장하도록 설계되었지만 대용량 데이터의 경우 성능이 저하될 수 있습니다. 그러나 일반적으로 더 나은 분석 성능을 보입니다. 대용량 데이터에 대한 높은 읽기 성능을 제공하기 위해 설계되었습니다.

    MongoDB를 사용하는 이유는 무엇인가요?

    MongoDB는 블로그나 메모 앱과 같은 간단한 CRUD 애플리케이션부터 Amazon Prime과 같은 복잡한 플랫폼에 이르는 다양한 용도로 사용할 수 있습니다. 콘텐츠 관리 시스템(CMS), 빠른 데이터 동기화가 요구되는 게임 앱, 생체 인식 의료 데이터 등의 수많은 사용 사례에 MongoDB가 선택되고 있습니다. 이러한 다용도성에 힘입어 MongoDB는 MEANMERN과 같은 인기 있는 오픈소스 개발 스택의 핵심 요소로 자리매김했습니다.

    다음과 같은 요소가 필요할 때 MongoDB를 선택해 보세요.

    • 유연성. MongoDB의 JSON 문서 형식은 계층적 데이터 구조를 표현하는 간단하고 직관적인 방법을 제공해 SQL 쿼리를 통한 복잡한 조인을 대체할 수 있습니다.
    • 가용성. MongoDB의 분산 데이터베이스 기능은 자주 변경되는 대규모 데이터 세트에도 높은 가용성을 제공합니다.
    • 확장성. MongoDB 빠르게 변화하는 대규모의 다양한 데이터 세트를 수집, 처리, 분석할 수 있도록 설계되었습니다.
    • 성능. 복제, 샤딩 등의 방법을 통해 성능을 최적화할 수 있는 MongoDB는 미디어 및 엔터테인먼트 등의 분야에서 사용되는 대규모 애플리케이션에 적합한 선택입니다.
    • 호환성. MongoDB의 JSON 형식 문서는 널리 사용되는 프로그래밍 언어에서 흔히 볼 수 있는 데이터 유형들과 쉽게 호환됩니다. 또한 MongoDB 클라이언트 라이브러리는 PHP, .Net, JavaScript 등 대부분의 프로그래밍 언어용 드라이버를 제공합니다.
    • 커뮤니티 지원. MongoDB는 많은 오픈소스 개발 스택에서 사실상 표준 데이터 저장소로 자리잡았으며 그만큼 풍부한 커뮤니티 지원을 제공합니다.

    MongoDB의 기능

    MongoDB 직관적인 API, 유연한 데이터 모델 및 다음과 같은 기능들을 통해 개발자들로부터 인기를 얻고 있습니다.

    • 임시 쿼리. MongoDB는 필드, 범위, 정규 표현식 쿼리를 지원하며, 전체 문서, 문서의 특정 필드, 결과의 랜덤 샘플 등을 반환할 수 있습니다.
    • 인덱싱. MongoDB는 단일 필드, 복합(다중 필드), 멀티키(배열), 지리공간, 텍스트, 해시 등의 다양한 인덱스 유형을 지원합니다.
    • 복제. MongoDB는 두 개 이상의 데이터 복사본이 포함된 복제 세트를 통해 고가용성을 제공합니다. 쓰기 작업은 주 복제본에서 처리되며, 읽기 요청은 모든 복제본이 처리할 수 있습니다. 주 복제본에 장애가 발생하면 보조 복제본이 주 복제본으로 승격됩니다.
    • 확장성. MongoDB 데이터베이스의 확장성은 각 클러스터가 컬렉션 내 데이터의 일부만 저장하는 샤딩을 통해 향상됩니다. 데이터의 분배는 샤딩 키가 결정합니다.
    • 로드 밸런싱. MongoDB는 수직 및 수평으로 확장할 수 있으며, 샤딩된 클러스터를 기반으로 데이터베이스의 기본 구조를 활용해 로드 밸런싱을 처리할 수 있습니다. 복제본을 활용하여 주 서버의 부하를 줄일 수 있습니다.
    • 파일 저장. 대부분의 프로그래밍 언어 객체와 간단히 매핑할 수 있는 문서 형태로 데이터를 저장해 애플리케이션 내에서의 간편한 액세스를 제공합니다.
    • 배치 처리. 여러 가지 방법으로 데이터 처리를 수행할 수 있습니다. 문서 자체에서 처리하기도 하고, 네트워크 작업을 줄일 수 있는 대량 쓰기 방법으로 처리하기도 합니다.

    MongoDB의 장점

    MongoDB는 보다 직관적이고 확장 가능한 애플리케이션 개발 및 유지보수를 지원하는 다양한 방식을 제공함으로써 오픈소스 커뮤니티에서 인기를 얻고 있습니다. MongoDB의 장점은 다음과 같습니다.

    • 개발자 사용 편의성. 개발자들은 클라우드에서 간단히 다운로드하거나 액세스해 빠르게 시작할 수 있다는 이유로 MongoDB를 선택하는 경우가 많습니다. 데이터 모델을 직접 만들고 테이블을 다루는 것보다 문서로 작업하는 것이 더 쉽다는 이유도 있습니다.
    • 효율성. JSON은 소규모 문서 파일과 사람이 읽을 수 있는 콘텐츠를 바탕으로 다양한 효율성을 제공합니다. MongoDB는 문서를 이진 형식(BSON)으로 인코딩하여 일반 텍스트에 비해 더 간결하고 빠르게 파싱할 수 있습니다.
    • 유연한 스키마. MongoDB의 문서 데이터 모델은 문서마다 다른 필드를 사용할 수 있는 유연하고 자체 설명적인 스키마를 허용합니다.
    • 간단한 쿼리 언어. MongoDB Query Language(MQL)는 개발자가 쉽게 사용할 수 있도록 설계되었으며, 복잡한 쿼리와 인덱스를 통해 자주 사용되는 쿼리의 처리를 가속화할 수 있습니다.
    • 클라우드 네이티브. MongoDB Atlas는 클라우드 네이티브 데이터베이스이므로 자주 업데이트되고 새로운 기술을 빠르게 도입합니다. 또한 애플리케이션을 클라우드로 더 쉽게 마이그레이션할 수 있습니다.

    MongoDB의 단점

    MongoDB는 대용량 데이터를 다루고 유연성과 고성능을 요하는 애플리케이션을 위한 많은 장점을 제공하지만, 여러 잠재적 단점도 존재합니다.

    • 트랜잭션 지원. MongoDB 트랜잭션 지원은 기존 관계형 데이터베이스만큼 성숙하거나 강력하지 않습니다. 특히 여러 작업을 아우르는 복잡한 트랜잭션 성능이 저하될 수 있으며 MongoDB에서 구현하기 어려울 수 있습니다.
    • 데이터 일관성. MongoDB는 복제본 세트에 '결과적 일관성' 원칙을 적용하므로 모든 사용자가 동시에 동일한 데이터를 읽지 못하는 상황이 발생할 수 있습니다. 강력한 일관성을 요구하는 애플리케이션인 경우 이는 심각한 단점이 될 수 있습니다.
    • 조인 작업. MongoDB는 SQL 데이터베이스와 같은 방식의 조인을 지원하지 않습니다. 유사한 기능을 수행하는 옵션을 제공하지만 일반적으로 효율성이 더 낮고 더 복잡한 쿼리와 성능 저하를 야기할 수 있습니다. 특히 문서 간의 복잡한 관계를 처리해야 하는 경우에 그렇습니다.
    • 메모리 사용. MongoDB는 가장 자주 사용되는 데이터와 인덱스를 램에 저장하므로 램 성능에 크게 의존합니다. 결과적으로 MongoDB 데이터베이스는 다른 데이터베이스보다 더 많은 메모리 리소스, 나아가 잠재적으로 더 많은 하드웨어를 사용해야 할 수도 있습니다.
    • 스토리지 비용. MongoDB가 사용하는 자체 포함 문서 패러다임은 관계형 데이터베이스의 고도로 정규화된 테이블에 비해 더 많은 저장 공간을 요구할 수 있습니다. 또한 MongoDB의 동적 스키마는 데이터 중복 및 파편화를 유발해 저장 공간의 사용량 및 비용을 증가시킬 수 있습니다.
    • 인덱싱 제한. MongoDB는 다양한 인덱싱 옵션을 지원하지만, 다수의 인덱스를 유지 관리하는 경우 쓰기 성능이 저하될 수 있습니다. MongoDB는 빈번한 쓰기 작업을 위해 설계되지 않았습니다. 각 쓰기 작업이 여러 인덱스를 업데이트하는 경우 쿼리 성능과 쓰기 성능이 상충되는 경우가 많습니다.
    • 비용. 고가용성과 수평적 확장성이 요구되는 시나리오에서는, 특히 클라우드 환경에서는 MongoDB 클러스터 운영 및 유지 관리에 많은 비용이 발생할 수 있습니다. 대용량 램과 스토리지가 필요하다는 점 또한 비용 증가 요인이 됩니다. 특히 복제본 데이터베이스가 동일한 수의 리소스를 필요로 하는 고가용성 상황에서 더욱 그렇습니다.

    MongoDB 호환성

    MongoDB는 해당 생태계 내에서 가장 잘 작동하는 NoSQL 데이터베이스지만 다양한 데이터 통합 도구 및 커넥터를 통해 다른 유형의 데이터베이스 관리 시스템들과도 상호작용할 수 있도록 설계되었습니다. 관련 도구 세트에는 MongoDB 외부로 데이터를 추출 및 마이그레이션하고 그 반대의 작업을 수행하기 위한 ETL(추출, 변환, 로드) 인프라가 포함되어 있습니다. 이는 보고 및 복잡한 데이터 분석을 위해 데이터를 관계형 데이터베이스로 전송하는 데 유용합니다. MongoDB 애플리케이션은 REST API를 사용해 서로 다른 데이터베이스 플랫폼 간의 통신을 지원합니다.

    Oracle Autonomous Database에서 MongoDB 워크로드 실행하기

    MongoDB 호환성의 좋은 예는 개발자가 Oracle Autonomous JSON Database에 연결된 MongoDB의 오픈 소스 도구 및 드라이버를 사용할 수 있는 Oracle Database API for MongoDB입니다. 개발자는 해당 API를 통해 Oracle의 다중 모델 기능에 액세스할 수 있으며, 데이터를 별도의 데이터베이스로 이동하지 않고 분석, 머신러닝(ML), 공간 분석 등의 작업을 바로 수행할 수 있습니다. Autonomous JSON Database는 MongoDB Atlas의 멀티모달 대안이 될 수 있습니다. 기존 애플리케이션의 변경은 거의 또는 전혀 필요하지 않은 경우가 많습니다.

    MongoDB 워크로드를 Autonomous JSON Database로 마이그레이션하기

    개발자는 API를 통해 MongoDB 기능에 액세스하는 대신 기존 JSON 중심 워크로드를 마이그레이션하기로 선택하고 Oracle Cloud Infrastructure(OCI)상의 Oracle Autonomous JSON Database로 간단히 이전할 수 있습니다. Oracle로의 마이그레이션을 통해 JSON 중심 애플리케이션을 위한 클라우드 문서 데이터베이스 서비스를 사용할 수 있습니다. Oracle의 서비스는 NoSQL 스타일 문서 API[Simple Oracle Document Access(SODA) 및 Oracle Database API for MongoDB], 서버리스 확장, 고성능 ACID 트랜잭션, 포괄적인 보안, 저렴한 종량제 가격 정책 등을 제공합니다. MongoDB에서 Oracle Autonomous JSON Database로의 마이그레이션은 Oracle Cloud Infrastructure(OCI) GoldenGate를 통해 이루어지며 다운타임은 발생하지 않습니다.

    Autonomous Database 시작하기

    MongoDB 사용자는 이제 더 다양한 방식으로 JSON 중심 애플리케이션을 구축할 수 있습니다. Oracle Autonomous Database는 개발자들이 하나의 데이터베이스에서 SQL, JSON 문서, 그래프, 지리 공간, 텍스트, 벡터 등의 다양한 형식을 사용해 새로운 기능을 신속하게 구축할 수 있도록 지원하는 단일 데이터 플랫폼을 통해 비즈니스 요구에 대응할 수 있는 유연성을 제공합니다.

    또한 Oracle Database의 혁신적인 신기능인 JSON Relational Duality는 관계형 테이블과 JSON 문서의 장점을 모두 제공하면서도 두 모델의 단점은 없애 줍니다.

    Autonomous Database는 텍스트 및 이미지 분석, 음성 인식, 개인화된 추천 기능 등으로 기존 애플리케이션을 강화할 수 있는 통합 AI 서비스와 인데이터베이스 머신러닝(ML)을 제공합니다. Autonomous Database Select AI가 자연어를 데이터베이스 쿼리로 자동 변환해 주므로 사용자는 커스텀 코딩이나 복잡한 인터페이스를 통한 수작업 없이도 데이터베이스와 맥락에 부합하는 '대화'를 나눌 수 있습니다. 데이터베이스가 완전히 자율운영되며 자동화된 보안 조치 적용 및 지속적인 모니터링을 통해 업타임을 보장하고 데이터를 보호해 주므로 개발팀은 애플리케이션 개발에만 집중할 수 있습니다.

    지금 바로 무료로 시작해 보세요. 워크숍을 통해 SQL, JSON, Oracle Graph를 동일한 애플리케이션에서 사용하는 방법도 배울 수 있습니다.

    MongoDB는 전자상거래 플랫폼, IoT 애플리케이션 등의 다양한 사용 사례를 통해 산업 전반에 걸친 다재다능함을 입증했습니다. 다양한 데이터 유형을 처리하고 복잡한 쿼리를 지원하는 MongoDB는 현대 기술 스택의 핵심 구성 요소로 확고히 자리잡았습니다. MongoDB는 데이터로부터 가능한 한 많은 가치를 창출하고자 하는 기업들을 위한 핵심적인 역할을 수행할 것입니다.

    개발자들 및 동료들 모두 민첩성, 확장성, 효율성을 극대화하도록 특별히 설계된 클라우드 네이티브 애플리케이션의 혜택을 누릴 수 있습니다. AI 개발에 대한 자세한 정보를 살펴보고 클라우드를 더욱 발전시킬 수 있는 10가지 방법을 함께 확인해 보세요.

    MongoDB FAQ

    SQL과 MongoDB의 차이점은 무엇인가요?

    MongoDB는 비정형 데이터를 저장하며, Structured Query Language(SQL)에 적합하지 않습니다.

    MongoDB는 백엔드 언어인가요?

    아니요. 하지만 백엔드 웹 애플리케이션의 일부로 사용할 수 있습니다.

    MongoDB는 언어 또는 프레임워크인가요?

    MongoDB는 테이블 대신 문서에 저장된 비정형 데이터를 사용하는 데이터베이스 관리 시스템입니다.