바닥코딩
MongoDB란 본문
데이터베이스를 관리하는 방법으로 실무에서나 개발 공부과정에서 우리는 RDBMS(관계형 데이터베이스)를 보편적으로 사용합니다. oracle, mysql, mssql, postgre... 등등 말이죠 RDBMS를 사용해신 분들이라면 알겠지만 RDB는 데이터를 테이블이라는 공간에 직사각형 구조로 저장하고 테이블간에 관계를 지정하게 됩니다. 하지만 이러한 방법이 데이터베이스를 관리하는 유일한 방법은 아닙니다. RDB 이전으로 넘어가면 디렉토리와 파일로 데이터 베이스를 관리하는 FDB도 존재하며, 전통적인 테이블 - 관계 구조를 사용하지 않고 key:value 형식을 지원하는 NoSQL등도 있습니다
바로 이번 포스팅에서부터 소개할 MongoDB 가 앞서 언급한 NoSQL 중 가장 인지도가 높은 DBMS입니다. 이번 포스팅에서는 NoSQL과 MongoDB의 장단점에 대해 다루어 보겠습니다.
NoSQL
NoSQL은 비관계형 데이터베이스를 지칭하는 단어 입니다. NoSQL 이라는 단어를 직역해 'No SQL' SQL이 아니다 라고 하는 사람들도 있고 'Not Only SQL' SQL 만을 사용하는 데이터가 아니다 'non SQL' ~~~~ 등등 많은 해석들이 존재하지만 중요한건 관계형 데이터베이스를 지향하지 않는다는 점입니다.
NoSQL은 언어마다 관습화된 API, 선언적 구조의 쿼리 언어, 쿼리별 언어를 사용하여 질의할 수 있습니다. SQL이 가지고 있는 RDBS에라는 규격에 맞춘 비 절차식만을 사용하는 것이 아니라 내가 사용하는 언어의 특징과 데이터의 형태를 유연하게 다루고 보관할 수 있습니다.
MongoDB
MongoDB 는 C++로 작성된 오픈소스 문서 지향(Document Oriented) NoSQL 입니다. 현존하는 NoSQL DBMS중 가장 높은 인지도를 가지고 있으면며 확장성 부분에서 굉장히 뛰어난 퍼포먼스를 보입니다.
여기서 문서 즉 Document는 RDBMS의 레코드라 생각할 수 있습니다. 우리가 보통 문서라하면 텍스트로 이루어진 한글, 엑셀, PDF와 같은 문서들을 생각하지만, 여기서는 DB 레코드를 Key : value 형식으로 관리한다고 생각하면 이해를 쉽게 할 수 있습니다.
{
title: "Post Title 1",
body: "Body of post.",
category: "News",
likes: 1,
tags: ["news", "events"],
date: Date()
}
이 구조에서 title , body, category, likes, tags, date는 key 이며 해당 하는 키들의 값을 value로 지칭하합니다. MongoDB에서는 데이터를 이러한 형태로 저장하게 됩니다.
MongoDB의 장점과 단점
MongoDB의 장단점을 소개하기에 앞서 먼저 확실하게 알아두어야 할 내용이 있습니다. RDBMS를 사용하거나 NoSQL을 선택하여 사용하는 것은 각자의 장단점이 존재하기 떄문에 무엇이 좋다 할 수는 없습니다. 정리하자면 본인이나 속한 조직이 만들어내야할 작업물에 각자의 장단점을 분석해 보았을 떄 적절하다고 판단되는 DBMS를 선택하여 사용하는 것이 중요합니다.
MongoDB의 장점
- 스키마 - 리스 디자인 : RDBMS에서 데이터 요구에 따라 스키마를 구성하고 수정하는 것과 달리 스키마 구조가 없기 떄문에 유연하게 데이터를 다루는 것이 가능
- 확장성 : MongoDB는 read 기능을 위한 레플리카 세트와 wrtire 기능을 위한 샤딩을 제공해 뛰어난 확장성을 보여줍니다(레플리카와 샤딩에 대해서는 추후 포스팅 하겠습니다)
MongoDB의 단점
- 트랜잭션 지원의 한계 : 유연하다는 말은 사실 엄격하지 않다는 말을 반증합니다. 물론 MongoDB도 다중 Dpcument에 대한 트랜잭션을 지원하지만 RDBMS 와 같은 엄격한 트랜잭션을 지원하지는 않습니다(ACID를 지키지 않음).
- JOIN 의 부재 : JOIN을 지원하는 RDB와 달리 이러한 기능을 지원하지 않기 때문에 join이 빈번하게 필요한 데이터 베이스 구조에서는 적합하지 않습니다.
MongoDB에 장단점에 대해 간략하게 알아보았습니다. 정리하자면 MongoDB는 ACID를 지키지 않고 스키마가 없기 때문에 빠른속도와 대규모 데이터 처리에 장점을 가지고 있습니다. 그렇지만 정형화된 패러다임을 제시하지 않기 때문에 정형화된 데이터 구조가 필요하거나, JOIN이 필요한 업무가 빈번하게 발생할 경우 적합하지 않습니다.
'데이터 베이스 > MongoDB' 카테고리의 다른 글
Compass를 이용한 DB서버 접속 및 생성 (0) | 2023.06.17 |
---|---|
BSON (0) | 2023.06.17 |
MongoDB의 구조 (0) | 2023.06.17 |
MongoDB는 왜 빠른가? (1) | 2023.06.17 |
MongoDB 설치하기 (0) | 2023.06.17 |