MongoDB
https://www.mongodb.com/
1. 개요
NoSQL DBMS의 한 종류.
MongoDB는 NoSQL로 분류되는 크로스 플랫폼 도큐먼트 지향 데이터베이스 시스템이다. MySQL 처럼 전통적인 테이블-관계 기반의 RDBMS가 아니며 SQL을 사용하지 않는다.
이름의 mongo는 humongous를 줄인 표현이다. 즉 '겁나 큰 DB' 라는 뜻.
자바스크립트 런타임으로는 모질라의 spidermonkey를 사용한다.
2. 라이선스
2018년까지는 GNU Affero General Public License(AGPL)에 기반하여 공개되었다. 그러나 클라우드 업체들이 MongoDB를 그대로 이용하면서 라이선스 계약 없이 수익을 챙기고, 오픈소스 커뮤니티에는 기여를 하지 않자 2018년 10월 라이선스를 AGPL에 기반한 Server Side Public License(SSPL)로 변경했다.
SSPL은, 서버에서 프로그램을 실행할 경우 기존 AGPL에서는 라이선스 대상 프로그램의 소스코드만을 공개하면 되었던 것을 수정하여, 프로그램이 'Software as a Service' 형태로 제공될 경우 그 프로그램과 연동되어 실행되는 관리 소프트웨어 등을 모두 공개해야 한다는 조항으로 바꾸었다.
SSPL은 오픈소스 커뮤니티에서 라이선스가 다른 프로그램에까지 영향을 미치는 것에 대해 비판을 받았고 오픈소스 이니셔티브에서는 라이선스 승인 절차를 중단했다.
3. 특징
MongoDB는 MySQL의 테이블과 같은 스키마가 고정된 구조 대신 JSON 형태의 동적 스키마형 문서를 사용하는데, 이를 MongoDB 에서는 BSON이라고 부른다.
MongoDB는 가장 기본적인 데이터를 Document 라고 부른다. 이는 MySQL같은 RDBMS에서는 row에 해당된다. 이 Document의 집합을 Collection이라고 하는데, RDBMS에서는 테이블(Table)에 해당된다. Collection의 집합은 DB이고, 이는 RDBMS에서도 동일하다.
똑같은 조건으로 설계되었을 시 기존 RDBMS 속도보다 굉장히 빠르다는 장점이 있다. 이런 속도는 ACID를 포기한 댓가로 얻은 것이다. 따라서 데이터 일관성(Consistency)이 거의 필요 없고 조인 연산을 Embed로 대체할 수 있는 경우에는 MongoDB가 확실한 대안이 될 수 있다. 반대로 저장하는 데이터가 은행 데이터 같이 일관성(Consistency)이 매우 중요한 작업에는 MongoDB를 쓰기 매우 힘들다.
MongoDB 측에서 MongoDB와 MySQL을 비교한 것을 문서로 만든 것이 있는데, MySQL에서 MongoDB로 갈아타려는 유저들은 참고하도록 하자. https://www.mongodb.com/compare/mongodb-mysql