PostgreSQL vs MySQL: 어떤 데이터베이스를 선택할 것인가

August 6, 2025

Supabase라는 클라우드 플랫폼을 통해 PostgreSQL을 처음 접하게 되었을 때는 단순히 '또 다른 데이터베이스'라고 생각했다. 그전까지는 주로 MySQL을 써왔고, 데이터베이스는 데이터를 저장하고 조회하는 도구 정도로만 여겼다. 하지만 실제 프로젝트에서 PostgreSQL을 깊이 사용해보면서, 두 데이터베이스 사이의 철학적 차이와 실무적 고려사항들을 체감하게 되었다.

PostgreSQL과 MySQL의 가장 큰 차이는 표준 준수에 대한 접근 방식이다. PostgreSQL은 SQL 표준을 엄격하게 따르려고 노력하는 반면, MySQL은 실용성과 성능을 우선시하며 표준에서 벗어나는 것을 두려워하지 않는다. 예를 들어, PostgreSQL에서는 SELECT * FROM users GROUP BY name과 같은 쿼리가 오류를 발생시키지만, MySQL에서는 sql_mode 설정에 따라 허용될 수 있다.

-- PostgreSQL: 엄격한 GROUP BY 규칙
SELECT name, email, COUNT(*)
FROM users 
GROUP BY name, email;

-- MySQL:  유연한 GROUP BY (기본 설정 )
SELECT name, email, COUNT(*)
FROM users 
GROUP BY name;

데이터 타입 지원에서도 큰 차이가 난다. PostgreSQL은 JSON, JSONB, 배열, 범위 타입, 사용자 정의 타입 등 다양하고 강력한 데이터 타입을 제공한다. 특히 JSONB는 NoSQL과 관계형 데이터베이스의 장점을 결합한 독특한 접근이다. MySQL도 JSON 타입을 지원하지만, PostgreSQL만큼 풍부한 기능을 제공하지는 않는다.

트랜잭션 처리 방식도 흥미로운 차이점이다. PostgreSQL은 MVCC(Multi-Version Concurrency Control)를 기본으로 하여 읽기 작업이 쓰기 작업을 차단하지 않는다. MySQL의 InnoDB도 MVCC를 지원하지만, 기본 격리 수준과 잠금 동작에서 미묘한 차이가 있다. 고부하 환경에서는 이런 차이가 성능에 실질적인 영향을 미칠 수 있다.

-- PostgreSQL의 고급 인덱스 기능
CREATE INDEX idx_user_metadata ON users 
USING GIN ((metadata -> 'tags'));

-- 부분 인덱스
CREATE INDEX idx_active_users ON users (email) 
WHERE active = true;

성능 측면에서는 상황에 따라 다르다. MySQL은 단순한 읽기 위주 워크로드에서 뛰어난 성능을 보이고, 특히 웹 애플리케이션의 일반적인 패턴에 최적화되어 있다. 반면 PostgreSQL은 복잡한 쿼리, 분석 작업, 대용량 데이터 처리에서 강점을 보인다. Supabase에서 경험한 PostgreSQL의 실시간 구독 기능도 인상적이었는데, 이런 기능은 MySQL에서는 찾기 어렵다.

운영과 확장성 관점에서도 차이가 있다. MySQL은 마스터-슬레이브 복제가 전통적으로 강력했고, 샤딩과 같은 수평 확장에 대한 생태계가 잘 구축되어 있다. PostgreSQL은 상대적으로 복제와 확장이 복잡했지만, 최근 버전들에서는 논리적 복제, 파티셔닝 등의 기능이 크게 개선되었다.

개발자 경험 측면에서는 PostgreSQL이 더 일관되고 예측 가능하다고 느꼈다. 에러 메시지가 더 명확하고, 문서화도 체계적이다. MySQL은 버전별로 동작이 미묘하게 다른 경우가 있어 때때로 혼란스러웠다. 특히 MySQL의 sql_mode 설정에 따른 동작 변화는 초보자에게 혼란을 줄 수 있다.

결국 선택은 프로젝트의 성격과 팀의 상황에 달려있다. 빠른 프로토타이핑, 단순한 웹 애플리케이션, 레거시 시스템과의 호환성이 중요하다면 MySQL이 좋은 선택이다. 복잡한 데이터 분석, 다양한 데이터 타입 활용, 엄격한 데이터 무결성이 필요하다면 PostgreSQL이 적합하다.

개인적으로는 Supabase를 통해 PostgreSQL의 강력함을 경험한 후로는, 새로운 프로젝트에서는 PostgreSQL을 우선적으로 고려하게 되었다. 특히 현대적인 웹 애플리케이션에서 요구되는 JSON 처리, 실시간 기능, 복잡한 쿼리 등을 고려하면 PostgreSQL의 장점이 더 크게 느껴진다. 하지만 MySQL도 여전히 훌륭한 데이터베이스이고, 상황에 따라서는 더 나은 선택이 될 수 있다는 점을 인정한다.