grep

Backend

mongoDB Story 1: mongoDB 정의와 NoSQL

NHN

2021년 6월 9일

원문에서 보기 ↗

1.png "mongoDB"라는 데이터베이스를 들어보셨나요? 이미 잘 아시는 분들도 있겠지만 Oracle, Microsoft SQL Server, DB2, MySQL과 같은 관계형 데이터베이스 제품으로 생각하시는 분들도 있을 겁니다. 물론 데이터베이스 제품인 것은 맞지만 중요한 것은 관계형 데이터베이스가 아니라는 겁니다. 그럼 관계형 데이터베이스가 아닌 것이 왜 중요할까요? 그리고 기존 데이터베이스 제품들과 무엇이 다르고 어떻게 데이터 모델을 설계해야 할까요?

위의 질문에 대해 다음과 같은 순서로 내용을 살펴보도록 하겠습니다.

1-1. mongoDB 란?

mongoDB 정의를 찾아보면 "NoSQL 데이터베이스의 한 종류인 도큐먼트 데이터베이스로서 거대한 데이터베이스라는 의미의 Humongous(거대한) Database를 줄인 mongoDB로 명명되어 2009년 10 gen(현재는 mongoDB Inc로 사명을 변경함)에 의해 출시된 오픈소스 데이터베이스"로 소개되고 있습니다. 그렇다면 NoSQL 데이터베이스는 무엇이고 또 도큐먼트 데이터베이스는 무엇일까요? 그리고 관계형 데이터베이스와 비교하여 어떤 차이가 있을까요? 지금부터 mongoDB를 이해하기 위한 첫걸음으로 배경지식을 알아보도록 하겠습니다.

1-2. NoSQL 이란?

현재의 데이터베이스는 단순히 데이터 저장소라는 개념을 뛰어넘어 지난 40여 년간 확고히 자리 잡은 관계형 데이터베이스를 암묵적으로 의미하고 있습니다. 사실 관계형 데이터베이스 이전에도 파일 데이터베이스와 네트워크 데이터베이스 등이 존재했지만 여러 문제점을 가지고 있었으며 이를 해결하기 위해 1970년대 E.F Code 박사가 관계형 데이터베이스 논문을 발표한 후 각 벤더사들이 제품화한 것이 바로 우리가 잘 알고 있는 Oracle, Microsoft SQL Server, DB2, MySQL과 같은 관계형 데이터베이스 관리시스템(이하 RDBMS)입니다. 또한 비슷한 시기에 개발된 SEQUEL(Structured English Query Language의 약어로 당시 영국 항공사의 이름과 같아 Structured Query Language, 약어로는 SQL로 변경됨)은 RDBMS와 인터페이스를 위한 명령어로 채택되었고 이후 RDBMS 종류와 관계없이 사용할 수 있도록 표준화한 것이 ANSI(American National Standards Institut) SQL입니다.

그러나 관계형 데이터베이스가 기존 데이터베이스의 문제점에서 출발했듯이 관계형 데이터베이스 역시 한계점을 노출하게 되었으며 이로 인해 새로운 데이터베이스인 NoSQL이 탄생하게 되었습니다. NoSQL은 이론을 기반으로 생성된 데이터베이스라기보다는 1998년 Carlo Strozzi가 표준 SQL 인터페이스를 채용하지 않은 자신의 오픈소스 관계형 데이터베이스를 NoSQL이라고 최초로 명명한 후 새롭게 2009년 Johan Oskarsson이 오픈소스 분산 데이터베이스 행사에서 이러한 데이터베이스를 NoSQL라고 부르며 개념화되기 시작했습니다.

NoSQL은 초기엔 주로 탈 RDBMS를 의미하는 표준화된 구조적 질의 언어가 없는 데이터베이스(No SQL) 또는 관계를 갖지 않는 데이터베이스(Nonrelational Operational Database SQL)로 정의하였지만 현재는 앞의 두 가지 의미 외에도 SQL뿐만 아니라 여러 가지 기능을 제공(Not Only SQL)한다는 의미로 일반화되었습니다. 2.png

1-3. NoSQL DB 종류

NoSQL 데이터베이스의 종류는 키-값 데이터베이스, 도큐먼트 데이터베이스, 칼럼 패밀리 데이터베이스, 그래프 데이터베이스로 나뉘며 아래 그림은 관계형 데이터베이스와 4가지 종류의 NoSQL 데이터베이스를 각각의 대표 제품과 함께 나타낸 그림입니다. 3.png

