Jeffrey Erickson | Senior Writer | 2024년 10월 30일
MongoDB은 2007년에 광고 서비스 비즈니스에서 소규모 거래를 추적하고자 하는 몇 명의 개발자에 의해 만들어졌습니다. 처음에는 10gen로 불린 새 데이터베이스는 JSON 유형 파일의 간단한 문서 "버킷"에 데이터를 보관했으며 매우 빠르게 확장할 수 있었습니다. 데이터 모델이나 엄격한 트랜잭션 동시 처리 기능이 필요하지 않았습니다. 왜냐하면 단순히 광고 노출 횟수를 계산하는 것이었고, 위험도가 낮았기 때문입니다.
그러나 MongoDB는 개발자가 원하는 종류의 데이터베이스 단순성을 제공했습니다. 이 시스템은 2009년에 오픈 소스 개발 모델로 출시되었으며, 2018년에 SSPL(Server Side Public License)로 전환되었고, 현재는 Expedia, Lyft, eBay 등을 포함한 많은 오픈 소스 개발 스택의 사실상의 표준 데이터 저장소로 발전했습니다. 이제 이 시스템이 어떻게 작동하는지 살펴보겠습니다.
MongoDB는 최신 웹 및 모바일 애플리케이션에서 널리 사용되는 인기 있는 오픈 소스 문서 데이터베이스입니다. NoSQL 데이터베이스로 분류됩니다. 즉, 기존의 테이블 기반 관계형 방식이 아닌 유연하고 문서 지향적인 데이터 저장 방식이 필요합니다. MongoDB의 매력의 큰 부분은 단순성과 개발자 중심입니다. 예를 들어, Mongo 상호 작용은 생성, 읽기, 업데이트, 삭제를 뜻하는 CRUD라는 약자로 정의됩니다.
MongoDB는 JSON 문서에 데이터를 저장하여 다양한 종류의 애플리케이션에 대해 저장된 데이터(정형, 비정형 또는 반정형)를 비교적 쉽게 사용할 수 있도록 합니다. MongoDB의 유연한 데이터 모델을 통해 개발자는 비정형 데이터를 저장하는 동시에 데이터 보호 및 가용성을 위해 더 빠른 파일 액세스 및 복제를 위한 인덱싱 지원을 제공할 수 있습니다. 즉, 개발자는 MongoDB를 사용하여 정교한 애플리케이션을 설계하고 구축할 수 있습니다.
MongoDB는 수천 개의 광고 서비스 사이트에서 노출을 추적하기 위해 개발되었지만 곧 오픈 소스 웹 개발에서 유연한 데이터 저장소로 널리 인기를 얻었습니다. 2007년 출시 이후 지속적으로 발전해 왔으며 임시 쿼리, 인덱싱 및 실시간 집계를 포함하는 강력한 기능 세트를 축적했습니다. 개발자를 위한 MongoDB의 주요 이점은 가장 인기 있는 관계형 데이터베이스에 비해 사용하기 직관적이며 빠르게 시작할 수 있다는 것입니다. MongoDB에 저장된 JSON 문서의 유형은 JavaScript 또는 Python 사전과 같이 널리 사용되는 프로그래밍 언어에서 찾을 수 있는 친숙한 데이터 유형에 매핑됩니다. Mongo는 또한 PHP, .Net, Java, Python, Node.js 등 대부분의 프로그래밍 언어에 대한 드라이버 지원과 함께 클라이언트 라이브러리의 철저한 메뉴를 제공합니다.
모든 기술 도구와 마찬가지로 MongoDB는 일부 영역에서는 강하고 다른 영역에서는 약합니다. 그것은 빠른 동시 액세스가 필요하지만 느슨한 거래 정확도와 거의 실시간 분석이 필요한 온라인 광고를 추적하도록 설계되었습니다. 오늘날에도 MongoDB는 가용성, 확장성 및 최종 일관성을 보장하는 BASE 원칙에 따라 구성됩니다. 따라서 MongoDB는 일반적으로 고가용성 및 확장성이 주요 설계 고려 사항인 시나리오에서 사용됩니다. 반면, 재무 운영과 같은 작업이나 미션 크리티컬 엔터프라이즈 환경의 경우 개발자는 일반적으로 관계형 데이터베이스를 선택합니다. 관계형 데이터베이스는 ACID 트랜잭션(원자성, 일관성, 격리 및 내구성)을 제공하여 데이터베이스 작업의 안정성과 일관성을 보장합니다. 최근에는 기술 산업이 JSON의 개발 편의성과 SQL의 장점을 결합해 개발자들에게 두 마리 토끼를 한 번에 잡을 수 있는 솔루션을 제공하고 있습니다.
데이터는 애플리케이션에서 MongoDB 데이터베이스로 어떻게 이동하나요?
MongoDB 소규모, 중견 기업, 심지어 대규모 엔터프라이즈 프로젝트에서 작업하는 개발자의 요구에 맞게 다양한 구성과 서비스 수준을 제공합니다.
핵심 요점
MongoDB는 문서 지향 데이터 모델을 사용하는 NoSQL 데이터베이스로, 각 레코드는 MySQL와 같이 널리 사용되는 관계형 데이터베이스에 공통되는 행과 열 대신 컬렉션에 저장된 문서입니다.
MongoDB는 BSON 또는 바이너리 JSON이라는 형식을 사용하여 JSON 문서를 저장합니다. 이러한 문서의 비관계형 특성은 정형 애플리케이션 데이터뿐만 아니라 반정형 및 비정형 데이터를 저장할 수 있고 데이터베이스가 처리할 수 있음을 의미합니다. 관계형 데이터베이스와 달리 MongoDB는 경직된 스키마를 사용하지 않습니다. 대신 문서는 유연하며 배열과 중첩된 문서를 포함할 수 있으므로 복잡하고 계층적인 데이터 저장이 가능합니다.
매우 큰 데이터 세트를 처리할 때는 MongoDB와 같은 데이터베이스를 문서화하여 샤딩이라는 기법을 사용하여 여러 노드 또는 클러스터 간에 데이터를 확장하거나 분산합니다. 이 모델은 빠른 저장 및 회수를 허용합니다. 이 아키텍처는 MongoDB가 광고 서비스를 위해 설계되었기 때문에 합리적입니다. 광고 서비스에서는 언제든지 수천 개의 웹사이트에서 수백만 개의 광고가 동시에 호출될 수 있기 때문입니다. 하나의 광고를 다른 광고에 대해 분석할 필요가 없어 데이터를 물리적으로 분산하고 분리할 수 있었습니다.
계층적 문서 데이터베이스는 읽기 작업에 매우 빠르지만 시스템이 모든 중첩 엔티티의 데이터를 분석해야 하므로 데이터 분석 속도가 느려질 수 있습니다. 반대로 관계형 데이터베이스는 데이터를 별도의 테이블에 저장하며, 데이터베이스 내의 여러 테이블에서 단일 "객체"를 참조하여 대규모 분석 작업을 보다 효율적으로 수행할 수 있습니다. 이러한 다양한 강점을 감안할 때 개발 팀은 일반적으로 애플리케이션의 현재 요구 사항에 가장 적합한 데이터 관리 시스템을 선택할 것입니다. 또는 관계형 및 JSON 문서 데이터와 다른 많은 데이터 유형에 대한 전체 SQL 액세스를 제공하는 멀티모달 데이터베이스를 선택할 수도 있습니다.
ACID vs. BASE
선택하는 항목은 애플리케이션의 요구에 따라 다릅니다.
| ACID(원자성, 일관성, 격리, 내구성) | BASE(기본적으로 사용 가능, 소프트 상태, 최종적으로 일관성 있음) |
|---|---|
|
원자성: 전체 트랜잭션이 단일 단위로 처리되도록 합니다. 모든 변경이 성공하거나, 모두 성공하지 않거나입니다. 이렇게 하면 데이터가 일관성 없는 상태로 남을 수 있는 부분적 업데이트를 방지할 수 있습니다. 일관성 : 트랜잭션 후 데이터베이스가 유효한 상태 간에 전환되도록 보장합니다. 비즈니스 규칙 및 데이터 무결성을 적용합니다. 격리: 동시 트랜잭션이 서로 간섭하지 않도록 합니다. 여러 트랜잭션이 동시에 발생하는 경우에도 각 트랜잭션은 격리된 상태로 실행됩니다. 내구성: 트랜잭션이 커밋되면 변경사항이 영구 스토리지에 기록되고 충돌과 같은 시스템 실패의 영향을 받지 않습니다. |
기본적으로 사용 가능: 데이터 가용성 극대화에 중점을 둡니다. 시스템에서는 부분 실패 시에도 작동 상태를 유지하여 대부분의 읽기 및 쓰기 작업을 계속할 수 있도록 합니다. 소프트 상태: 쓰기 작업 후 데이터 일관성이 즉시 보장되지 않습니다. 변경 사항이 모든 복제본에 반영되기 전에 약간의 지연이 발생할 수 있으므로 일시적인 불일치가 발생할 수 있습니다. 최종적 일관성 유지: 시간이 지남에 따라 여러 복제본 간에 변경 사항을 동기화하는 백그라운드 프로세스를 통해 일관성이 유지됩니다. |
|
장점: 높은 데이터 무결성과 강력한 일관성으로 인해 ACID는 재무 트랜잭션과 같은 정확성을 요구하는 애플리케이션에 이상적입니다. |
장점: BASE의 고가용성 및 확장성은 특히 분산된 시스템에서 높은 가동 시간과 응답성이 필요한 애플리케이션에 이상적입니다. 일관성 요구 사항이 완화되면 쓰기 속도가 빨라지고 확장성이 향상됩니다. |
|
단점: 성능 오버헤드는 ACID 보장을 유지 관리하면 쓰기 속도가 느려질 수 있음을 의미합니다. 확장성이 뛰어난 환경에서 엄격한 일관성 요구 사항을 관리하기가 어려울 수 있습니다. |
단점: 데이터 동기화 중에 일시적인 불일치가 발생할 수 있으므로 엄격한 데이터 무결성과 즉각적인 일관성이 중요한 응용 프로그램에는 BASE가 덜 적합합니다. |
MongoDB는 관계형 데이터베이스의 테이블과 유사한 데이터를 컬렉션으로 저장합니다. 각 컬렉션은 구조에 따라 달라질 수 있는 여러 문서를 보유합니다. 문서 자체에 설명이 포함되어 있으므로 문서 구조를 시스템에 선언할 필요가 없습니다. 즉, 각 문서에 문서 내의 각 필드를 설명하는 메타데이터가 포함됩니다.
성능을 향상시키기 위해 MongoDB는 문서의 모든 필드에 대한 인덱스화를 지원합니다. 인덱스는 쿼리의 효율적인 실행을 지원하며 기본 및 보조 인덱스를 포함할 수 있습니다. MongoDB의 쿼리 언어는 CRUD(생성, 읽기, 업데이트, 삭제) 작업을 지원하며 복잡한 집계, 텍스트 검색 및 지리 공간 쿼리를 허용합니다. 응답 시간을 개선하기 위해 MongoDB는 개발자가 서버측에서 복잡한 데이터 처리를 설정할 수 있는 집계 프레임워크를 제공합니다. 즉, Apache Spark 또는 Hadoop과 같이 데이터가 상주하는 클러스터에서 데이터를 다른 플랫폼으로 이동할 필요 없이 분석을 수행할 수 있습니다. 이를 통해 클라이언트로 전송되거나 클라이언트에서 전송되는 데이터의 양을 줄일 수 있습니다.
MongoDB는 복제본 데이터 세트를 지원하여 고가용성을 제공하고 성능을 개선하기 위해 노력하고 있습니다. 복제본은 모든 인스턴스에 읽기 및 쓰기 작업을 분산하여 로드 밸런싱에 사용할 수 있습니다. 또한 이러한 복제본 세트는 서로 다른 데이터베이스 서버에 있는 여러 데이터 복사본을 통해 중복성을 제공하고 데이터 가용성을 높입니다. 하드웨어 장애 또는 유지 관리의 경우 복제본 세트를 통해 MongoDB에서 자동 페일오버 및 데이터 중복성을 제공할 수 있습니다.
확장성을 위해 MongoDB는 샤딩을 통한 수평 확장을 지원합니다. 이는 여러 머신의 여러 데이터베이스에 데이터를 분산하는 방법입니다. 샤딩된 클러스터는 여러 복제본 세트로 구성될 수 있습니다. 샤딩은 샤드를 통해 데이터가 분산되는 방식을 결정하는 샤드 키를 정의하여 구성됩니다. 이 기술은 데이터 세트를 나누고 여러 서버에 로드하여 대용량 데이터 세트 및 처리량이 많은 작업을 관리하는 데 도움이 될 수 있습니다.
샤딩 작동 방식
각 샤드는 샤딩된 데이터베이스 데이터의 하위 집합을 호스트하는 독립 데이터베이스 인스턴스입니다.
MySQL, Postgres, Oracle Database와 같은 관계형 데이터베이스 또는 CouchDB, DynamoDB, MongoDB와 같은 문서 지향 데이터베이스의 각 유형은 강점과 약점을 가지고 있으며, 그 중 무엇을 선택할지는 일반적으로 개발 중인 애플리케이션의 특정 요구 사항 및 제약 조건에 따라 달라집니다.
관계형 데이터베이스 관리 시스템(RDBMS)은 SQL(구조적 쿼리 언어)을 사용하는 반면, MongoDB의 문서 중심 형식은 문서 저장소 API를 사용합니다. 그럼에도 불구하고 MongoDB Query Language(MQL)는 문서 생성, 읽기, 업데이트 및 삭제와 같은 작업과 함께 JavaScript와 유사한 언어를 사용합니다.
MongoDB에는 테이블과 행에 대한 개념이 없고 스키마가 없으므로 데이터베이스를 사용하기 전에 정의할 구조가 적습니다. 그러나 중앙 스키마가 없으면 컬렉션에 액세스하는 각 앱이 문서를 이해해야 합니다. 따라서 "스키마"는 애플리케이션 코드에 있고 데이터베이스에 정의되어 있지 않습니다. 한 앱이 스키마를 변경하면 다른 앱이 손상될 수 있습니다. 스키마가 기본적으로 RDBMS 및 데이터 조직을 위한 청사진이고 상호 관계가 명시적으로 정의된 관계형 데이터베이스와 비교하여 MongoDB에는 데이터 간 관계에 대한 고유의 개념이 없습니다.
MongoDB는 키-값 저장소, 그래프 및 문서와 같은 데이터에 다른 형식을 사용하고 시간이 지남에 따라 데이터 구조가 변경될 수 있으므로 데이터 저장소의 유연성은 매우 중요합니다. 이는 데이터 무결성을 보장하기 위해 엄격한 정의, 계층 및 검증 절차를 사용하는 RDBMS와 다릅니다.
기본 MongoDB 인스턴스 설정은 간단하지만 샤딩 및 복제본을 사용하여 대규모 분산 MongoDB 클러스터를 구성하고 유지 관리하는 것은 복잡할 수 있으며 아키텍처 및 구성 옵션을 잘 이해해야 합니다.
| 관계형 | MongoDB | |
|---|---|---|
| 데이터 모델 | 고정 행 및 열이 있는 테이블을 사용하며 데이터는 미리 정의된 스키마로 구조화됩니다. | 동적 스키마를 사용하는 JSON과 유사한 구조인 문서 모음을 사용합니다. |
| 스키마 유연성 | 데이터를 추가하려면 먼저 설정해야 하는 사전 정의된 스키마가 필요합니다. | 동적 스키마가 있습니다. 모음의 다른 모든 문서에 영향을 주지 않고 문서에 새 필드를 추가할 수 있습니다. |
| 쿼리 언어 | 복잡한 쿼리에 매우 강력한 기능을 제공하는 SQL을 데이터의 정의 및 조작에 활용합니다. | SQL보다 직관적이지만 덜 완전하고 유연한 문서 기반 쿼리 언어를 사용합니다. |
| 확장 | 기존에는 수직으로 확장되므로 기존 시스템에 더 많은 전력 사용량이 추가되었지만, 샤딩 및 Oracle Real Application Clusters와 같은 보다 성숙한 기능은 수평 확장 지원을 제공합니다. | 샤딩을 사용하여 여러 머신에 걸쳐 수평적으로 확장되도록 설계되어 머신 클러스터에 데이터를 분산합니다. |
| 트랜잭션 | 다중 행 트랜잭션을 지원하며 ACID를 준수하므로 데이터가 손실되거나 손상될 수 없는 응용 프로그램에 적합합니다. | 다중 문서 트랜잭션을 지원하지만, 특히 분산된 데이터 전반에 걸쳐 대부분의 기존 관계형 데이터베이스보다 덜 강력한 것으로 알려져 있습니다. |
| 성능 | 정확한 트랜잭션을 보장하도록 설계되었지만 대용량 데이터의 경우 성능이 저하될 수 있습니다. 그러나 일반적으로 분석 성능이 향상됩니다. | 대용량 데이터에 대한 높은 읽기 성능을 위해 구축되었습니다. |
MongoDB는 블로깅 또는 노트 작성 앱과 같은 간단한 CRUD 응용 프로그램에서부터 Amazon Prime과 같은 복잡한 플랫폼에 이르기까지 광범위한 용도에 적합합니다. MongoDB는 콘텐츠 관리 시스템(CMSes), 데이터 동기화가 빨라야 하는 게임 앱, 생체 인식 의료 데이터 등 다양한 사용 사례에서 주로 선택됩니다. 다기능성으로 인해 MEAN 및 MERN과 같은 널리 사용되는 오픈 소스 개발 스택의 초석이 되었습니다.
다음과 같은 요소가 필요할 때 선택합니다.
MongoDB는 직관적인 API, 유연한 데이터 모델 및 다음과 같은 기능으로 인해 개발자에게 인기가 높아졌습니다.
MongoDB의 오픈 소스 커뮤니티에서의 인기는 응용 프로그램 개발 및 유지보수를 더 직관적이고 확장 가능하게 만드는 다양한 기능에 기인합니다. 장점은 다음과 같습니다.
MongoDB는 많은 장점을 제공하지만, 특히 대용량 데이터 볼륨에서 유연성과 고성능이 필요한 애플리케이션의 경우 많은 잠재적인 단점이 있습니다.
MongoDB는 해당 에코시스템 내에서 잘 작동하는 NoSQL 데이터베이스이지만 다양한 데이터 통합 도구 및 커넥터를 통해 다른 유형의 데이터베이스 관리 시스템과 상호 작용하도록 구축되었습니다. 이 툴 세트에는 MongoDB에서 데이터를 추출 및 마이그레이션하기 위한 ETL(추출, 변환, 로드) 인프라가 포함되며, 그 반대의 경우도 마찬가지입니다. 이는 보고 및 복잡한 데이터 분석을 위해 데이터를 관계형 데이터베이스로 전송하는 데 유용합니다. MongoDB 애플리케이션은 REST API를 사용하여 다양한 데이터베이스 플랫폼 간에 통신할 수도 있습니다.
MongoDB 호환성의 좋은 예는 개발자가 Oracle Autonomous JSON Database에 연결된 MongoDB의 오픈 소스 도구 및 드라이버를 사용할 수 있는 Oracle Database API for MongoDB입니다. 이를 통해 Oracle의 멀티모델 기능에 액세스할 수 있으며, 분석, 머신러닝(ML) 및 공간 분석을 위해 데이터를 별도의 데이터베이스로 이동하는 것을 방지할 수 있습니다. Autonomous JSON Database를 MongoDB Atlas의 멀티모달 대안으로 생각해 보십시오. 기존 애플리케이션 변경이 거의 또는 전혀 필요하지 않습니다.
개발자는 API를 통해 MongoDB 기능에 액세스하는 대신 Oracle Cloud Infrastructure(OCI)의 Oracle Autonomous JSON Database로 JSON 중심 워크로드를 마이그레이션할 수 있습니다. NoSQL 스타일의 문서 API(Simple Oracle Document Access[SODA], Oracle Database API for MongoDB), 서버리스 확장, 고성능 ACID 트랜잭션, 종합적인 보안, 낮은 종량제 가격 정책을 제공하는 JSON 중심 애플리케이션을 위한 클라우드 문서 데이터베이스 서비스를 제공합니다. MongoDB에서 Oracle Autonomous JSON Database로의 마이그레이션은 Oracle Cloud Infrastructure(OCI) GoldenGate를 통해 이루어지기 때문에 다운타임이 발생하지 않습니다.
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는 중요한 역할을 할 것입니다.
개발자와 비즈니스 동료 모두 민첩성, 확장성 및 효율성을 극대화하도록 특별히 설계된 클라우드 전용 애플리케이션의 이점을 누릴 수 있습니다. 클라우드의 추가적인 발전을 위한 10가지 방법을 확인해 보세요.
SQL과 MongoDB의 차이점은 무엇인가요?
MongoDB는 구조화되지 않은 데이터를 저장하며 SQL(Structured Query Language)에 적합하지 않습니다.
MongoDB은 백엔드 언어인가요?
아니요. 하지만 백엔드 웹 애플리케이션의 일부로 사용할 수 있습니다.
MongoDB는 언어 또는 프레임워크인가요?
테이블 대신 문서에 저장된 비정형 데이터를 사용하는 데이터베이스 관리 시스템입니다.