BE
[MongoDB] MongoDB란?
| 서론
안녕하세요, 팡일입니다.
서비스를 개발하다 보면 데이터를 어떻게 저장하고 관리할지에 대한 고민은 반드시 하게 됩니다. 특히 최근에는 단순한 정형 데이터뿐만 아니라, 다양한 형태의 데이터를 빠르게 처리해야 하는 경우가 많아지면서 NoSQL 데이터베이스에 대한 관심도 함께 높아지고 있습니다.
그중에서도 MongoDB는 JSON 기반의 유연한 구조를 바탕으로, 프론트엔드와 자연스럽게 연결되고 빠르게 변화하는 서비스 환경에 잘 대응할 수 있는 데이터베이스입니다.
하지만 처음 MongoDB를 접하면 “RDBMS랑 뭐가 다른 거지?”, “왜 Document 구조를 쓰는 걸까?”와 같은 궁금증이 생기기 마련입니다.
이번 글에서는 MongoDB가 어떤 데이터베이스인지부터 시작해, 특징, 다른 DB와의 차이, 그리고 실제 구조와 개념까지 한 번에 정리해보려고 합니다.
| MongoDB란?
MongoDB는 테이블과 행 대신 유연한 문서(Document) 구조를 사용하여 다양한 형태의 데이터를 저장하고 처리할 수 있는 오픈 소스 NoSQL 데이터베이스입니다.
기존의 관계형 데이터베이스와는 다른 방식으로 데이터를 다루기 때문에, 특히 빠르게 변화하는 서비스 환경이나 유연한 데이터 구조가 필요한 상황에서 많이 사용됩니다.
1) 특징
MongoDB의 가장 큰 특징은 유연성과 확장성입니다. 기존 RDBMS처럼 엄격한 스키마에 얽매이지 않고, 다양한 형태의 데이터를 자유롭게 저장할 수 있습니다.
RDBMS가 필요로 하는 고정 스키마 없이, 다변량 데이터를 유연하게 저장하고 쿼리할 수 있습니다.
JSON 형식의 Document를 사용하기 때문에, 프론트엔드와 데이터 구조가 자연스럽게 연결됩니다.
동적 스키마 설계를 채택하여, 필드 추가/변경이 자유롭습니다.
Aggregation을 통해 데이터를 집계하고 가공할 수 있습니다.
대규모 데이터를 분석할 때 높은 유연성과 확장성을 제공합니다.
즉, MongoDB는 “데이터 구조를 미리 강제하지 않는 데이터베이스”라고 이해하면 쉽습니다.
2) MongoDB vs Others
데이터베이스를 선택할 때는 상황에 맞는 기술을 사용하는 것이 중요합니다. MongoDB를 더 잘 이해하기 위해, 대표적인 DB들과 비교해보겠습니다.
(1) MySQL
구조화된 쿼리 언어를 사용하여 저장된 데이터에 엑세스
스키마는 데이터베이스 구조를 만드는 데 사용
값을 검색할 수 있고, 제대로 쿼리할 수 있도록 데이터 형식을 표준화하는 방법으로 테이블을 활용
MySQL 추천: 트랜잭션 데이터를 관리할 때처럼 데이터 무결성과 격리가 필수적인 경우MongoDB 추천: 제한이 덜한 형식과 높은 성능으로 가용성과 속도가 가장 중요한 경우
(2) Cassandar
둘다 모두 NoSQL 데이터베이스로 간주
행과 열이 있는 기존 테이블 구조를 사용하여, 사용자가 컴파일 하기 전에 데이터 형식을 지정할 때 균일성과 내구성 유지 가능
SQL과 유사한 구문을 갖고 있음
많은 구성 없이 배포 및 복제를 안정적으로 처리
단점구조화된 데이터 세트와 구조화 되지 않은 데이터 세트를 처리하는데 부족함: 정해진 구조는 잘 처리하지만, 그렇지 않은 경우 테이블을 다시 설계해야 하고, 컬럼 추가/변경이 번거롭다.
MongoDB가 더 유연하고 미션 크리티컬 클라우드 애플리케이션의 성능 및 안전성이 미치지 못함
3) 사용 사례
MongoDB는 다양한 환경에서 활용됩니다. 특히 데이터 구조가 자주 바뀌거나, 빠른 처리 속도가 중요한 경우에 강점을 보입니다.
모바일 애플리케이션: 백엔드 애플리케이션 데이터 저장 (여러 환경에서 데이터를 집계)
실시간 분석: 대규모 데이터 풀에서 주요 지표와 비즈니스 인사이트에 엑세스: 여러 개발 환경에서 실시간 정보를 분석할 때 빠른 속도와 효율성
콘텐츠 관리 시스템: 단일 DB와 고가용성을 활용하여 App/Web에 새로운 기능과 속성을 쉽게 추가 가능
기업 데이터 웨어하우스: 다양한 시스템에서 수집된 대규모 데이터를 통합 저장하여 분석에 활용
4) 이점
MongoDB는 단순한 저장소를 넘어, 확장성과 운영 효율성 측면에서도 강점을 가집니다.
(1) 로드 밸런싱 & 확장성
샤딩을 통해 데이터를 여러 서버에 분산 저장할 수 있습니다.
수평 확장이 가능하여, 트래픽 증가에도 유연하게 대응할 수 있습니다.
즉, 서버를 “키우는 것”이 아니라 “늘리는 방식”으로 확장하는 구조입니다.
(2) 유연한 쿼리
사전 정의된 스키마 없이도 데이터를 조회할 수 있습니다.
간단한 명령어로 CRUD 작업이 가능합니다.
빠른 개발과 실험적인 기능 구현에 매우 유리합니다.
(3) 다양한 언어 지원
Python, Node.js, Java, C++ 등 다양한 언어에서 사용 가능합니다.
공식 드라이버가 지속적으로 지원됩니다.
프론트엔드/백엔드 환경 모두에서 쉽게 연동할 수 있습니다.
5) RDBMS vs MongoDB 구조 비교
MongoDB를 이해할 때 가장 중요한 포인트는 “구조 자체가 다르다”는 점입니다.
구분 | RDBMS (MySQL 등) | MongoDB |
Database | Database | Database |
구조 단위 | Table | Collection |
데이터 단위 | Row | Document (JSON 형태) |
속성 | Column | Field |
스키마 | 고정 스키마 (미리 정의) | 동적 스키마 (유연함) |
데이터 구조 | 모든 row 동일 구조 | document마다 구조 달라도 가능 |
쿼리 언어 | SQL | Mongo Query Language (JavaScript 기반) |
변경 방식 | ALTER TABLE 필요 | 바로 필드 추가 가능 |
관계 | JOIN 사용 | 보통 embedding / reference |
한 줄로 정리해보면, RDBMS는 “구조를 먼저 만들고 데이터를 넣는 방식”, MongoDB는 “데이터에 맞게 구조를 유연하게 바꾸는 방식”입니다.
6) 예시 코드로 보는 MongoDB
MongoDB는 Document를 생성하고, Collection에 바로 저장하는 방식으로 동작합니다.
// 데이터베이스 선택
MongoDatabase database = mongoClient.getDatabase("mydatabase");
// 컬렉션 선택
MongoCollection<Document> collection = database.getCollection("mycollection");
// 새로운 문서 생성
Document document = new Document("name", "John")
.append("age", 30)
.append("email", "john@example.com");
// 문서 삽입
collection.insertOne(document);
System.out.println("새로운 문서가 삽입되었습니다. ID: " + document.get("_id"));위 코드는 새로운 Document를 생성한 뒤,해당 Collection에 직접 삽입하는 과정을 보여줍니다.
실제로 저장되는 데이터는 다음과 같은 JSON 형태입니다.
{
"name": "John",
"age": 30,
"email": "john@example.com"
}이처럼 MongoDB는 객체 형태 데이터를 그대로 저장할 수 있다는 점이 큰 장점입니다.
| 기본 개념