이렇게 다양한 데이터베이스는 대한민국과 전 세계에서 얼마나 사용되고 있을까요? 이에 대해 구글 트렌드에서 확인한 결과 여전히 관계형 데이터베이스가 압도적으로 많이 사용되고 있지만 매년 사용량이 줄어들고 있으며 이에 반해 NoSQL 데이터베이스는 2009년 이후 꾸준히 사용되고 있습니다. 또한 NoSQL 데이터베이스의 종류별 사용에 있어서는 대한민국과 전 세계 모두 redis와 mongoDB의 사용빈도가 높으나 Cassandra의 사용빈도에서는 큰 차이를 보이고 있습니다. 4.png 5.png

1-4. NoSQL DB 특징

NoSQL 데이터베이스는 각 DBMS별로 차이가 있으나 일반적으로 다음과 같은 특징을 가지고 있습니다. 6.png

1-5. NoSQL DB vs 관계형 DB 비교

NoSQL 데이터베이스와 관계형 데이터베이스에 대해 일반적인 성격을 비교한 내용은 다음과 같습니다.

항목NoSQL DB관계형 DB
적합업무- 오프라인에서 정형 및 비정형 데이터 분석 업무 - 초당 동시 처리가 중요한 업무 - 로그 및 이력 등의 단순 기록형 업무- 데이터 무결성 및 일관성이 중요한 트랜잭션 업무 - 온라인에서 다양한 집계 및 통계를 분석하는 업무 - 복잡한 계산 및 실시간 데이터 정합성이 필요한 업무
데이터 모델- 서비스에 맞는 DB 선택이 중요함 - 반정 규화에 의한 설계를 기본으로 함 - 비정형화 스키마 구조로 미리 스키마를 선언하지 않음- 엔티티 및 각 엔티티 간 관계를 정의함 - 엔티티 정의 시 정규화에 의한 설계가 중요함 - 테이블, 칼럼 등 DB요소에 대한 스키마를 엄격히 관리함
성능- 클러스터 크기, 네트워크 및 애플리케이션에 의해 성능이 결정됨- 성능 향상을 위해서는 성능 최적화 작업이 필요함
인터페이스- 쿼리 외 다양한 API를 통한 데이터 저장 및 검색이 가능함- SQL을 통해서만 데이터 저장 및 검색이 가능함
장점- 쿼리 프로세싱이 단순화되어 대용량 데이터 처리 성능이 향상됨- 데이터 중복 배제로 데이터 이상 발생 및 용량 증가를 최소화함
단점- 데이터 중복에 의해 데이터 일관성이 저하되고 용량이 증가함- 조인이 복잡한 경우 쿼리 프로세싱도 복잡해져 성능이 저하됨

1-6. NoSQL DB vs 관계형 DB 기술요소

NoSQL 데이터베이스와 관계형 데이터베이스의 기술요소는 업무 성격에 따른 데이터베이스 선택 시 충분히 고려해야 할 가장 중요한 요소이며 자세한 내용은 다음과 같습니다.

항목NoSQL DB관계형 DB
기술 요소BASE (Basically Available, Soft State, Eventually Consistent)ACID (Atomicity, Consistency, Isolation, Durability)
기술 요소 상세11.png - Master 서버에 장애 발생 시에도 여러 Slave 서버로 인해 무중단 서비스가 가능함7.png - 트랜잭션은 최소의 업무단위로 트랜잭션에 포함된 연산(① ~ ④)은 모두 처리되거나 또는 미처리되어야 함
12.png - 각각의 데이터가 도달한 시점에 데이터가 갱신됨8.png - 트랜잭션 성공 시 DB는 일관된 상태를 유지해야 함
13.png - 복제 메커니즘에 의해 모든 서버에 데이터 복제가 동시에 실행될 수 없음 - 시스템 부하 및 네트워크 속도에 따라 서버에 복제하는 시간이 다를 수 있으나 최종적으로는 모든 서버에 데이터가 복제됨10.png - 실행 중인 트랜잭션의 중간에 다른 트랜잭션(③번)이 접근할 수 없음 9.png - 트랜잭션 성공 시 그 결과는 장애 발생 여부와 관계없이 DB에 저장되어야 함
특징데이터 가용성과 데이터 처리 성능이 향상되도록 함데이터 일관성을 위해 트랜잭션이 안전하게 수행되도록 함
업무 범위시스템 전체 대상트랜잭션
중점 사항서비스 가용성데이터 일관성

1-7. Reference

지금까지 mongoDB의 정의와 NoSQL에 대해 알아보았으며 다음 글에서는 mongoDB의 특징과 구성요소에 대해 자세히 살펴보도록 하겠습니다. 긴 글 읽어주셔서 감사합니다.

※ 이미지 출처