F-Lab
🚀
상위 1% 개발자에게 1:1로 멘토링 받아 성장하세요

분류로 살펴보는 DBMS 이야기

writer_thumbnail

F-Lab : 상위 1% 개발자들의 멘토링

성장에 관심이 많은 F-Lab 백앤드 멘토 Elkein
스타트업 여럿과 NHN, 넷마블, 크래프톤 등을 거쳤으며
게임 산업, 클라우드 플랫폼 개발, 웹 개발 등을 두루 경험한 19년 차 엔지니어

개요

백엔드 개발자라면 DB는 하나 이상 다루게 된다. 영속성을 위해서 DB는 필수 요소다.
많은 사람들이 DB를 떠올릴 때 RDB를 먼저 떠올리는데, 이는 DB의 발전과정에서 RDB가 기여한 부분했고, 오랜 기간 RDB를 잘 쓰기 위한 노력과 고민에 시간과 노력을 기울여와서 그렇다고 생각한다. 어느덧 NoSQL이 등장한지도 오래 되었고, MongoDB는 국내에서도 아주 많은 회사에서 적극적으로 활용하고 있다. 이러한 관점에서 DB를 큰 맥락에서 카테고리화 하고, 각각의 장단점과 어떤때 쓰면 좋을지를 살펴보도록 하겠다.

RDB

Relational Database로 부르며 DB라 하면 RDB를 지칭한다고도 볼 수 있다. 국내외 메이저한 RDB중 4개만 선별해서 설명해보도록 하겠다.

MySQL

  • 웹 애플리케이션: MySQL은 웹 개발에서 가장 많이 사용되는 데이터베이스 시스템 중 하나입니다. 블로그, 포럼, 소셜 미디어, 온라인 쇼핑몰 등의 웹 애플리케이션에서 널리 사용된다.
  • 스타트업 및 중소기업: 경제적으로 접근 가능한 비용과 빠른 구축 속도로 인해 많은 스타트업과 중소기업이 MySQL을 사용하여 초기 제품을 개발하고 운영한다.

Oracle

  • 대규모 엔터프라이즈 시스템: Oracle은 대규모 데이터베이스 시스템이 필요한 금융, 통신, 제조 및 공공 부문과 같은 엔터프라이즈 시스템에서 주로 사용됩니다. 고성능, 확장성 및 보안 요구를 충족시키는 데 강점을 가지고 있다.
  • 금융 및 거래 처리: 금융 기관이나 온라인 거래 플랫폼에서 신뢰성 높은 데이터 처리가 필요한 경우 Oracle이 선택될 수 있다.

PostgreSQL

  • 데이터 분석 및 과학: PostgreSQL은 데이터 분석 및 과학 분야에서 자주 사용됩니다. 복잡한 쿼리와 고급 데이터 분석 기능을 필요로 하는 경우에 적합하다.
  • 지리 정보 시스템(GIS): PostgreSQL의 확장 가능성과 공간 데이터 처리 능력은 지리 정보 시스템과 공간 분석 애플리케이션에서 널리 사용되는 이유 중 하나다.

SQL Server

  • 비즈니스 인텔리전스 및 보고서: SQL Server는 비즈니스 인텔리전스 툴과의 통합성이 뛰어나며, 대시보드, 보고서 및 분석을 위한 데이터 웨어하우스 환경에서 사용된다.
  • Windows 환경에서의 애플리케이션: SQL Server는 마이크로소프트의 제품군과 원활한 통합이 가능하여, Windows 기반의 애플리케이션과 함께 사용되는 경우가 많다.

Distribute SQL

데이터를 여러 서버 또는 노드에 분산하여 저장하고 처리하는 데 중점을 둔 특징을 가지고 있다.

특징 자체가 분산에 있다 보니, 분산 시스템을 구축하고 운용하는 데에 있어 기본 도구를 이용만 해도 많은 부분이 가능한 점 등 이점이 많습니다.

MongoDB

  • 용도: 문서 지향적 데이터 저장에 적합합니다. 다양한 형태의 데이터를 BSON(Binary JSON) 형식의 문서로 저장하며, 스키마의 유연성을 가지고 있다.
  • 상황: 복잡한 데이터 구조를 다루는 경우나, 스키마의 변동성이 크거나 예측 불가능한 경우에 유용합니다. 웹 애플리케이션, 블로그, 컨텐츠 관리 시스템 등에 활용될 수 있다.
  • 장점: 유연한 스키마, 쉬운 확장, 다양한 쿼리 기능, Replication 및 Sharding 지원 등이 있다.
  • 단점: Join 연산의 어려움, 복잡한 쿼리의 성능 문제 등이 있다.

