PostgreSQL vs MySQL - 어떤 DB를 선택할까



프로젝트에 적합한 데이터베이스를 선택하는 것은 중요한 아키텍처 결정입니다.



비교 요약









항목PostgreSQLMySQL
철학표준 준수, 확장성속도, 단순함
JSONJSONB (뛰어남)JSON (기본)
복잡한 쿼리우수보통
레플리케이션스트리밍바이너리 로그
라이선스PostgreSQLGPL (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 (더 유연함)