본문으로 건너뛰기

버그 제보

이상한 점을 알려 주시면 고칠게요. 지금 보고 있는 페이지와 브라우저 정보가 함께 담겨요.

페이지:

Backend

용도별 데이터베이스와 고르는 법

작성 2026. 10. 21.추가
목차8개 항목
출처와 참고

질문으로 나누기

DB는 수백 종이 있지만, 어떤 질문에 빨리 답하도록 데이터를 배치했나로 나누면 몇 갈래로 줄어든다. 관계형·NoSQL·NewSQL이라는 큰 분류와 NoSQL 네 유형의 정의는 데이터베이스 모델에 있다.

유형잘 답하는 질문저장 방식의 핵심대표
관계형(OLTP)「주문 7번을 결제 완료로 바꿔라」 짧은 읽기·쓰기를 정확하게행 단위 저장, ACID 트랜잭션, 조인PostgreSQL, MySQL, MariaDB, SQLite, Oracle
분석형(OLAP)「지난 1년 지역별 매출 합계」 큰 데이터를 훑는 집계열 단위 저장과 압축. 필요한 컬럼만 읽는다ClickHouse, DuckDB, BigQuery, Redshift, Snowflake
인메모리 키-값「세션 ID abc의 값」 키 하나를 매우 빠르게메모리에 해시·정렬 집합Redis, Valkey, Memcached
문서형「이 사용자 프로필 전체」 한 덩어리로 읽고 쓰는 데이터JSON류 문서, 문서마다 다른 구조MongoDB, Couchbase
와이드 컬럼「채널 X의 최근 메시지 50개」 거대한 쓰기 위주 데이터를 키로파티션 키로 분산, LSM 트리Cassandra, ScyllaDB, HBase
그래프「친구의 친구 중 같은 회사」 여러 단계 관계 탐색노드와 엣지를 직접 저장Neo4j
전문 검색「'무선 이어폰'과 비슷한 상품」 텍스트 관련도역색인, 랭킹Elasticsearch, OpenSearch
시계열「서버 A의 지난 1시간 CPU 5분 평균」 시간 구간 집계시간으로 정렬·분할, 압축, 보존 기간InfluxDB, TimescaleDB, Prometheus
벡터「이 문장과 의미가 가까운 문서」 임베딩 유사도근사 최근접 이웃(ANN) 인덱스(HNSW 등)pgvector, Milvus, Qdrant, Pinecone
공간(geospatial)「내 위치 반경 1km 안의 가게」R-트리 계열 공간 인덱스, 지오해시PostGIS, MongoDB 지리 인덱스
오브젝트 스토리지「이 동영상 파일」 큰 비정형 파일평평한 키 공간, HTTP APIS3 호환 스토리지. 블록·파일·오브젝트 스토리지

널리 쓰이는 오픈 소스 DB(MySQL, PostgreSQL, MariaDB, SQLite, Redis, MongoDB, Cassandra, Neo4j, CockroachDB, Couchbase)도 이 표의 한 칸씩에 들어간다. 저장 엔진이 이런 차이를 어떻게 만드는지는 DB 내부 구조에 있다.

고르는 순서

  1. 기본값은 관계형 DB다. 거의 모든 문제를 풀 수 있고, 팀이 익숙하고, 트랜잭션과 조인이 있다.
  2. 관계형으로 측정 가능한 한계가 보일 때만 특수 DB를 더한다. 「언젠가 커질 것 같다」는 이유는 근거가 아니다.
  3. 특수 DB는 원본을 대체하기보다 원본 옆에 붙는 파생 저장소로 쓰는 경우가 많다. 검색 인덱스, 분석 웨어하우스, 캐시는 CDC로 원본에서 채운다. 데이터 관리 패턴
  4. DB를 하나 늘릴 때마다 백업, 모니터링, 보안, 장애 대응도 하나씩 늘어난다는 운영 비용을 함께 센다.

CAP 정리 한 줄로 DB를 고르지 않는다. 채팅 메시지 저장에 Cassandra를 쓰는 이유는 「AP라서」가 아니라 쓰기 처리량, 파티션 키 단위 조회, 선형 확장 같은 특성 묶음 때문이다.

결정 트리