Couchbase

  • 용도: 분산된 환경에서 높은 성능을 요구하는 애플리케이션에 적합합니다. Key-Value와 문서 데이터 모델을 지원하며, 메모리 기반 캐싱을 강조하다.
  • 상황: 실시간 분석, 게임 서버, 세션 관리 등의 경우에 사용될 수 있습니다. 데이터의 높은 처리량과 낮은 지연 시간을 필요로 하는 애플리케이션에 적합하다.
  • 장점: 뛰어난 확장성, 자동 장애 복구, 인메모리 캐싱, NoSQL과 SQL 쿼리의 결합 등이 있다.
  • 단점: 복잡한 쿼리에 대한 지원이 상대적으로 덜 강조되며, 비교적 최신 기술이므로 덜 보편적일 수 있다.

Cassandra

  • 용도: 대규모 분산 데이터 저장에 적합한 시스템입니다. 특히 높은 가용성과 확장성을 필요로 하는 애플리케이션에 적합하다.
  • 상황: 로그 및 이벤트 데이터 저장, 센서 데이터 수집, 소셜 미디어 분석 등에서 사용될 수 있다.
  • 장점: 고 가용성, 자동 복제, 분산 확장성, 빠른 읽기/쓰기 속도 등이 있습니다.
  • 단점: 복잡한 쿼리 및 트랜잭션 처리에는 적합하지 않을 수 있으며, 데이터 모델링이 상대적으로 복잡할 수 있다.

In-Memory DB

인메모리 데이터베이스 (In-Memory DB)는 데이터를 주로 RAM에 저장하고 처리하는 데이터베이스 시스템을 말한다.주로 실시간 분석, 캐싱, 세션 관리, 실시간 이벤트 처리 등에 활용되며, 특히 데이터 속도와 응답 시간이 중요한 응용 프로그램 및 시스템에서 주로 사용된다.

Redis

  • 장점
    • 매우 빠른 읽기 및 쓰기 성능을 제공하는 인메모리 데이터 스토어다.
    • 다양한 데이터 구조 (문자열, 해시, 리스트, 집합 등)를 지원하여 다양한 용도로 활용할 수 있다.
    • Pub/Sub 메커니즘을 통한 실시간 이벤트 처리가 가능하다.
    • 지속성을 제공하며 데이터를 디스크에 저장할 수 있다.
  • 단점
    • 메모리 제약이 있을 경우 데이터를 보존하기 위해 디스크 스토리지를 사용해야 하므로 일부 성능 저하가 발생할 수 있습니다.
    • 복제와 고가용성 설정이 복잡할 수 있습니다.
    • 단일 스레드 모델을 사용하므로 병렬 처리에 제한이 있습니다. 

Aerospike

  • 장점
    • 높은 성능을 위한 특별한 디자인으로 데이터의 신속한 읽기 및 쓰기가 가능합니다.
    • 자동화된 클러스터 관리 및 자동 분산 처리를 제공합니다.
    • 실시간 쿼리 및 인덱싱을 지원하여 복잡한 데이터 검색이 용이합니다.
    • SSD 기반 스토리지를 활용하여 내구성과 빠른 속도를 동시에 유지할 수 있습니다.
  • 단점
    • 라이선스 및 비용 측면에서 제약이 있을 수 있다.
    • 몇몇 데이터 구조의 지원이 부족할 수 있다.
    • 데이터 모델에 제한이 있을 수 있다.

Hazelcast

  • 장점
    • 분산 인메모리 데이터 그리드를 제공하여 높은 확장성과 성능을 갖춘 분산 시스템을 구축할 수 있다.
    • 클러스터링, 부하 분산, 데이터 파티셔닝 등의 기능을 지원하여 대규모 시스템에서 유용하다.
    • 분산 락, 맵 리던션, 이벤트 처리와 같은 기능을 제공하여 복잡한 분산 시스템을 구현할 수 있다.
  • 단점
    • 일부 기능의 설정이 복잡할 수 있다.
    • 네트워크 지연이 발생할 경우 성능에 영향을 미칠 수 있다.
    • 데이터를 완전히 인메모리에서 관리하므로 메모리 제약이 있을 경우 고려해야 한다.

