콘텐츠로 이동
Data Prep
상세

데이터베이스 비교 가이드

실무에서 DB를 선택할 때 고려해야 할 사항과 각 DB의 특성을 정리함.


1. DB 선택 기준

1.1 핵심 질문

1. 데이터 모델은? (관계형, 문서형, 키-값, 그래프)
2. 읽기/쓰기 비율은? (읽기 중심, 쓰기 중심, 균형)
3. 트랜잭션이 필요한가? (ACID, BASE)
4. 확장성 요구사항은? (수직, 수평)
5. 지연 시간 요구사항은? (밀리초, 초)
6. 데이터 크기는? (GB, TB, PB)
7. 기존 인프라는? (클라우드, 온프레미스)
8. 팀의 경험은? (익숙한 기술 스택)

1.2 워크로드별 추천

워크로드 추천 DB 이유
웹 애플리케이션 PostgreSQL, MySQL 범용, 풍부한 에코시스템
공공/금융 Oracle 안정성, 기술지원, 규제 준수
빠른 캐싱 Redis 메모리 기반, 밀리초 지연
문서 저장 MongoDB 유연한 스키마
검색/로그 Elasticsearch 전문 검색, 분석
벡터 검색 pgvector, Pinecone AI/RAG 파이프라인
시계열 TimescaleDB, InfluxDB 시계열 최적화
그래프 Neo4j 관계 중심 질의

2. RDBMS 비교

2.1 PostgreSQL

강점 - 표준 SQL 준수, 확장성 우수 - pgvector: 벡터 검색 (AI/RAG) - PostGIS: 공간 데이터 (GIS) - JSONB: 문서형 데이터 지원 - 오픈소스, 무료

약점 - Oracle 대비 기술지원 제한 - 극한의 쓰기 성능 필요 시 튜닝 필요

언제 사용

- 스타트업/중소기업 웹 서비스
- AI/ML 프로젝트 (pgvector)
- 지리 데이터 처리 (PostGIS)
- JSON 데이터가 많은 경우
- 비용 최적화가 중요한 경우

설정 예시

-- pgvector 활성화
CREATE EXTENSION vector;

-- 벡터 컬럼 테이블
CREATE TABLE documents (
    id SERIAL PRIMARY KEY,
    content TEXT,
    embedding vector(1536)
);

-- HNSW 인덱스
CREATE INDEX ON documents USING hnsw (embedding vector_cosine_ops);

-- 벡터 검색
SELECT * FROM documents
ORDER BY embedding <=> '[0.1, 0.2, ...]'::vector
LIMIT 10;


2.2 Oracle

강점 - 엔터프라이즈급 안정성 - 풍부한 기술지원 - 한국 공공기관/금융권 표준 - 고급 기능 (RAC, Data Guard) - 대용량 처리 검증됨

약점 - 높은 라이선스 비용 - 복잡한 관리 - 클라우드 네이티브 환경에서 제약

언제 사용

- 한국 공공기관 프로젝트 (사실상 필수)
- 금융권 미션 크리티컬 시스템
- 레거시 시스템 연동
- 고가용성(HA)이 필수인 경우
- 24/7 기술지원이 필요한 경우

공공기관 특이사항

- 행정안전부 표준프레임워크 연동
- 국가정보자원관리원 클라우드 환경
- 조달청 나라장터 연계
- 개인정보보호법 준수


2.3 MySQL

강점 - 간단, 빠른 읽기 성능 - 웹 서비스에 최적화 - 풍부한 호스팅 옵션 - 낮은 학습 곡선

약점 - PostgreSQL 대비 기능 제한 - 복잡한 쿼리 성능 저하 - 벡터 검색 네이티브 미지원

언제 사용

- 워드프레스, 드루팔 등 CMS
- 읽기 중심 웹 서비스
- 간단한 CRUD 애플리케이션
- 저비용 호스팅 환경


2.4 MS SQL Server

강점 - Windows/.NET 생태계 통합 - Visual Studio/Azure 연동 - 강력한 BI 도구 (SSRS, SSAS) - 관리 도구 우수

약점 - Windows 의존성 (Linux 버전 있으나) - 라이선스 비용

언제 사용

- .NET/C# 기반 애플리케이션
- Windows Server 환경
- Microsoft 기술 스택 통일
- Power BI 연동


3. NoSQL 비교

3.1 MongoDB

강점 - 유연한 스키마 (스키마리스) - JSON 네이티브 - 수평 확장 (샤딩) - 개발 생산성

약점 - 트랜잭션 제한 (개선됨) - 조인 비효율 - 메모리 사용량 높음

언제 사용

- 프로토타이핑, MVP
- 스키마가 자주 변경되는 경우
- 계층적 데이터 (카탈로그, 콘텐츠)
- 로그/이벤트 저장

// MongoDB 예시
db.products.insertOne({
    name: "상품A",
    price: 10000,
    attributes: {
        color: "red",
        size: ["S", "M", "L"]
    },
    reviews: [
        { user: "user1", rating: 5, comment: "좋아요" }
    ]
});

// 유연한 쿼리
db.products.find({
    "attributes.color": "red",
    price: { $lt: 20000 }
});

3.2 Redis

강점 - 초고속 (메모리 기반) - 다양한 자료구조 - Pub/Sub 지원 - 클러스터링