대규모 서비스들이 쓰는 선택 트리를 일반화하면 다음과 같다.

flowchart TB
  q1{"트랜잭션·정합성이 핵심인가?"}
  q2{"한 서버에 담기나?"}
  rdb["관계형 DB (+ 읽기 복제본)"]
  shard["샤딩한 관계형 DB 또는 분산 SQL(NewSQL)"]
  kv["인메모리 키-값 (영속성 필요하면 디스크 기반 KV)"]
  wide["와이드 컬럼 / 시계열 DB"]
  doc["문서형 DB"]
  gdb["그래프 DB"]
  search["검색 엔진 / 벡터 DB"]
  olap["OLAP (열 지향) / 데이터 웨어하우스"]
  q1 -->|"예"| q2
  q2 -->|"예"| rdb
  q2 -->|"아니오"| shard
  q1 -->|"아니오: 조회 패턴이 키 하나로 끝나고 아주 빨라야 한다"| kv
  q1 -->|"아니오: 쓰기가 압도적이고 키·시간으로 읽는다"| wide
  q1 -->|"아니오: 구조가 자주 바뀌는 문서 단위 데이터"| doc
  q1 -->|"아니오: 관계 탐색이 질문의 중심"| gdb
  q1 -->|"아니오: 텍스트·의미 검색"| search
  q1 -->|"아니오: 큰 데이터 집계·리포트"| olap

시계열 DB

시계열 DB(TSDB) 는 시각이 찍힌 측정값을 대량으로 받아 시간 구간으로 집계하는 데 최적화한 DB다. 사용자에게는 관계형 테이블처럼 보여도 내부 배치가 다르다.

요소뜻예: 날씨
측정(measurement)테이블에 해당weather
태그(tag)인덱스되는 분류 값. 집계·필터 기준city=Seoul
필드(field)측정값. 인덱스하지 않는다temperature=21.5
타임스탬프시각2026-10-21T09:00:00Z

InfluxDB는 측정 + 태그 조합을 하나의 시리즈로 보고, 시리즈별 값을 시간순으로 붙여 TSM(Time-Structured Merge Tree)이라는 LSM 계열 구조에 압축 저장한다. 그래서 「태그로 고르고 시간으로 자르는」 집계가 빠르다.

기법이유
시간 기준 분할최근 데이터만 자주 읽고, 오래된 조각은 통째로 지운다
열 단위 압축인접한 시각·값이 비슷해 델타 인코딩으로 크게 줄어든다
다운샘플링오래된 데이터는 1분 → 1시간 평균으로 줄여 보관한다
보존 정책일정 기간이 지나면 자동 삭제한다

쓰임: 서버·애플리케이션 지표(APM), 시세·체결 데이터, IoT 센서, 네트워크 트래픽, 클릭 스트림, 이벤트 로그.

PostgreSQL 하나로 넓히기

PostgreSQL은 확장(extension) 으로 기능을 붙일 수 있게 설계되어, 별도 DB를 늘리지 않고 여러 용도를 덮는 선택지가 된다. 「확신이 없으면 PostgreSQL」이라는 말이 나오는 이유다.

용도확장·방법
OLTP기본 기능. ACID, MVCC, 풍부한 인덱스(B-트리, GIN, GiST, BRIN)
시계열TimescaleDB: 시간 기준 자동 분할(hypertable), 압축, 연속 집계
벡터 검색pgvector: 임베딩 컬럼과 HNSW·IVFFlat 인덱스
공간PostGIS: 지리 타입과 공간 함수·인덱스
전문 검색내장 tsvector·GIN 인덱스, 다국어 검색은 PGroonga 같은 확장
분산·분석Citus: 테이블을 여러 노드에 나눠 분산 쿼리. 열 지향 저장
다른 DB 조회FDW(Foreign Data Wrapper): MySQL, MongoDB, 파일 등을 외부 테이블로 붙여 SQL로 조회
그래프Apache AGE: openCypher 그래프 쿼리
문서jsonb 타입과 GIN 인덱스

