Contents
see ListPostgreSQL 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 (더 유연함)