MetricDB

MetricDB의 경우 시계열 데이터를 다루는 데에 적합하다.

시계열 데이터란 시간에 따라 기록된 데이터를 말한다. 이 데이터는 일련의 순차적인 시간 점들로 구성되며, 보통 일정한 간격으로 측정된 값들이나 사건들을 포함한다. 시계열 데이터는 주로 주식 가격, 날씨 정보, 경제 지표, 교통량 등과 같이 시간이 중요한 역할을 하는 데이터를 다룰 때 사용될 때 그 장점과 차별점이 극대화 된다. 이러한 데이터를 MetricDB로 따로 쓰는 이유는, 이런식의 누적 값에 대한 연산, 기록, 집계 등의 동작이 RDB에서도 느리고, 범용 NoSQL에서도 느린 경우가 종종 있기 때문이다.

InfluxDB

  • 장점
    • 성능: InfluxDB는 고성능을 자랑하며 대규모의 시계열 데이터를 효율적으로 저장하고 조회할 수 있다.
    • SQL 유사 언어: InfluxQL이라는 SQL과 유사한 질의 언어를 제공해 데이터에 접근하고 조작하기 쉽다.
    • 다양한 통합: 다양한 데이터 소스와의 연동을 지원하며, Grafana와 같은 시각화 도구와도 통합이 용이하다.
  • 단점
    • 확장성: 고가용성 및 확장성 측면에서 다른 데이터베이스에 비해 미흡할 수 있다.
    • 오픈 소스 버전 제약: InfluxDB의 오픈 소스 버전은 몇 가지 제약 사항을 가질 수 있다.
  • 용도 및 상황
    • InfluxDB는 센서 데이터, 애플리케이션 성능 모니터링 등의 시계열 데이터를 저장하고 조회하기 위한 용도로 적합하다.
    • 중소규모의 데이터 스트림을 처리하거나 모니터링과 분석에 활용될 수 있다.

KairosDB

  • 장점
    • 오픈 소스: KairosDB는 오픈 소스 프로젝트로, 커뮤니티 기여와 개발이 가능하다.
    • 플러그인 아키텍처: 다양한 플러그인을 통해 데이터 수집, 저장, 처리 기능을 확장할 수 있다.
    • 확장성: 클러스터링 및 데이터 샤딩을 통해 대량의 데이터를 처리하는데 용이하다.
  • 단점
    • 문서화와 커뮤니티 지원: InfluxDB나 Prometheus에 비해 상대적으로 문서화와 커뮤니티 지원이 제한적일 수 있다.
  • 용도 및 상황
    • KairosDB는 오픈 소스 환경에서 시계열 데이터를 처리하고 다양한 데이터 처리 기능을 추가하려는 경우에 적합하다.
    • 확장성이 필요한 시스템에서 사용될 수 있다.

Prometheus

  • 장점
    • 강력한 쿼리 언어: PromQL은 풍부한 집계 및 쿼리 기능을 제공하여 복잡한 모니터링 요구 사항을 충족시킨다
    • 다양한 지원: Kubernetes, Docker와 같은 컨테이너 환경에서 모니터링을 위한 네이티브 지원을 제공한다.
      경고 및 알림: 내장된 경고 엔진을 통해 실시간 알림을 설정할 수 있다.
  • 단점
    • 데이터 보존 정책: Prometheus는 일정 기간 후에 데이터를 삭제하는 등의 보존 정책 관리에 대한 기능이 상대적으로 미흡할 수 있다.
    • 장기 보존: 장기적으로 데이터를 저장하는 기능이 없어서 장기 보존을 위해서는 추가적인 솔루션이 필요할 수 있다.
  • 용도 및 상황
    • Prometheus는 클라우드 네이티브 환경이나 컨테이너 환경에서의 모니터링에 매우 적합하다.
    • 특히 동적으로 변화하는 인프라에서 뛰어난 모니터링을 위해 사용할 수 있다.

GraphDB

요약하자면, GraphDB는 복잡한 관계 데이터 모델링과 데이터의 유연한 스키마 변경에 강점을 가지며, 관계 중심 데이터 분석에 적합하다. 반면에 RDB는 정형화된 데이터 처리, ACID 트랜잭션, SQL 쿼리 기능, 대용량 데이터 처리 등에 뛰어나며, 데이터 일관성과 무결성을 강조하는 애플리케이션에 적합하다. 선택은 사용 사례와 요구 사항에 따라 달라질 수 있다.