PostgreSQL 프로토콜·문법을 따르는 파생 DB(CockroachDB, YugabyteDB, AlloyDB, Neon 등)와 PostgreSQL 위에 서비스를 얹은 플랫폼(Supabase)도 많아, 배운 것이 여러 제품으로 이어진다. 다만 확장은 전용 DB만큼 극단적인 규모를 감당하지 못할 수 있다. 규모가 전용 엔진을 요구하기 전까지는 하나로 버티는 쪽이 운영이 싸다.

서버리스 DB

서버리스 DB 는 인스턴스 크기를 미리 정하지 않고, 부하에 따라 용량이 자동으로 늘고 줄며 쓴 만큼 과금되는 DB다.

flowchart LR
  subgraph trad["전통 클라우드 DB"]
    inst["인스턴스(고정)<br/>CPU·RAM·디스크"]
  end
  subgraph sls["서버리스 DB"]
    direction TB
    comp["컴퓨팅 (자동 확장·축소)<br/>부하 따라 늘고, 쉬면 줄거나 멈춘다"]
    store["분산 저장 계층 (공유)<br/>데이터는 그대로"]
    comp --- store
  end

서버리스 DB는 컴퓨팅과 저장을 분리한다. 데이터는 분산 저장 계층에 두고, 쿼리를 처리하는 컴퓨팅만 부하에 맞춰 붙였다 뗀다. 그래서 과금을 더 잘게 나누고, 일부 제품은 쓰지 않을 때 0까지 줄인다(Amazon Aurora Serverless v2, Neon 등).

맞는 곳맞지 않는 곳
트래픽이 들쭉날쭉하거나 예측하기 어렵다 (행사, 신규 서비스)부하가 늘 일정하게 높다. 고정 인스턴스가 더 싸다
개발·테스트 환경, 쓰지 않는 시간이 길다0에서 깨어나는 콜드 스타트 지연을 견딜 수 없다
용량 계획에 손을 덜 쓰고 싶다비용 상한을 엄격히 지켜야 한다. 상한 설정 없이 두면 폭주한다

클라우드 관리형 대응

직접 운영할지, 관리형을 쓸지는 운영 인력과 비용으로 정한다. 같은 역할의 서비스가 클라우드마다 있다. 세부 기능과 가격은 자주 바뀌므로 공식 문서를 확인한다. 데이터베이스 밖의 서비스까지 포함한 대응표는 클라우드 서비스 지도: AWS·Azure·GCP 대응표에 있다.

용도오픈 소스(직접 운영)AWSGoogle Cloud
관계형PostgreSQL, MySQLRDS, AuroraCloud SQL, AlloyDB
전역 분산 SQLCockroachDB, YugabyteDBAurora DSQLSpanner
키-값·문서Redis·Valkey, MongoDBElastiCache, DynamoDB, DocumentDBMemorystore, Firestore
와이드 컬럼Cassandra, HBaseKeyspacesBigtable
분석ClickHouse, SparkRedshiftBigQuery
검색OpenSearch, ElasticsearchOpenSearch Service(마켓플레이스·자체 운영)
그래프Neo4jNeptune(마켓플레이스·자체 운영)

정리

  • DB는 「어떤 질문에 빨리 답하나」로 고른다. 트랜잭션은 관계형, 집계는 열 지향, 키 조회는 KV, 시간 구간은 시계열, 의미 검색은 벡터다.
  • 기본값은 관계형 DB이고, 측정된 한계가 있을 때 특수 DB를 원본 옆의 파생 저장소로 더한다.
  • PostgreSQL은 확장으로 시계열·벡터·공간·검색까지 덮어, DB 수를 늘리지 않는 선택지가 된다.
  • 서버리스 DB는 컴퓨팅과 저장을 분리해 부하가 들쭉날쭉한 곳에서 비용을 줄인다.

관련 노트: 데이터베이스 모델: RDB, NoSQL, NewSQL, DB 내부 구조: 쿼리 실행과 인덱스 자료 구조, 데이터베이스 확장과 성능 최적화, 와이드 컬럼 DB와 대규모 메시지 저장: Cassandra·ScyllaDB, 검색엔진의 원리: 역인덱스와 랭킹, AWS 클라우드 기초: 인프라, 컴퓨팅, 보안 그룹

원본 기록11

댓글

GitHub 계정으로 댓글을 남길 수 있어요.