MongoDB - MongoDB란?

겔로그·2022년 12월 6일
0
post-thumbnail

개요

오늘은 Mongodb에 대해 알아보는 시간을 가져보겠습니다. Mongodb라는 데이터 베이스가 왜 생겨났는지, 어떤 이점이 있길래 최근 많은 사람들이 RDB에서 Nosql로 넘어오는지 차근차근 알아가며 최종적으로는 NoSQL의 심화 과정까지 알아가보겠습니다.

이번 Mongodb 시리즈는 MongoDB 프로그래밍 | T아카데미 유투브를 시청하고 개인적으로 작성한 내용이며 추후에는 여러 관련 내용을 공유해 드리는 시간을 가져보겠습니다.

MongoDB의 기원

처음 개발을 시작하신 분들은 RDBMS라는 관계형 데이터베이스에 대해 많이들 들어보셨을 겁니다. RDBMS가 아니더라도 Mysql, Oracle, Postgresql 등으로도 접했을 수도 있고요.

다음 자료를 한 번 보실까요?

[출처]: stack overflow

처음에는 이 RDB를 통해 개발하는 것이 매우 편리하였습니다. 데이터간에 관계를 정의하고 트랜잭션을 통한 데이터 처리, ACID를 경험해 본 개발자들은 SQL문만 조금 공부한다면 RDB를 사용할 수 있다는 점에 큰 매력을 가지고 사용하였습니다.

하지만 시간이 지나면서 데이터는 점점 많아졌습니다. 인터넷과 모바일 시장이 활성화되면서 RDB만으로는 이 데이터들을 감당하기가 어려워졌습니다. 또한, 빠르게 변화해가는 시대에 따라가는 시스템이 되어야만 했습니다.

관계형 데이터베이스를 사용하는 시스템들은 기존에 정해진 관계로 인해 기능 추가를 위해 테이블 컬럼 하나를 추가하는 일은 시스템 코드를 크게 개편해야만 하는 문제가 존재하였습니다.

이러한 문제를 해결하기 위해 NoSQL이라는 개념이 등장하였습니다.

NoSQL이란?

NoSQL이란 비관계형 데이터베이스입니다. 말 그대로 관계가 없습니다. 이러한 특징으로 인해 현대적인 애플리케이션 구축을 가능하게 합니다.

개발 도중 기능이 변경되거나 추가될 경우 데이터를 추가만 하면 되므로 확장성과 유연성에 굉장히 강력한 이점을 가지고 있습니다.

그럼 Mongodb는 뭐길래 이렇게 갑자기 인기가 많아졌을까요?

Mongodb란?

Mongodb는 NoSQL의 대표적인 데이터베이스로서 오픈 소스로 이용이 가능한 프로젝트입니다.
스키마를 고정하지 않는 형태로서 json 형태(Key-value)값으로 데이터를 저장하고 있습니다.

MongoDB에 대해 좀 더 자세히 알아볼까요?

Mongodb 특징

  • 메모리맵 형태의 파일엔진 DB이기 때문에 메모리에 의존적입니다.
    - 메모리의 크기가 성능을 좌우
    • 메모리를 넘어서는 경우 성능이 급격히 저하됨
  • 도큐먼트 데이터 모델입니다.(JSON 형태로 이루어짐)
    - 이름(key)과 값(value)으로 이루어진 쌍의 집합
    • 하나의 document에 필요한 정보를 모두 담아야 합니다.
    • one query로 모두 해결되는 collection model 설계를 해야 합니다.
    • join이 불가능하여 필요시 embedding해야만 합니다.

MongoDB 주요 기능

인덱스 처리

  • 다수 인덱스 설정 가능
  • 복합 인덱스 지원
  • (주의!) 메모리가 부족할 경우 오히려 성능저하가 발생할 수 있음

복제

  • Master-Slave 구조 구성
    - 장애시 Slave 투표를 통해 하나의 노드를 Master로 승격시킵니다
  • 데이터 손실을 최소화하기 위해 저널링을 지원합니다.
    - 데이터 변화에 따른 모든 로그를 남겨놓음

샤딩

  • 방식
    1. 테이블 단위로 분리하는 방법
    1. 테이블 자체를 분할하는 방법

Mongodb 구조도

Mongodb 장단점

장점

  1. Schema-less 구조로 다양한 형태의 데이터를 저장할 수 있고 데이터 모델의 유연한 변화가 가능합니다.
  2. Read/Write 성능이 뛰어납니다.
  3. Scale Out 구조로 장비 증설에 효과정입니다.
  4. 개발자들에게 친숙한 JSON 형태로 되어있어 데이터를 직관적으로 이해할 수 있습니다.

단점

  1. 데이터 업데이트 중 장애발생 시 데이터 손실이 가능합니다.
  2. 많은 인덱스를 사용할 경우, 메모리를 크게 잡아먹어 충분한 메모리 확보가 필요합니다.
  3. 비효율적인 Key 중복 입력으로 인해 데이터 공간 소모가 RDBMS에 비해 많습니다.
  4. 트랜잭션 지원이 RDB에 비해 상대적으로 부족합니다.

이렇게 우리는 MongoDB의 특징과 기능, 장단점에 대해 알아보았습니다. 그럼 관계형 데이터베이스인 MySQL과 비교해볼까요?

Mongodb vs MySQL

  1. MongoDB와 MySQL의 성능테스트를 진행할 경우 성능 차이가 확연히 벌어지는 것을 알 수 있습니다.
  2. 기능 변경에 있어 보다 더 유연함을 Mongodb가 가지고 있습니다.
  3. MongoDB는 데이터간의 관계가 없어 시스템이 커질수록 구조화하기 어렵다.

Mongodb 사용 장소

RDB에 어울리는 시스템이 존재하듯, Mongodb가 어울리는 시스템 또한 존재합니다. 어떤 종류의 시스템이 Mongodb와 가장 어울릴까요?

Mongodb를 적용을 고려해볼만한 시스템

  • 쌓아놓고 삭제가 없는 경우
  • 기능 요구사항이 계속해서 바뀌는 경우
  • 작은 시스템

Mongodb를 적용을 지양하는 시스템 종류

  • 트랜잭션이 꼭 필요한 시스템(전자금융, 회원 정보, 빌링, 결제 등)
  • 변화가 크게 없는 시스템
  • 요구사항이 많은 시스템

이렇게만 보면 MongoDB가 어떻게 사용되는지 구체적으로 알 수 없을 것 같아 실제로 도입된 사례와 오히려 MongoDB의 단점으로 인해 MongoDB -> Mysql로 이전한 사례를 공유드리겠습니다.

MongoDB 도입된 사례

MongoDB -> MySQL 이전 사례

결론

MongoDB는 RDB의 시대에서 정반대의 성격을 가지고 꿋꿋이 살아남은 NoSQL의 대표적인 데이터베이스입니다.
RDB와 상반되는 이점으로 처음 프로젝트를 시작할 경우 NoSQL로 시작하면 좀 더 빠른 개발이 가능할 것이라 생각되어집니다.

단지 처리가 빠르다고 MongoDB를 도입하는 것은 옳지 않습니다. NoSQL과 RDB, 두 가지의 이점을 비교하여 내가 개발할 시스템에 가장 적합한 데이터 베이스를 선택하여 개발하시는 것을 추천드립니다.

다음 편에서는 기능에 대해 세부적으로 알아보는 시간을 가져보겠습니다.

Reference

profile
Gelog 나쁜 것만 드려요~

0개의 댓글

관련 채용 정보