Neo4j

  • Neo4j는 가장 유명하고 널리 사용되는 그래프 데이터베이스 중 하나다.
  • 그래프 데이터 모델을 기반으로 하는 이 데이터베이스는 복잡한 관계를 효과적으로 모델링하고 조회할 수 있는 강력한 기능을 제공하고, 또한 Cypher라는 질의 언어를 사용하여 그래프 데이터를 쿼리하고 조작할 수 있다.

Amazon Neptune

Amazon Neptune은 아마존 웹 서비스(AWS)에서 제공하는 완전 관리형 그래프 데이터베이스다. 네트워크, 지리, 소셜 관계와 같은 복잡한 데이터를 저장하고 분석하기에 적합한 기능을 제공한다. Neptune은 Gremlin과 SPARQL이라는 두 가지 쿼리 언어를 지원한다.

OrientDB

OrientDB는 멀티 모델 데이터베이스로서, 문서, 키-값, 객체 및 그래프 모델을 모두 지원한다. 그래프 기능은 그래프 데이터베이스와 관련된 다양한 작업을 수행할 수 있도록 해준다.

ArangoDB

ArangoDB는 멀티 모델 데이터베이스로서, 문서, 그래프 및 키-값 데이터 모델을 지원합니다. 그래프 데이터 모델은 관계형 데이터베이스와 유사한 관계를 표현하면서도 그래프의 장점을 활용할 수 있게 해준다.

JanusGraph

JanusGraph는 Apache TinkerPop 그래프 컴퓨팅 프로젝트의 일부로 개발되었으며, 분산 그래프 데이터베이스다. 대용량 데이터를 분산 환경에서 저장하고 쿼리하는 데 적합하다.

Embeded DB

Embeded DB는 응용 프로그램 내에 데이터베이스 엔진이 내장되어 있는 데이터 저장 및 관리 시스템을 말합니다. 이러한 데이터베이스 시스템은 외부 서버나 프로세스 없이 응용 프로그램 내에서 동작하며, 주로 소규모 프로젝트나 임베디드 시스템, 모바일 앱 등에서 사용됩니다.

iOS의 많은 앱들이 선택한 DB로 SQLite가 가장 유명하며, 이외에도 서버 내부의 내장 디비, 캐시 용도 등 다양하게 이용된다.

장점

  1. 간단한 구현: 내장형 데이터베이스는 작은 규모의 응용 프로그램에서 구현하기 간단하며, 응용 프로그램과 함께 배포되기 때문에 별도의 서버나 설치 과정이 필요하지 않습니다.
  2. 성능: 데이터베이스 엔진이 응용 프로그램 내부에 있기 때문에 데이터 접근이 빠르며, 로컬 데이터 저장에 최적화되어 있습니다.
  3. 독립성: 외부 서버나한다. 주로 모바일 앱이나 임베디드 시스템에서 사용되며, 파일 기반으로 데이터를 저장한다.

RDB와의 비교

관계형 데이터베이스(RDB)는 일반적으로 중앙 집중식 데이터베이스 서버를 사용하는 반면, 내장형 데이터베이스는 응용 프로그램 내부에서 동작한다. 아래는 RDB와 내장형 데이터베이스 간 비교 해보자.

RDB

  • 장점: 대용량 데이터 처리와 복잡한 데이터 모델링에 적합하며, 다양한 고급 기능 제공.
  • 단점: 서버 구성 및 유지보수 비용이 들며, 네트워크 지연에 따른 성능 문제 가능.

내장형 데이터베이스

  • 장점: 간단한 구현, 빠른 성능, 독립성 및 보안 제공.
  • 단점: 작은 규모의 데이터 처리에 적합하며, 고급 기능이나 대용량 데이터 처리에는 제한적.

어떤 데이터베이스 시스템을 선택할지는 프로젝트 요구 사항과 제한 사항에 따라 다를 수 있다. 대용량 데이터 처리나 복잡한 데이터 모델링이 필요한 경우에는 RDB가 적합할 수 있고, 작은 규모의 응용 프로그램이나 임베디드 시스템에서는 내장형 데이터베이스가 유용할 수 있다. 기존에는 모바일 앱 등이나, 네트웍을 사용하지 못하는 망 분리 환경 등에서 많이 이용 되었는데, 최근에는 서버의 캐시나, 중간 저장소 역할, 또 메인 DB로써 사용하는 케이스 마저 등장하고 있어 활용도는 무궁 무진해보인다.

