반응형
Notice
Recent Posts
Recent Comments
관리 메뉴

개키우는개발자 : )

PostgreSQL vs MySQL 2026 완벽 비교 - 어떤 DB를 선택해야 할까? 본문

카테고리 없음

PostgreSQL vs MySQL 2026 완벽 비교 - 어떤 DB를 선택해야 할까?

DOGvelopers 2026. 1. 19. 21:33
반응형

새 프로젝트를 시작할 때마다 고민되는 질문이다. "PostgreSQL이랑 MySQL 중에 뭘 써야 하지?"

2026년 기준으로 두 데이터베이스를 비교하고, 상황별 선택 가이드를 정리한다.

한눈에 보는 비교표

항목 PostgreSQL MySQL

타입 객체 관계형 (ORDBMS) 관계형 (RDBMS)
라이선스 PostgreSQL License (완전 무료) GPL (상용 시 유료 가능)
최신 버전 (2026) 17.x 8.4 LTS / 9.x
강점 복잡한 쿼리, 데이터 무결성 단순 읽기, 빠른 속도
약점 메모리 사용량 높음 복잡한 쿼리 성능
적합한 용도 금융, 분석, 대규모 시스템 웹사이트, 중소규모 앱

1. 성능 비교

읽기 성능

단순 SELECT 쿼리는 MySQL이 빠르다.

MySQL: 단순 읽기 위주 → 승리
PostgreSQL: 복잡한 읽기 → 승리

MySQL은 여러 사용자가 접속해도 단일 프로세스로 처리한다. PostgreSQL은 사용자마다 새 프로세스를 생성해서 메모리를 더 쓴다.

쓰기 성능

빈번한 UPDATE가 있다면 주의가 필요하다.

MySQL: UPDATE 시 기존 행을 직접 수정
PostgreSQL: UPDATE 시 기존 행 삭제 표시 + 새 행 추가 (MVCC)

PostgreSQL의 UPDATE는 내부적으로 DELETE + INSERT처럼 동작한다. UPDATE가 많은 서비스에서는 VACUUM 관리가 필요하다.

복잡한 쿼리

JOIN이 많거나 서브쿼리가 복잡하면 PostgreSQL이 압도적이다.

-- 복잡한 분석 쿼리 예시
WITH monthly_sales AS (
    SELECT 
        DATE_TRUNC('month', order_date) AS month,
        SUM(amount) AS total
    FROM orders
    GROUP BY 1
)
SELECT 
    month,
    total,
    LAG(total) OVER (ORDER BY month) AS prev_month,
    total - LAG(total) OVER (ORDER BY month) AS diff
FROM monthly_sales;

PostgreSQL은 Hash Join, Merge Join, Nested Loop 중 최적을 선택한다. MySQL은 주로 Nested Loop만 사용해서 대량 JOIN에서 느릴 수 있다.

실제 벤치마크 (우아한형제들 기술블로그 참고)

테스트 MySQL PostgreSQL

단순 OLTP 빠름 보통
1000만 건 JOIN 22초 3초
병렬 쿼리 제한적 완전 지원

복잡한 쿼리에서는 PostgreSQL이 7배 이상 빠를 수 있다.

2. 기능 비교

JSON 지원

둘 다 JSON을 지원하지만 수준이 다르다.

PostgreSQL

-- JSONB 타입 (바이너리, 인덱싱 가능)
CREATE TABLE products (
    id SERIAL PRIMARY KEY,
    data JSONB
);

-- JSON 필드 인덱스
CREATE INDEX idx_products_data ON products USING GIN (data);

-- JSON 쿼리
SELECT * FROM products 
WHERE data->>'category' = 'electronics';

MySQL

-- JSON 타입
CREATE TABLE products (
    id INT AUTO_INCREMENT PRIMARY KEY,
    data JSON
);

-- JSON 쿼리 (인덱스 제한적)
SELECT * FROM products 
WHERE JSON_EXTRACT(data, '$.category') = 'electronics';

PostgreSQL의 JSONB는 인덱싱이 완벽하게 지원된다. MySQL JSON도 8.0부터 많이 좋아졌지만 PostgreSQL이 앞선다.

인덱스 종류

인덱스 타입 PostgreSQL MySQL

B-tree
Hash
GiST (공간)
GIN (전문검색)
BRIN (대용량)
부분 인덱스
Full-text

PostgreSQL이 더 다양한 인덱스를 지원한다. 특히 부분 인덱스는 대용량 테이블에서 유용하다.

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

확장 기능

PostgreSQL 대표 확장

  • PostGIS: 지리공간 데이터
  • pgvector: AI/ML 벡터 저장
  • pg_trgm: 유사 문자열 검색
  • TimescaleDB: 시계열 데이터

MySQL 대표 확장

  • 스토리지 엔진 선택 (InnoDB, MyISAM)
  • MySQL Router: 로드밸런싱

PostgreSQL은 확장 생태계가 더 풍부하다. 특히 AI 시대에 pgvector는 큰 장점이다.

3. SQL 문법 차이

AUTO_INCREMENT vs SERIAL

-- MySQL
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50)
);

-- PostgreSQL
CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    name VARCHAR(50)
);

-- PostgreSQL (명시적)
CREATE TABLE users (
    id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
    name VARCHAR(50)
);

문자열 비교

-- MySQL (대소문자 구분 안함)
SELECT * FROM users WHERE name = 'John';  -- 'john'도 매칭

-- PostgreSQL (대소문자 구분함)
SELECT * FROM users WHERE name = 'John';  -- 정확히 'John'만
SELECT * FROM users WHERE name ILIKE 'john';  -- 대소문자 무시

LIMIT 문법

