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 |
|---|---|---|
| 3380 | 2026. 08. 20. | PostgreSQL 느린 조회를 진단하는 방법: EXPLAIN ANALYZE와 복합 인덱스 실전 가이드 |
| 3348 | 2026. 08. 11. | PostgreSQL 잠금 대기 줄이기: 트랜잭션 범위와 lock_timeout 설정 실전 가이드 |
| 3316 | 2026. 08. 03. | PostgreSQL 백업 복구 실전 가이드: pg_dump·pg_restore로 장애 복구 절차 만들기 |
| 3284 | 2026. 07. 26. | PostgreSQL 인덱스가 있는데도 느린 쿼리 해결하기: EXPLAIN ANALYZE와 복합 인덱스 설계 |
| 3254 | 2026. 07. 18. | PostgreSQL 잠금 대기 진단 가이드: pg_stat_activity로 블로킹 쿼리 찾고 장애 줄이기 |
| 3202 | 2026. 07. 09. | PostgreSQL 백업 복구 검증 가이드: pg_dump와 psql로 실제 복원까지 확인하기 |
| 3170 | 2026. 07. 01. | MySQL 느린 쿼리 원인 찾기: EXPLAIN과 복합 인덱스 점검 가이드 |
| 3116 | 2026. 06. 23. | PostgreSQL 트랜잭션 충돌 줄이기: 잠금 순서와 짧은 재시도로 데드락 대응하기 |
| 3058 | 2026. 06. 15. | PostgreSQL JSONB 조회 튜닝: GIN 인덱스와 생성 컬럼으로 느린 검색 줄이기 |
| 2971 | 2026. 06. 07. | MySQL/MariaDB 복합 인덱스 설계: 느린 목록 조회를 줄이는 WHERE·ORDER BY 점검법 |