RDBMS vs NoSQL

정세욱·2024년 4월 15일
0

데이터베이스에 관한 공부를 하다보면, 대부분이 처음에 접하게되는 MySQL과 같은 RDBMS 이외에도 NoSQL에 대해서도 접하게 된다.
실제로 프로젝트에 사용될 DB를 적절하게 고르는 것은 매우 중요한데, 여기서는 두 가지 주요한 데이터베이스 유형인 RDBMS와 NoSQL에 대해 설명하고 각각의 특성을 비교해보며 어떤 상황에서 어떤 데이터베이스를 선택해야 할지 알아보겠다.


RDBMS (Relational DataBase Management System)

RDBMS는 테이블 구조에 데이터를 저장한다. 각 테이블은 열(column)과 행(row)로 구성된다. RDBMS의 핵심 기능 중 하나는 'SQL (Structured Query Language)'을 사용하여 데이터를 쿼리(조회)하는 것이다.

대표적인 예

  • Oracle
  • MySQL
  • PostgreSQL
  • Microsoft SQL Server

장점 (대표적인 MySQL을 중심으로)

  • 엄격한 데이터 무결성 : 데이터의 정확성과 신뢰성을 보장하는 강력한 트랜잭션 처리와 데이터 무결성을 제공한다. 서로 관련된 여러 데이터 작업을 한번에 처리해야 할 때 유용하다.
  • 복잡한 쿼리 지원 : SQL은 매우 강력한 쿼리 언어로, 복잡한 쿼리를 쉽게 작성할 수 있다.
  • 관계 표현 : 서로 관련된 데이터 간의 관계를 명확히 할 수 있다.
  • 보편적인 사용 : SQL 기반 데이터베이스는 많은 개발자와 시스템에 널리 사용되어 있어, 호환성 및 지원 측면에 이점이 있다.
  • 각 데이터를 중복 없이 한 번만 저장한다.

단점

  • 확장성 : 대규모 분산 데이터를 처리하는 데 있어 수직적 확장(scale up)에는 유리하지만, 수평적 확장(scale out 등)은 제한적이다.
  • 유연성이 떨어져 데이터 스키마, 테이블을 사전에 계획해야 하므로 추후 수정이 어렵다.

    💡 수직, 수평적 확장? scale up, out?
    scale up : 하드웨어 성능 향상
    scale out : 서버 추가


NoSQL (Not Only SQL)

NoSQL 데이터베이스는 비관계형 데이터 저장 방식을 사용하며, 유연성이 월등히 높다. NoSQL은 문서(Document), 키-값(Key-Value), 그래프, 열 기반(Column-based) 등 다양한 데이터 모델을 지원하여, 다양한 유형의 데이터를 효율적으로 처리할 수 있다.

💡 Not Only SQL?
SQL에만 의존하지 않는 데이터베이스 기술이라는 의미로, 2000년대 후반 클라우드 컴퓨팅과 대규모 분산 시스템의 부상으로 인해 주목받기 시작했다.

NoSQL의 등장 배경

전통적인 RDBMS는 엄격한 스키마, 테이블 간의 관계 정의, 복잡한 조인 연산 등을 통해 데이터의 무결성과 일관성을 보장한다. 이러한 특성은 금융 시스템이나 회계 시스템과 같이 저확한 데이터 처리가 중요한 분야에서 큰 장점으로 작용한다. 하지만, 웹의 급격한 성장과 소셜 미디어, 빅 데이터 등의 출현으로 데이터 양이 폭발적으로 증가하면서 이러한 시스템들의 수직적 확장 한계와 복잡한 쿼리에 의한 성능 저하 문제가 드러났다.
이에 따라 구조화되지 않은 데이터를 빠르게 처리하고, 수평적 확장이 가능하며 유연한 스키마를 제공할 수 있는 새로운 형태의 데이터베이스가 필요하게 되었으며 이러한 요구를 충족하기 위해 등장한 것이 NoSQL DB이다.

대표적인 예

  • MongoDB
  • Redis
  • Cassandra
  • Neo4j (그래프)

장점 (대표적인 MongoDB를 중심으로)

  • 확장성 (스케일 아웃 용이): 데이터를 수평적으로 확장할 수 있어 대용량 데이터 처리에 적합하다.
  • 유연한 데이터 모델 : MongoDB는 스키마리스이기 때문에 문서 기반 데이터 모델을 제공한다. 데이터 구조가 변할 가능성이 있거나, 다양한 형태의 데이터를 저장해야할 경우 유리하다.
  • JSON 형태의 데이터 처리 : JSON형태로 데이터를 쉽게 저장하고 쿼리할 수 있어, 개발이 빠르고 간편한다.

단점

  • SQL만큼 표준화된 쿼리 언어가 없어 학습 곡선이 다소 있을 수 있다.
  • 데이터 중복을 계속 업데이트해야 하며, 데이터가 여러 컬렉션에 중복되어 있기 때문에 수정이 필요한 경우 모든 컬렉션에서 수행해야 한다.

🤔 그렇다면, 언제 무엇을 사용해야할까?

RDBMS를 선택해야 할 경우

  • 데이터 무결성과 정확한 트랜잭션 처리가 중요한 금융, 회계 시스템과 같은 애플리케이션에 적합하다.
  • 복잡한 쿼리와 보고서가 필요한 Business Intelligience 및 데이터 분석 작업에 유리하다.

NoSQL을 선택해야 할 경우

  • 대량의 구조화되지 않은 데이터를 빠르게 처리해야 할 때 유리하다. 예를 들면 소셜 미디어
  • 빠른 속도와 대규모 확장성이 요구되는 대용량 웹 애플리케이션에 적합하다.

마치며

어떤 DB를 선택해야 맞다는 정답은 없는 것 같다. 다만, 각 데이터베이스 유형의 특성을 이해하고 프로젝트의 요구사항과 맞추어 적절한 선택을 하는 것은 매우 중요하다. 데이터의 중요성과 역할을 정확히 파악하고 가장 적합한 도구를 사용할 수 있게 해보자.

0개의 댓글