MongoDB는 문서(Document) 기반의 NoSQL 데이터베이스로, 데이터를 유연한 구조로 저장할 수 있다는 특징을 가지고 있습니다.
관계형 데이터베이스(RDBMS)와는 구조와 접근 방식이 다르기 때문에, 먼저 핵심 개념을 이해하는 것이 중요합니다.
1) Document
: Document는 MongoDB에서 데이터를 저장하는 가장 기본 단위입니다.
데이터는 JSON 형태로 저장되며, 필드-값(key-value) 쌍의 집합으로 구성됩니다.
하나의 Document는 RDBMS의 “행(row)”과 유사한 역할을 합니다.
2) Collection
: Collection은 여러 개의 Document를 모아둔 데이터 그룹 단위입니다.
같은 성격의 데이터를 하나의 Collection으로 관리하며,
RDBMS의 “테이블(table)”과 비슷한 개념이라고 이해할 수 있습니다.
3) Database
: Database는 Collection들의 집합으로, 여러 Collection을 포함하는 상위 개념의 저장 공간입니다.
하나의 Database 안에는 여러 Collection이 존재하며,
각 Collection은 반드시 하나의 Database에 속하게 됩니다.
4) Index
: Index는 데이터를 빠르게 검색하기 위한 탐색 구조입니다.
기본적으로 B-Tree 구조를 사용하며, 특정 필드를 기준으로 검색 속도를 크게 향상시킬 수 있습니다.
또한 텍스트 검색을 위한 Text Index나, 위치 기반 데이터를 위한 Geospatial Index도 지원합니다.
5) Shard
: Shard는 데이터를 여러 서버에 나누어 저장하는 수평 분산 방식입니다.
데이터를 여러 파티션으로 분할한 뒤, 각 파티션을 서로 다른 서버에 저장하여 대용량 데이터를 효율적으로 처리할 수 있습니다.
6) Replica Set
: Replica Set은 동일한 데이터를 여러 서버에 복제하여 고가용성(High Availability)을 보장하는 구조입니다.
한 서버에 문제가 발생하더라도, 다른 서버가 자동으로 역할을 이어받아 서비스가 지속될 수 있습니다.
7) Aggregation
; Aggregation은 데이터를 집계하거나 가공하는 기능으로, SQL의 GROUP BY와 유사한 역할을 합니다.
MongoDB에서는 파이프라인 방식을 통해 데이터를 단계적으로 처리하며,
복잡한 데이터 분석도 유연하게 수행할 수 있습니다.
| 결론
MongoDB는 Document 기반의 유연한 구조를 통해, 기존 관계형 데이터베이스보다 훨씬 자유로운 데이터 모델링을 가능하게 해주는 데이터베이스입니다.
특히 구조 변경이 잦거나, 다양한 형태의 데이터를 빠르게 처리해야 하는 서비스에서는 MongoDB의 유연성과 확장성이 큰 장점으로 작용합니다.
반면, 데이터 무결성과 트랜잭션이 중요한 시스템에서는 여전히 RDBMS가 더 적합할 수 있기 때문에, 상황에 맞는 선택이 중요합니다.
결국 중요한 것은 “어떤 데이터베이스가 더 좋다”가 아니라, “어떤 문제를 해결하기 위해 어떤 데이터베이스를 선택하느냐”입니다.