MongoDB란?
MongoDB란?
MongoDB는 NoSQL의 한 종류로 document database입니다.
애플리케이션 개발과 scaling이 용이하도록 설계된 오픈소스 데이터베이스입니다.
거대한 데이터베이스라는 의미의 Humongous(거대한) Database를 줄인 MongoDB로 이름 지어졌습니다.
NoSQL이란?
흔히 SQL 언어를 활용하는 관계형 데이터베이스가 아니다는 NoSQL이라는 용어로부터 시작하여 현재는 Not Only SQL의 의미로 SQL 이외에 여러 가지 기능을 제공한다는 의미로 일반화되었습니다.
key-value, document, graph 등 다양한 형태의 데이터베이스들이 존재합니다.
여기에서 mongoDB는 document database에 속합니다.
Document Database란?
Document Database에서는 데이터를 JSON과 유사한 객체인 문서에 저장합니다.
이를 통해 다양한 구조를 가지며 유연하고 동적인 데이터 모델링이 가능합니다.
전통적인 테이블-칼럼 구조가 아닌 컬렉션이라는 공간 안에 데이터를 보관합니다.
key-value 형태로 데이터를 보관하기 때문에 유연한 구조변경이 가능합니다.
테이블 대신 Collecntions라는 개념을 사용하며 데이터베이스와 유사한 개념인 View, Materialized View도 지원합니다.
MySQL이 여러 Storage Engine을 가지는 것처럼 MongoDB도 여러 개의 Engine을 가지고 현재 기준으로는 WiredTiger Storage Engine가 기본 엔진입니다.
RDBMS의 JSON vs MongoDB
mongoDB는 데이터를 관리하기 위해 데이터 입출력 시에는 JSON 형식을 사용하고 데이터 저장 시에는 BSON 형식을 활용합니다.
RDBMS인 MySQL, PostgreSQL에도 JSON 컬럼을 지원하는데 MongoDB는 왜 사용하는 걸까요?
심지어 성능 테스트 결과 PostgreSQL이 MongoDB 빠르다는 글들도 보입니다.
PostgreSQL이 약 4배정도 빠릅니다.
인덱스가 없을때는 MongoDB가 더 빠르지만 인덱스가 있을때는 PostgreSQL이 더 빠른 모습을 보여줍니다.
조금 더 자세한 내용을 원하신다면 다음 글을 참고하세요
http://tiborsimko.org/postgresql-mongodb-json-select-speed.html
MongoDB 왜 사용할까?
- 스키마가 없어서 구조를 유연하게 변경할 수 있다.
- Read/Write 성능이 뛰어나다.
- 수평 확장성(Horizontal Scalability)과 신뢰성(HA)이 높다.
- 비용이 많이 드는 join을 사용할 필요성을 줄인다.
인터넷 서비스가 점점 활발해지고 비정형 데이터들을 적재하기에 전통적인 RDB로는 취급하기 어려운 양의 비정형 데이터들을 적재하기 위해 NoSQL이 등장하게 되었습니다.
RDBMS에서는 scale out 방식의 확장이 어려웠습니다.
따라서 scale up을 수행했어야 했는데 이 방식은 한계가 있고 최근의 Cloud 시대에는 scale out 방식이 더 유용합니다.
RDBMS에도 수평 확장인 샤딩이 가능하지만 NoSQL에서 훨씬 편하게 사용할 수 있습니다.
MongoDB의 단점
- SQL에 익숙한 개발자들의 러닝 커브(스키마의 유연함이 초보자에겐 어려움이 될 수 있음)
- join지원하지 않음, 유사하게 loockup 연산자를 지원하지만 최대한 피하자 (사실 장점이자 단점)
- document당 16MB의 용량제한이 있다.
- 제한적인 트랜잭션 기능
참고자료
https://www.mongodb.com/docs/manual/introduction/
https://oliveyoung.tech/blog/2023-01-04/oliveyoung-discovery-mongodb/
https://meetup.nhncloud.com/posts/274
https://devocean.sk.com/blog/techBoardDetail.do?ID=165168&boardType=techBlog