본문 바로가기
컴퓨터/NoSQL 데이터베이스

[DB] 몽고DB에 대해서 알아보자

by 도도새 도 2023. 4. 29.

몽고 DB

 

 그동안 몽고DB를 사용하면서도 따로 정리한 적이 없다. 곧 더욱 바빠질 예정이므로, 그전에 몽고DB에 대해 정리하고 프로젝트를 마무리짓기로 결심했다.

 

몽고 DB란?

 

몽고 DB는 도큐먼트 지향 데이터베이스 시스템이다. 또한 대표적인 NoSQL데이터베이스이기도 하다. NoSQL이란 Non Relational Operation Database SQL의 줄임말로서 관계형 데이터베이스가 아닌 SQL을 의미한다. , 기존 SQL과 차이를 보인다. 몽고DB는 문서 지향 데이터 모델이다.

 

몽고 DBJSON과 유사한 형태를 보인다.(유저가 쓰고 읽기는 json이지만, 저장은 바이너리 형태인 BSON으로 됌. 바이너리 형태로 변경시 파일 크기는 커지지만 메모리상 이점이 존재) 일반적인 관계형 데이터베이스(RDBMS) 같은 경우 데이터의 중복을 제거, 무결성 보장을 위해 정규화 과정을 거치는데, 이로인해 성능 저하가 나타날 수 있다.

 

하지만 몽고DB의 경우 이를 할 필요가 없기 때문에 불필요한 JOIN을 최소화해 성능을 향상시켰다. 따라서 대용량 데이터 처리와 확장성이 좋은 데이터 베이스 중 하나이다. 자바스크립트를 이용한 쿼리를 사용해 빠르고 유연하게 데이터 조회 및 조작이 가능하다는 것도 장점 중 하나이다.

 

몽고 DB의 구조

 

몽고DB에서 사용되는 용어는 아래와 같다. 각 용어를 RDBMS와 대비시켰다.

MongoDB RDBMS
Database Database
Table Collection
Record/Row Document
Column Key/Fields
Primary key Primary key(_id)

 

 즉 컬렉션은 테이블과 비슷하고, 문서는 Row(Record)와, Columns은 Fields와 비슷하다. 그러나 관계형 데이터베이스와 달리 MongoDB는 스키마가 고정되어 있지 않고, 필드의 개수나 데이터 형식 이름 등을 자유롭게 정의할 수 있다.

 

 

 몽고 DB 도큐먼트의 구조

 

 도큐먼트의 Schema는 도큐먼트의 구조를 정의하는 것이다. 일반적인 SQL과 달리 같은 컬렉션내의 몽고DB 스키마들을 각자 다른 구조를 가질 수 있다.

 

1. 임베디드 방식

 

몽고DB에서 데이터를 임베딩하는 경우는 아래와 같은 구조를 가진다.

 

 보다시피 도큐먼트 내부에 또 도큐먼트가 들어 갈 수 있다. (sub-document) 이렇게 단일 구조 혹은 도큐먼트에 관련된 데이터들을 내장한 경우 비정규화 데이터베이스 모델(denormalized model)라고 부른다.

 

위처럼 임베디드한 방법으로 DB를 구성할 경우 읽기, 검색 등에 성능이 뛰어나다.

 

*비정규화란 하나 이상의 도큐먼트에 데이터를 중복해서 배치하는 최적화 방법이다. 다른 말로 하자면 정규화 원칙을 어긴 것이다. 이를 이용하면 조회 성능 등이 향상되지만 데이터의 정보를 업데이터 해야 할 때 모든 정보를 업데이트 해야 할 수 있다는 문제점이 있다.

 

*정규화란 중복을 최소하고 데이터의 일관성을 유지하기 위해 데이터를 분해하는 과정이다. 다만 이 경우 조회 속도 저하, 많은 조인 등의 문제가 있다.

 

2. 래퍼런스(References)

 

 마치 C언어 포인터와 유사하게 각 데이터 사이에 references를 저장하는 방식이다. references를 이용해 관계있는 데이터에 접근이 가능하도록 한다. 일반적으로 이를 정규화 데이터베이스 모델이라고 부른다.(normalized data models)

래퍼런스 방식

 

정규화 데이터베이스 모델의 경우 아래의 상황에 사용한다.

 1. 임베딩이 데이터 중복을 초래하지만 퍼포먼스에서 이점이 없는 경우

 2. 복잡한 다대다 관계를 표현 할 경우

 3. 데이터의 계층 구조가 크고 복잡한 경우

 

위 그림에서 보다시피 3개의 도큐먼트가 존재하며, user도큐먼트는 _id를 통해 contact 도큐먼트access도큐먼트에 접근이 가능하다.

댓글