[데이터베이스] mongoDB란?

mongoDB 입문기를 위한 글

Posted by ChaelinJ on February 28, 2021

안녕하세요!

mongoDB에 대해 알아볼게요!


  1. MongoDB (몽고 DB) 키워드
  2. MongoDB 특징
  3. 단점
  4. 적절한 사용 사례
  5. 부적절한 사용 사례

MongoDB (몽고 DB) 키워드


크로스 플랫폼

여러 종류의 컴퓨터 플랫폼에서 동작할 수 있습니다.
몽고DB 외에도 Java, 파이어폭스, Ruby 등이 있습니다.


NoSQL

특정 데이터 모델에 대해 특정 목적에 맞추어 구축되는 데이터베이스로서 현대적인 애플리케이션 구축을 위한 유연한 스키마를 갖추고 있습니다.

관계형 데이터베이스가 아닌 다른 형태의 데이터 저장 기술을 의미하며, 관계형 데이터베이스의 한계를 극복하기 위한 데이터 저장소의 새로운 형태로, 수평적 확장성을 갖고 있습니다.

  • Schemaless
    • 잦은 변경에도 유연하게 대처할 수 있습니다.
    • 다양한 콘텐츠를 취합하여 저장, 관리 가능합니다.
  • Join 대신 중복을 통해 저장
    • 수정 시 동기화는 개발자가 해결해야 합니다.
    • 엄격한 일관성, 무결성이 요구되는 경우엔 부적절합니다.

몽고DB는 NoSQL 중 Document Oriented Database의 대표적인 예입니다.


Document Oriented Database

key-value의 형태로 JSON 유사 형식의 문서에 데이터를 저장 및 쿼리하도록 설계된 비관계형 데이터베이스 유형입니다.

mongoDB는 JSON을 사용하는 Document Oriented Database의 예입니다.

다음 형식으로 저장됩니다.

{
    "student_id": 201354,
    "student_name": "Jason"
}

MongoDB 특징

  • Full Index 지원
    다양한 인덱싱을 제공합니다.
    • Index가 없다면 Collection Scan(컬렉션 데이터 Full-scan)해야 합니다.
    • 키 값과 Document를 가리키는 포인터로 구성된 B-tree를 통한 Binary Search
  • Replication & High Availability
    데이터 복제를 통해 향상된 가용성을 추구합니다.
  • Auto-sharding
    Primary-key를 기반으로 여러 서버에 데이터를 나누는 Scale-out이 가능합니다.
    • 문서들을 기준 하에 분할하는 것을 통해 이루어집니다.
    • Sharding: 수평 파티셔닝
    • 균등한 데이터 분배를 위한 hash shard도 지원합니다.
  • Querying
    key 기반의 Get, Put 뿐 아니라 다양한 종류의 쿼리를 제공합니다.
  • MapReduce 지원
    • Map: 원하는 방식 데이터 추출 형식
    • Reduce: 추출한 데이터를 정제
  • GridFS
    별도 스토리지 엔진을 통해 파일을 저장할 수 있습니다.
    • 아주 큰 파일을 부분적으로 로드할 수 있습니다.
    • 파일 및 파일 메타 데이터를 여러 시스템에 동기적으로 저장할 필요가 있을 때 효과적입니다.

단점

  • 복잡한 쿼리를 사용할 수 없습니다.
    • Join 사용 불가
  • 메모리 사용량이 큰 편입니다.
    • 메모리 부족 시 퍼포먼스가 급락
  • 데이터 일관성이 보장되지 않습니다.

적절한 사용 사례

  • 쓰기 부하가 클 것이 예상될 때
    • 안전한 트랜잭션을 통해 빠른 속도로 데이터를 삽입합니다.
  • 신뢰할 수 없는 환경에서 HA가 필요할 때
    • 데이터에 문제가 생겼을 때 자동으로 데이터를 안전하게 즉시 복구할 수 있습니다.
  • 빅데이터를 다루거나 샤딩이 필요할 때
  • 위치 기반 데이터일 때
    몽고DB는 위치 기반 데이터 관련 쿼리를 지원합니다.
    • 위치 기반 데이터를 GeoJSON 객체 혹은 레거시 좌표점(Legacy Coortdinate Pairs)의 형태로 저장합니다.
  • 스키마가 고정되어 있지 않을 때
    • 새 필드를 추가해도 기존 Document는 전혀 영향을 받지 않습니다.

부적절한 사용 사례

  • 데이터의 무결성이 가장 중요한 가치일 때의 사용
    • Sharding + Replica를 조합해 사용할 때 무결성이 깨진 상태의 데이터가 조회될 수 있기 때문에 데이터 처리량보다 일관성 있는 데이터 구조가 중요할 때의 사용은 부적절합니다.
  • 위와 같은 이유로 결제, 아이템 등을 담기엔 RDB보단 불안한 면이 존재합니다.
  • 엄격한 데이터 타입 검사나 연관 관계가 중요할 때의 사용은 부적절합니다.
    • 데이터 타입이 동적 결정되는 Schemaless이고, 컬럼도 동적 컬럼이다보니 마이그레이션이 어려운 편입니다.
    • 마이그레이션: 한 운영환경에서, 좀 더 낫다고 여겨지는 다른 운영환경으로 옮겨 가는 과정을 말합니다. 데이터베이스의 경우 다른 종류의 데이터베이스로 옮기는 경우입니다.

RDB만 쭉 해오다가 NoSQL을 처음 배웠는데 많이 생소하네요.

그래도 계속 보다 보니 어떤 느낌인지는 알 것 같습니다!

읽어주셔서 감사합니다.

참조: [이진석CEO, 마이그레이션이란 무엇인가], [kidoki, 문서 데이터베이스], [devuna님 tistory블로그], [Elky84.github.io, Mongodb 장단점, 활용시 고민할 사항들], [위키트리, NoSQL]

Text by Chaelin. Photographs by Chaelin, Unsplash.