PostgreSQL 특징과 Oracle / MySql과의 차이점

1. PostgreSQL의 핵심 특징

PostgreSQL은 단순한 관계형 데이터베이스(RDBMS)를 넘어 객체 관계형 데이터베이스(ORDBMS)를 지향합니다. 즉, 표준 SQL을 완벽에 가깝게 준수하면서도 사용자가 직접 새로운 데이터 타입이나 함수를 정의해 확장할 수 있는 유연성을 가집니다.

  • 뛰어난 표준 준수와 확장성: SQL 표준(ANSI-SQL)을 가장 완벽하게 구현하는 DB 중 하나입니다. 오픈소스 특성상 플러그인(Extension) 생태계가 매우 강력하여, 지리정보용 PostGIS나 벡터 데이터 검색용 pgvector 등을 붙여 특수 목적 DB로 쉽게 변신시킵니다.
  • 강력한 MVCC (다중 버전 동시성 제어): 데이터를 읽는 작업(Select)과 쓰는 작업(Update/Insert)이 서로를 차단(Lock)하지 않습니다. 읽기 작업이 많으면서도 동시에 쓰기가 빈번한 복잡한 트랜잭션 환경에서 성능 저하를 최소화합니다.
  • 복잡한 쿼리 처리 최적화: 중첩 루프, 해시 조인, 머지 조인 등 다양한 조인 알고리즘을 지능적으로 선택하는 쿼리 옵티마이저가 내장되어 있어, DW(데이터 웨어하우스) 성격의 대규모 데이터 분석 쿼리를 매우 효율적으로 처리합니다.

2. Oracle vs MySQL vs PostgreSQL 차이점 비교

세 데이터베이스는 크게 라이선스(비용), 아키텍처(동시성 제어 방식), 주요 타깃 서비스 측면에서 가장 큰 차이를 보입니다.

비교 항목 PostgreSQL Oracle MySQL
라이선스 오픈소스 (자유로운 상용화 가능) 상용 (매우 비싼 라이선스 비용) 오픈소스 (GPL) / 상용 엔터프라이즈
분류 객체 관계형 (ORDBMS) 관계형 (RDBMS) 관계형 (RDBMS)
주요 아키텍처 Process 기반 (커넥션당 프로세스 생성) Process 기반 / Shared Architecture Thread 기반 (메모리 소비가 적음)
MVCC 구현 방식 오래된 행을 페이지 내에 유지 (Vaccum 필요) Undo Logs 세그먼트 활용 Undo Logs 및 Rollback 세그먼트 활용
JSON/비정형 지원 매우 뛰어남 (JSONB 인덱싱 지원) 지원하나 설정 및 활용이 상대적으로 복잡 지원은 하나 정형 데이터에 최적화됨
주사용처 복잡한 비즈니스 로직, 데이터 분석, 대형 서비스 금융, 공공, 대기업의 핵심 Mission-Critical 시스템 웹 서비스, 이커머스, 소셜 미디어 (고속 읽기 위주)

3. 핵심 차이점 심층 분석

📌 PostgreSQL vs Oracle : "오픈소스 진영의 오라클"

과거 엔터프라이즈급 금융/공공 시스템은 무조건 오라클의 독점 무대였습니다. 하지만 최근 수년간 비용 절감(TCO 최소화)과 클라우드 네이티브 전환 트렌드로 인해 PostgreSQL이 오라클의 가장 강력한 대안으로 꼽히고 있습니다.

  • 기능적 유사성: PostgreSQL은 오라클 못지않게 복잡한 분석 함수, 윈도우 함수, CTE(재귀 쿼리)를 부드럽게 처리합니다. 오라클의 PL/SQL과 유사한 PL/pgSQL을 지원하므로 저장 프로시저나 트리거 이관(Migration)이 비교적 수월합니다.
  • 비용과 락인(Lock-in): 오라클은 코어당 비용을 산정하여 막대한 라이선스 비용이 발생하고 벤더 종속성이 심하지만, PostgreSQL은 완전한 무료 오픈소스이며 AWS Aurora, Azure Flexible Server 등 클라우드 매니지드 서비스로의 이식성이 매우 높습니다.

📌 PostgreSQL vs MySQL : "기능과 깊이 vs 속도와 단순함"

두 오픈소스 DB의 대결은 흔히 "대규모 분석 및 복잡한 트랜잭션(PostgreSQL)"이냐, "빠른 읽기 중심의 웹 서비스(MySQL)"이냐로 갈립니다.

  • 스레드 vs 프로세스: MySQL은 스레드 기반 아키텍처로 커넥션이 많아도 메모리를 적게 먹고 가볍게 동작합니다. 반면 PostgreSQL은 프로세스 기반이라 커넥션 하나당 독립된 메모리를 할당하므로, 동시 커넥션이 아주 많을 때는 PgBouncer 같은 커넥션 풀러(Connection Pooler)가 필수적입니다.
  • 쓰기(Update) 메커니즘:
    • MySQL(InnoDB)은 데이터 수정 시 기존 데이터를 Undo Log로 보내고 원래 자리에 새 데이터를 덮어씁니다. PK(기본 키) 중심의 클러스터링 인덱스 구조라 특정 행을 고속으로 찾고 업데이트하는 데 유리합니다.
    • PostgreSQL은 데이터 수정 시 기존 행을 "삭제됨" 표시만 하고 새로운 행을 다른 공간에 새로 씁니다(Append-only 형태). 이 방식은 롤백이 빛의 속도로 이뤄진다는 장점이 있지만, 찌꺼기 데이터(Dead Tuple)가 쌓이기 때문에 이를 정리해 주는 VACUUM 프로세스를 주기적으로 관리해 주어야 합니다.

💡 요약하자면:

  • 가볍고 단순한 쿼리 위주, 읽기 성능이 극대화된 웹 서비스를 구축한다면 MySQL이 유리합니다.
  • 예산이 무제한에 가깝고 데이터 정합성이 절대적으로 중요한 초대형 전통 금융권 시스템이라면 여전히 Oracle이 강세입니다.
  • 비용을 아끼면서도 데이터 분석, 복잡한 비즈니스 로직 처리, JSON 비정형 데이터 혼용, 복잡한 조인이 필요한 엔터프라이즈급 아키텍처를 원한다면 PostgreSQL이 최선의 선택입니다.