[DB] mongo DB

young-gue Park·2024년 1월 20일
0

DB

목록 보기
5/6
post-thumbnail

⚡ mongo DB


🔗 IBM - mongo DB 설명

📌 mongo DB란?

🔷 오픈소스 비관계형 데이터베이스 관리 시스템(DBMS)으로, 테이블과 행 대신 유연한 문서를 활용해 다양한 데이터 형식을 처리하고 저장한다.

  • 이전에 다룬 redis와 마찬가지로 NoSQL DB이다.
  • MongoDB 문서 또는 문서 컬렉션을 데이터의 기본 단위로 취급한다.
    • 이진 JSON(JavaScript 객체 표기법) 형식으로 지정되어 다양한 유형의 데이터를 저장할뿐 아니라, 여러 시스템 전반에 분산 처리될 수 있다.

      이진 JSON이 무엇인지는 아래에서 다룬다.

  • MongoDB는 동적 스키마 설계를 활용하므로 사용자는 독보적인 유연성을 확보해 데이터 레코드를 생성하고, MongoDB 집계를 통해 문서 컬렉션을 쿼리하며, 대량의 정보를 분석한다.
  • 클라우드 기반의 완전 관리 기능을 제공한다.

🍃 Mongo DB의 특징

  1. MongoDB는 MySQL의 테이블과 같은 스키마가 고정된 구조 대신 JSON 형태의 동적 스키마형 문서를 사용한다. 이를 MongoDB에서는 BSON(Binary JSON)이라는 독자적인 형식으로 사용하는데, 데이터의 타입까지 포함되어 이진형태로 인코딩되어 저장하기 때문에 JSON과는 다른 차이점이 있다.

💡 BSON
컴퓨터의 언어에 가까운 이진법에 기반을 둔 표현법이다. 따라서 JSON 보다 메모리 사용이 효율적이며 빠르고, 가볍고, 유연하다. 뿐만 아니라, BSON의 사용으로 더 많은 데이터 타입을 사용할 수 있다. 하위 비트부터 바이트 단위로 저장하는 방식인 리틀 엔디안 방식을 사용한다.

  1. MongoDB는 가장 기본적인 데이터를 Document라고 부른다. 이는 MySQL같은 RDBMS에서는 row에 해당된다. Document의 집합을 Collection이라고 하는데, RDBMS에서는 테이블(Table)에 해당된다. Collection의 집합은 DB이고, 이는 RDBMS에서도 동일하다.

  2. ACID가 지켜지지 않는다. 특히 데이터 일관성(Consistency)이 거의 없는 수준이라 은행 데이터 같이 일관성이 매우 중요한 작업에는 MongoDB를 쓰기 매우 힘들다.

💡 ACID
트랜잭션이 제공하는 안전성 보장인 원자성(Atomicity), 일관성(Consistency), 격리성(Isolation), 지속성(Durability)을 의미한다.

  1. MongoDB에서는 아틀라스(Atlas)로 클라우드에 데이터베이스를 설정한다. 아틀라스는 GUI와 CLI로 데이터를 시각화, 분석, 내보내기, 그리고 빌드하는 데에 사용할 수 있다. 아틀라스 사용자는 클러스터를 배포 할 수 있으며, 클러스터는 그룹화된 서버에 데이터를 저장한다.

🍃 MongoDB의 이점

  1. 로드 밸런싱
    기업의 클라우드 애플리케이션이 확장되고 리소스 수요가 늘어나면 서비스의 가용성 및 안정성을 보장하는 데 문제가 발생할 수 있다. MongoDB의 로드 밸런싱 공유 프로세스는 승인된 읽기 및 쓰기 처리량을 유지하면서 여러 가상 머신에 대규모 데이터 세트를 한 번에 배포한다.

💡 로드 밸런싱
애플리케이션 가용성을 최적화하고 긍정적인 최종 사용자 경험을 제공하기 위해 여러 서버에 네트워크 트래픽을 효율적으로 분산하는 프로세스, 처리해야 할 업무나 요청을 중앙처리장치 또는 저장 장치와 같은 컴퓨터 자원에 작업을 분산하는 것.

  1. 임시 데이터베이스 쿼리
    타사 데이터베이스와 차별화되는 MongoDB의 최대 장점 중 하나는 바로 임시 쿼리를 처리하는데 사전 정의된 스키마가 필요하지 않다는 점이다. MongoDB 데이터베이스는 SQL 데이터베이스와 유사한 쿼리 언어를 사용하므로 초보 개발자나 고급 개발자 모두에게 매우 용이한 접근성을 제공한다. 이러한 접근성 덕분에 일반적인 지원 방법과 간단한 셸 명령만으로 손쉽게 데이터 푸시, 쿼리, 정렬, 업데이트, 내보내기 기능을 수행할 수 있다.

  2. 다중 언어 지원
    MongoDB는 이미 여러 버전으로 출시된 바 있으며 Python, PHP, Ruby, Node.js, C++, Scala, JavaScript 등 대중적인 프로그래밍 언어에 대한 드라이버 지원을 통해 지속적인 개발을 수행하고 있다.

  3. 속도
    똑같은 조건으로 설계되었을 시 기존 RDBMS보다 속도가 굉장히 빠르다는 장점이 있다. 위에서 언급했던 ACID를 포기함으로써 얻어낸 장점이다.


📌 왜? 이번 프로젝트에 적용하나요?

🔷 우리 프로젝트인 '아이디어 회의 툴'은 Web Socket과 Web RTC 기술을 이용하는데, DB에 저장된 탬플릿을 불러오거나 새로 만들기를 통해 일단 아이디어 회의에 들어가면 모든 참여자가 실시간으로 동시에 피그마처럼 자유롭게 무언가를 그리거나 도형을 붙이는 등의 작업을 하게 된다. 그런 점을 고려한다면...

1. 아이디어 회의 작업물과 탬플릿이 JSON(혹은 BSON)파일 형태의 비정형 데이터이다.

  • 비정형 데이터를 다룰 수 있다는 점은 NoSQL DB의 특권과 마찬가지이다.
  • Mongo DB는 특히 BSON을 사용하기 때문에 JSON 형태의 파일만을 다루는 다른 DB보다 보다 효율적이고 빠른 저장 및 호출이 가능하다.

2. Redis의 단점인 휘발성을 커버한다.

  • 같은 NoSQL DB인 Redis를 메시지 큐 이외의 용도로 활용하게 되면, 특유의 휘발성 때문에 저장되어있던 정보가 날아갈 위험성이 높다.
  • 이러한 위험성을 보완하고, Redis에 몰리는 작업량을 분산시키기 위해 Mongo DB를 사용하는 것은 탁월한 선택이었다.

3. 속도가 생명인 실시간 서비스에 적합하다.

  • 빠른 간격으로 끊임없이 업데이트 된 작업물이 DB에 반영되어야 하는데, Mongo DB는 다른 DB에 비해 속도 면에서 매우 우월하다.
  • 속도가 ACID를 포기한 댓가인데, 이 프로젝트는 애초에 ACID의 중요도가 낮다.

4. 트래픽 분산이 훌륭하다.

  • 클라우드 기반의 로드밸런싱이 지원되기 때문에 몰리는 트래픽을 적절히 분산할 수 있어, 실시간 서비스 중 서버 장애가 생기는 것을 방지할 수 있다.
  • 조금의 버벅임도 큰 불편함으로 다가갈 수 있는 우리 프로젝트에서 이 점은 매우 중요하다.
profile
Hodie mihi, Cras tibi

0개의 댓글