-- MySQL
SELECT * FROM users LIMIT 10 OFFSET 20;
SELECT * FROM users LIMIT 20, 10;  -- MySQL만 가능

-- PostgreSQL
SELECT * FROM users LIMIT 10 OFFSET 20;
SELECT * FROM users FETCH FIRST 10 ROWS ONLY;  -- 표준 SQL

UPSERT

-- MySQL
INSERT INTO users (id, name, email) VALUES (1, 'Kim', 'kim@test.com')
ON DUPLICATE KEY UPDATE name = VALUES(name), email = VALUES(email);

-- PostgreSQL
INSERT INTO users (id, name, email) VALUES (1, 'Kim', 'kim@test.com')
ON CONFLICT (id) DO UPDATE SET name = EXCLUDED.name, email = EXCLUDED.email;

4. 운영 관점 비교

복제 (Replication)

항목 PostgreSQL MySQL

물리적 복제 ✓ (Streaming)
논리적 복제 ✓ (10버전+)
멀티마스터 확장으로 가능 기본 지원
설정 난이도 중간 쉬움

MySQL이 복제 설정이 더 쉽다. PostgreSQL은 더 세밀한 제어가 가능하다.

백업

PostgreSQL

# 논리 백업
pg_dump mydb > backup.sql

# 물리 백업
pg_basebackup -D /backup -Fp -Xs -P

MySQL

# 논리 백업
mysqldump mydb > backup.sql

# 물리 백업 (Enterprise 또는 Percona XtraBackup)
xtrabackup --backup --target-dir=/backup

둘 다 비슷한 수준의 백업 도구를 제공한다.

모니터링

PostgreSQL

-- 실행 중인 쿼리
SELECT * FROM pg_stat_activity;

-- 테이블 통계
SELECT * FROM pg_stat_user_tables;

-- 슬로우 쿼리 (pg_stat_statements 확장)
SELECT query, calls, mean_time FROM pg_stat_statements 
ORDER BY mean_time DESC LIMIT 10;

MySQL

-- 실행 중인 쿼리
SHOW PROCESSLIST;

-- 테이블 상태
SHOW TABLE STATUS;

-- 슬로우 쿼리 (설정 필요)
SELECT * FROM mysql.slow_log;

5. 클라우드 지원

AWS

서비스 PostgreSQL MySQL

RDS
Aurora Aurora PostgreSQL Aurora MySQL
서버리스 Aurora Serverless v2 Aurora Serverless v2

기타 클라우드

  • Supabase: PostgreSQL 기반 (Firebase 대안)
  • PlanetScale: MySQL 기반 (서버리스)
  • Neon: PostgreSQL 서버리스

PostgreSQL 기반 Supabase가 요즘 인기가 많다. 오픈소스 + 실시간 기능 + Auth까지 제공한다.

6. 선택 가이드

PostgreSQL을 선택해야 할 때

  • 복잡한 쿼리와 분석이 많은 경우
  • 데이터 무결성이 중요한 금융/의료 시스템
  • JSON, 지리공간 데이터를 많이 다루는 경우
  • AI/ML 벡터 저장이 필요한 경우 (pgvector)
  • 대규모 트랜잭션 처리 (OLTP + OLAP)
  • 표준 SQL 준수가 중요한 경우

MySQL을 선택해야 할 때

  • 단순한 CRUD 위주의 웹 애플리케이션
  • 읽기 작업이 대부분인 서비스
  • WordPress, Laravel 등 MySQL 기본 지원 프레임워크 사용
  • 빠른 개발과 쉬운 운영이 필요한 경우
  • 팀에서 MySQL 경험이 많은 경우

프로젝트 유형별 추천

프로젝트 추천

블로그, 쇼핑몰 MySQL
스타트업 MVP MySQL (빠른 시작)
금융 서비스 PostgreSQL
데이터 분석 플랫폼 PostgreSQL
AI/챗봇 서비스 PostgreSQL (pgvector)
지도 기반 서비스 PostgreSQL (PostGIS)
대규모 SaaS PostgreSQL
WordPress 사이트 MySQL
레거시 마이그레이션 기존 시스템 유지

7. 2026년 트렌드

PostgreSQL의 상승세

  • Stack Overflow 설문에서 가장 사랑받는 DB 1위
  • AI/ML 붐으로 pgvector 수요 급증
  • Supabase, Neon 등 신규 서비스 성장
  • 클라우드 네이티브 환경에서 선호도 증가

MySQL의 현재

  • 여전히 웹 애플리케이션 시장 점유율 1위
  • 8.4 LTS로 안정성 강화
  • 9.x에서 Vector 타입 추가 (PostgreSQL 추격)
  • PlanetScale 등 서버리스 옵션 증가

결론

복잡한 것 → PostgreSQL
단순한 것 → MySQL
모르겠으면 → PostgreSQL (더 범용적)

2026년 현재, PostgreSQL의 인기가 빠르게 상승 중이다. 특히 AI/ML, 데이터 분석 분야에서는 PostgreSQL이 사실상 표준이 되어가고 있다.

하지만 MySQL도 여전히 강력한 선택지다. WordPress, Laravel 생태계에서는 MySQL이 더 편하고, 단순한 웹 애플리케이션에서는 충분히 좋은 성능을 낸다.

결국 "정답"은 없다. 프로젝트 요구사항, 팀 경험, 장기 유지보수를 고려해서 선택하면 된다.

마이그레이션 참고

MySQL에서 PostgreSQL로 넘어가거나 그 반대의 경우가 있다면 별도의 마이그레이션 가이드를 참고하자.

문법 차이와 데이터 타입 변환에 주의가 필요하다.

 

반응형
Comments