마치며

한국에서는 자바 (코틀린), 스프링 부트, JPA가 표준 기술인것 처럼 인식되다보니, 아무래도 RDB 외의 다른 DB를 주니어 분들이 접하긴 더더욱 어려운 것 같다.

DB의 발전은 어느 때 보다 활발하며, 기존 DB를 활용하거나, 확장해서 아주 많은 DB가 출현하고 있는 지금, 다양한 DB를 적재 적소에 활용한다면 조금 더 완성도 높은 어플리케이션을 구축할 수 있다고 생각한다. 물론 프로덕션에서는 더 많은 검증과 테스트를 해야만 도입 할 수 있겠지만, 이 글이 그러한 시도에 계기이자 촉진제, 기폭제가 되었으면 하는 바램이다.

 


 

 

F-Lab은 node.js(nest.js) 멘토님을 모집하고 있습니다!

초급 개발자가 아닌 중급 개발자들을 양성하며 개발자 생태계에 기여하는 보람과 상위 1% 개발자 네트워크에서 활동하며 자기 자신도 성장시킬 수 있습니다!

 

ⓒ F-Lab & Company

이 컨텐츠는 F-Lab의 고유 자산으로 상업적인 목적의 복사 및 배포를 금합니다.

조회수

멘토링 코스 선택하기

  • 코스 이미지
    Java Backend

    아키텍처 설계와 대용량 트래픽 처리 능력을 깊이 있게 기르는 백앤드 개발자 성장 과정

  • 코스 이미지
    Frontend

    언어와 프레임워크, 브라우저에 대한 탄탄한 이해도를 갖추는 프론트엔드 개발자 성장 과정

  • 코스 이미지
    Android

    아키텍처 설계 능력과 성능에 대한 경험을 바탕으로 딥다이브하는 안드로이드 개발자 성장 과정

  • 코스 이미지
    Python

    대규모 서비스를 지탱할 수 있는 대체 불가능한 백엔드, 데이터 엔지니어, ML엔지니어의 길을 탐구하는 성장 과정

  • 코스 이미지
    iOS

    언어와 프레임워크, 모바일 환경에 대한 탄탄한 이해도를 갖추는 iOS 개발자 성장 과정

  • 코스 이미지
    Node.js Backend

    아키텍처 설계와 대용량 트래픽 처리 능력을 깊이 있게 기르는 백앤드 개발자 성장 과정

  • 코스 이미지
    ML Engineering

    머신러닝과 엔지니어링 자체에 대한 탄탄한 이해도를 갖추는 머신러닝 엔지니어 성장 과정

  • 코스 이미지
    Data Engineering

    확장성 있는 데이터 처리 및 수급이 가능하도록 시스템을 설계 하고 운영할 수 있는 능력을 갖추는 데이터 엔지니어 성장 과정

  • 코스 이미지
    Game Server

    대규모 라이브 게임을 운영할 수 있는 처리 능력과 아키텍처 설계 능력을 갖추는 게임 서버 개발자 성장 과정

  • 코스 이미지
    Game Client

    대규모 라이브 게임 그래픽 처리 성능과 게임 자체 성능을 높힐 수 있는 능력을 갖추는 게임 클라이언트 개발자 성장 과정

  • 코스 이미지
    Flutter

    크로스 플랫폼에서 빠른 성능과 뛰어난 UI를 구현할 수 있는 능력을 갖추는 플러터 개발자 성장 과정

  • 코스 이미지
    해외취업 코스

    해외 취업을 위한 구체적인 액션을 해보고, 해외 취업에 대한 다양한 정보를 얻을 수 있는 과정

  • 코스 이미지
    Devops 코스

    대규모 아키텍처를 설계할 수 있고, 그 인프라를 구성할 수 있는 엔지니어로 성장하는 과정

F-Lab
소개채용멘토 지원
facebook
linkedIn
youtube
instagram
logo
(주)에프랩앤컴퍼니 | 사업자등록번호 : 534-85-01979 | 대표자명 : 박중수 | 전화번호 : 0507-1315-4710 | 제휴 문의 : info@f-lab.kr | 주소 : 서울특별시 강남구 테헤란로63길 12, 438호 | copyright © F-Lab & Company 2024