약점 - 메모리 제한 (비용) - 영속성 설정 필요 - 복잡한 쿼리 불가

언제 사용

- 캐시 레이어
- 세션 저장소
- 실시간 순위표 (Sorted Set)
- 메시지 큐 (간단한)
- Rate Limiting
- LLM 응답 캐시

import redis

r = redis.Redis()

# 캐시
r.setex("cache:user:123", 3600, json.dumps(user_data))

# LLM 응답 캐시
cache_key = f"llm:{hash(prompt)}"
cached = r.get(cache_key)
if cached:
    return json.loads(cached)

# Sorted Set (순위)
r.zadd("leaderboard", {"player1": 100, "player2": 85})
top_10 = r.zrevrange("leaderboard", 0, 9, withscores=True)

3.3 Elasticsearch

강점 - 전문 검색 (Full-text Search) - 실시간 분석 - 로그 분석 (ELK 스택) - 벡터 검색 지원

약점 - 운영 복잡성 - 리소스 소모 큼 - 트랜잭션 없음

언제 사용

- 검색 엔진 구축
- 로그/메트릭 분석
- 실시간 대시보드
- RAG 파이프라인 (벡터 검색)
- 자동완성/추천

// 검색 쿼리
{
    "query": {
        "bool": {
            "must": [
                { "match": { "content": "머신러닝" } }
            ],
            "filter": [
                { "term": { "category": "tech" } },
                { "range": { "date": { "gte": "2024-01-01" } } }
            ]
        }
    },
    "knn": {
        "field": "embedding",
        "query_vector": [0.1, 0.2, ...],
        "k": 10,
        "num_candidates": 100
    }
}

4. 특수 목적 DB

4.1 벡터 DB

DB 특징 추천 상황
pgvector PostgreSQL 확장 기존 PG 사용, 중소 규모
Pinecone 관리형, 쉬운 사용 빠른 개발, 서버리스
Milvus 오픈소스, 고성능 대규모, 온프레미스
Qdrant Rust 기반, 빠름 프로덕션 RAG
Weaviate 하이브리드 검색 벡터+키워드 검색
ChromaDB 경량, 개발용 프로토타입, 로컬 개발

4.2 시계열 DB

DB 특징 추천 상황
TimescaleDB PostgreSQL 기반 기존 PG 확장, SQL 사용
InfluxDB 시계열 특화 IoT, 메트릭
Prometheus 모니터링 인프라 메트릭
QuestDB 고성능 금융 데이터

5. 의사결정 플로우차트

시작
  |
  v
트랜잭션 필수?
  |
  +-- Yes --> RDBMS
  |             |
  |             v
  |           공공/금융?
  |             |
  |             +-- Yes --> Oracle
  |             |
  |             +-- No --> 벡터 검색 필요?
  |                          |
  |                          +-- Yes --> PostgreSQL + pgvector
  |                          |
  |                          +-- No --> PostgreSQL 또는 MySQL
  |
  +-- No --> 데이터 유형?
               |
               +-- 문서형 --> MongoDB
               |
               +-- 키-값/캐시 --> Redis
               |
               +-- 검색/로그 --> Elasticsearch
               |
               +-- 그래프 --> Neo4j
               |
               +-- 벡터 --> Pinecone, Milvus
               |
               +-- 시계열 --> TimescaleDB, InfluxDB

6. 비용 비교 (참고)

DB 라이선스 관리형 서비스 (월)
PostgreSQL 무료 AWS RDS: $50~
MySQL 무료 AWS RDS: $30~
Oracle $47,500/프로세서 AWS RDS: $500~
MS SQL Server $3,586/코어 AWS RDS: $200~
MongoDB 무료 (Community) Atlas: $57~
Redis 무료 ElastiCache: $30~
Elasticsearch 무료 (OSS) OpenSearch: $80~

7. 마이그레이션 고려사항

7.1 Oracle에서 PostgreSQL

호환성:
- PL/SQL → PL/pgSQL (변환 필요)
- 시퀀스: 유사하나 문법 차이
- 날짜 함수: 차이 있음
- NULL 처리: Oracle은 빈 문자열=NULL

도구:
- ora2pg: Oracle → PostgreSQL 변환 도구
- AWS SCT: Schema Conversion Tool

7.2 MySQL에서 PostgreSQL

호환성:
- AUTO_INCREMENT → SERIAL
- LIMIT/OFFSET: 동일
- 문자열 연결: CONCAT vs ||
- 대소문자: MySQL 기본 대소문자 구분 안함

주의점:
- 인덱스 힌트 문법 차이
- 저장 프로시저 재작성 필요

8. 실무 조합 패턴

8.1 웹 서비스

[User] --> [API Server] --> [PostgreSQL] (메인 데이터)
                      |
                      +--> [Redis] (캐시, 세션)
                      |
                      +--> [Elasticsearch] (검색)

8.2 AI/RAG 시스템

[User] --> [LLM Service] --> [pgvector] (벡터 검색)
                        |
                        +--> [Redis] (LLM 응답 캐시)
                        |
                        +--> [PostgreSQL] (메타데이터)

8.3 공공기관 시스템

[User] --> [WAS] --> [Oracle] (메인 DB)
               |
               +--> [Redis] (세션)
               |
               +--> [Elasticsearch] (검색/로그)

참고 자료