MongoDB란 무엇이고 RDB와의 비교를 통해 기본적인 개념에 대해 이야기 해 보려 합니다.
MongoDB란?
Wiki에서는 MongoDB에 대한 정의를 아래와 같이 하고 있습니다.
몽고DB(MongoDB←HUMONGOUS)는 크로스 플랫폼 도큐먼트 지향 데이터베이스 시스템이다.
NoSQL 데이터베이스로 분류되는 몽고DB는 JSON과 같은 동적 스키마형 도큐먼트들(몽고DB는 이러한 포맷을 BSON이라 부름)을 선호함에 따라 전통적인 테이블 기반 관계형 데이터베이스 구조의 사용을 삼간다. 이로써 특정한 종류의 애플리케이션을 더 쉽고 더 빠르게 데이터 통합을 가능케 한다. 아페로 GPL과 아파치 라이선스를 결합하여 공개된 몽고DB는 자유-오픈 소스 소프트웨어이다.
여기서 말하는 NoSQL은 Not Only SQL 의 약자로써 기존의 RDBMS의 한계를
극복하기 위해 만들어진 새로운 형태의 데이터저장소 입니다.
조금 생소할 수 있으니 기존 RDB와의 비교를 통해 알아보도록 하겠습니다.
RDB에 대해 간략히 이야기 하자면 관계형 데이터베이스 관리 시스템(Relational Database Management System)은
행과열로 된 2차원의 table로 데이터를 관리하는 데이터베이스 시스템입니다.
기존 RDB와 MongoDB에 대한 용어를 비교해 보겠습니다.
MongoDB와 RDB의 비교
RDBMS | MongoDB |
Database | Database |
Table | Collection |
Tuple / Row | Document |
Column Key | Field |
Table Join | Embedded Documents |
Primary Key | Primary Key (_id) |
DataBase
Database는 Collection들의 물리적인 컨테이너로 각 Database는 파일시스템에 여러파일들로 저장됩니다.
이는 RDB와 같은 용어로 사용되니 이해하시는데 크게 어려움이 없을것으로 보여집니다.
Collection
Collection은 MongoDB Document의 그룹으로 Document들은 Collection내부에 위치하고 있습니다.
RDMS의 table과 비슷한 개념이라고 이해하시면 되나, 주의할 점이 RDMS와 달리 Document는 schema를 따로 가지고 있지않습니다.
아래 Document에 대해서도 추가로 언급 하겠지만 MongoDB는 Document에서 동적인 Schema를 가지고 있습니다.
Document
앞서 위키 정의에서도 "MongoDB는 도큐먼트 지향(Document Oriented) 데이터베이스 시스템" 이라고 언급되었던 Document입니다.
여기서 말하는 도큐먼트(Document)는 RDMS의 record(Column 및 row)와 유사한 개념으로 JSON objects 형태의 key-value의
쌍으로 이루어진 데이터 구조로 구성되고, value에는 document, array, string, number 등 다양한 Object가 포함될 수 있습니다.
Collection 설명시 잠시 언급하였던 것 처럼 Document는 동적(dynamic) schema 를 갖고있다고 하였는데
쉽게 이야기 하면 Collection안에 있는 Document 끼리 key와 value가 서로 다른 데이터들을 가질수도 있다는 의미입니다.
하나의 Document를 예시로 조금 더 자세히 살펴 보겠습니다.
{
"_id" : ObjectId("5f6afea021a6dc00068e5d68"),
"name": { "first": "bong", "last": "bong" },
"birth": ISODate("2020-10-23T17:10:41.195+09:00"),
"loginDates" : [1600052567, 1600052568, 1600052569]
}
해당 Document에서 _id, name, birth, loginDate 가 key 이고 ":" 를 기준으로 우측에 있는 값들이 value가 됩니다.
_id 는 MongoDB에서 자동 생성해 주는 값으로 12bytes의 hexadecimal이며, 각 document의 유일함(uniqueness)을 제공합니다.
이 값의 첫 4bytes 는현재 timestamp, 다음 3bytes는 machine id, 다음 2bytes는 MongoDB 서버의 프로세스id, 마지막 3bytes는 순차번호입니다
아래는 하나의 ObjectId가 어떻게 구성되어 있는지 예시 입니다.
"id": {
"timestamp": 1600844061,
"machineIdentifier": 10722312,
"processIdentifier": 2509,
"counter": 5783257,
"date": "2020-09-23T06:54:21.000+0000",
"time": 1600844061000,
"timeSecond": 1600844061
}
추가로 MongoDB의 장점과 단점을 알아보며 마무리 하려 합니다.
MongoDB 장점
1. 비동기 드라이버를 사용할 수 있다.
2. 문서지향적 Query Language 를 사용하여 SQL 만큼 강력한 Query 성능을 제공한다
3. 별도의 캐시 솔루션이 필요하지 않을 만큼 성능 문제에서 우월하고, RDB와 비교한다면 성능이 100배 이상 빠르다.
4. 스키마 관리가 필요 없다.
5. 샤드 추가가 간편하다.
MongoDB 단점
1. 메모리 사용량이 큰 편으로 메모리 부족 시 퍼포먼스가 급락한다.
2. 정합성이 떨어지므로 트랜잭션이 필요한 경우에는 부적합하다.
여기까지 MongoDB의 기본적인 개념에 대해 알아보았습니다. 이러한 특징과 장,담점을 잘 판단하여 적절한 부분에
사용을 한다면 좋은 방안이 될 것 같습니다.
추가로 MongoDB의 설치방법에 대해 궁금하신 분들은 아래 이전에 작성해둔 설치방법에 대한 포스팅을 참고해 주세요 :)
2019/11/18 - [IT Tech/MongoDB] - Ubuntu 에 MongoDB 설치하기
2020/09/22 - [IT Tech/MongoDB] - Mac에서 HomeBrew를 이용한 MongoDB 설치하기
'IT Tech > MongoDB' 카테고리의 다른 글
MongoDB 기초 - MongoDB Database,Collection,Document 기본 사용법 (0) | 2020.10.08 |
---|---|
Mac에서 HomeBrew를 이용한 MongoDB 설치하기 (1) | 2020.09.22 |
MongoDB 외부접속 허용하기 (0) | 2020.08.26 |
댓글