Contents
see List작성일 2025. 11. 30.
PostgreSQL vs MySQL - 어떤 DB를 선택할까
프로젝트에 적합한 데이터베이스를 선택하는 것은 중요한 아키텍처 결정입니다.
비교 요약
| 항목 | PostgreSQL | MySQL |
|---|---|---|
| 철학 | 표준 준수, 확장성 | 속도, 단순함 |
| JSON | JSONB (뛰어남) | JSON (기본) |
| 복잡한 쿼리 | 우수 | 보통 |
| 레플리케이션 | 스트리밍 | 바이너리 로그 |
| 라이선스 | PostgreSQL | GPL (Oracle 소유) |
PostgreSQL이 좋은 경우
- 복잡한 쿼리, 분석 작업이 많을 때
- JSON 데이터를 많이 다룰 때
- GIS/지리 데이터 처리 (PostGIS)
- ACID 완전 준수가 중요할 때
- 확장성과 커스터마이징 필요
MySQL이 좋은 경우
- 단순한 CRUD 위주 웹 애플리케이션
- 읽기 성능이 중요할 때
- 레거시 시스템과 호환
- AWS Aurora 사용 계획
- 팀이 MySQL에 익숙할 때
기능 상세 비교
-- PostgreSQL JSONB (인덱싱 지원)
CREATE INDEX idx_data ON products USING GIN (data jsonb_path_ops);
SELECT * FROM products WHERE data @> \047{"color": "red"}\047;
-- MySQL JSON
SELECT * FROM products WHERE JSON_EXTRACT(data, "$.color") = "red";
-- PostgreSQL 배열 타입
CREATE TABLE tags (id INT, names TEXT[]);
SELECT * FROM tags WHERE \047tech\047 = ANY(names);
-- PostgreSQL CTE (WITH 절)
WITH RECURSIVE subordinates AS (
SELECT id, name, manager_id FROM employees WHERE id = 1
UNION ALL
SELECT e.id, e.name, e.manager_id
FROM employees e JOIN subordinates s ON e.manager_id = s.id
)
SELECT * FROM subordinates;성능 특성
# PostgreSQL
- 쓰기: MVCC로 동시성 우수
- 읽기: 복잡한 쿼리에 강함
- 인덱스: GiST, GIN, BRIN 등 다양
# MySQL (InnoDB)
- 읽기: 단순 쿼리 빠름
- 쓰기: 간단한 INSERT 빠름
- 클러스터드 인덱스 기반결론
복잡한 엔터프라이즈 → PostgreSQL
단순한 웹앱 → MySQL
확실하지 않으면 → PostgreSQL (더 유연함)
database
| No | 작성일 | Title |
|---|---|---|
| 2189 | 2026. 02. 11. | Vector Database 비교와 활용 전략 |
| 2188 | 2026. 02. 11. | PostgreSQL 17 신기능과 성능 최적화 |
| 2187 | 2026. 02. 11. | Supabase Edge Functions 실전 활용 가이드 |
| 2121 | 2026. 02. 11. | Time-Series DB 비교: TimescaleDB vs InfluxDB vs QuestDB |
| 2120 | 2026. 02. 11. | Supabase Edge Functions와 실시간 구독 활용 |
| 2119 | 2026. 02. 11. | NewSQL 데이터베이스: CockroachDB vs TiDB 비교 |
| 2118 | 2026. 02. 11. | SQL 성능 최적화: 실행 계획 분석부터 인덱스 설계까지 |
| 2117 | 2026. 02. 11. | 데이터베이스 마이그레이션 전략과 도구 비교 |
| 2116 | 2026. 02. 11. | DuckDB: 분석용 인메모리 DB의 부상 |
| 2115 | 2026. 02. 11. | Redis 8.0과 실시간 데이터 처리 패턴 |