PostgreSQL 아키텍처와 엔터프라이즈 고가용성 운영 전략
PostgreSQL의 MVCC·WAL·JSONB·확장 구조와 Patroni, pgBackRest, 파티셔닝을 활용한 엔터프라이즈 운영 전략을 정리한다.
2026-08-14 · 최초 발행 2026-04-25
개발자 선호도와 기업 채택이 바꾼 PostgreSQL의 위치
Stack Overflow 개발자 설문 2024·2025에서 PostgreSQL은 2년 연속 가장 선호하는 데이터베이스 1위로 집계됐다. 사용률은 55.6%이며 MySQL과의 차이는 15포인트 이상이다. 2017년에는 MySQL보다 약 30% 포인트 낮은 사용률로 4위권에 있었지만, 8년 사이 흐름이 뒤집혔다. 2025년 설문에서 Most Admired는 66%, Most Desired는 47%였고, 두 카테고리 모두 3년 연속 1위다.
엔터프라이즈 도입 수요는 600% 급증했다. Instagram·Netflix·Uber·Spotify·Apple 같은 글로벌 테크 기업이 주요 워크로드에 PostgreSQL을 사용하면서 오픈소스 DB에 대한 신뢰도도 달라졌다. 라이선싱 비용 없이 Oracle급 기능을 제공한다는 점은 클라우드 네이티브 전환 환경에서 특히 강한 선택 기준이 된다.
읽기와 쓰기가 만나는 지점: MVCC와 WAL
MVCC(Multiversion Concurrency Control)는 PostgreSQL의 동시성 제어 방식이다. 전통적인 잠금 기반 접근과 달리 읽기와 쓰기가 서로를 막지 않는다.
UPDATE는 기존 행을 직접 바꾸는 대신 새 버전의 행을 만든다. DELETE 역시 데이터를 즉시 제거하지 않고 dead tuple을 남긴다. 각 행에 기록되는 트랜잭션 ID(XID)는 해당 행을 생성하거나 삭제한 트랜잭션을 추적하며, 이 구조가 트랜잭션 격리 수준과 높은 동시성을 함께 지탱한다.
dead tuple은 VACUUM이 주기적으로 정리한다. 쓰기가 잦은 대용량 테이블이라면 autovacuum 설정이 운영 성능에 직접 영향을 준다.
WAL(Write-Ahead Logging)은 내구성과 복구, 복제의 출발점이다. 데이터 변경은 실제 데이터 파일에 반영되기 전에 WAL 로그에 순차적으로 기록되고, 장애가 나면 이 로그를 replay해 데이터를 복구한다.
WAL Writer는 커밋 시점에 WAL 레코드를 디스크로 플러시한다. WAL Archiver는 복구나 복제를 위해 WAL 세그먼트를 외부 저장소에 아카이빙한다. Primary의 WAL 스트림은 WAL Sender가 복제본으로 보내고, WAL Receiver가 이를 수신해 적용한다. 이 흐름이 Streaming Replication과 Logical Replication, Point-In-Time Recovery(PITR)를 가능하게 한다.
확장을 통한 범용 데이터 플랫폼
PostgreSQL의 확장성은 MySQL 대비 3.7배 더 많은 300+ 확장(extension)으로 구현된다.
| 카테고리 | 확장 | 역할 |
|---|---|---|
| AI/벡터 검색 | pgvector | 별도 벡터 DB 없이 임베딩 저장·검색 |
| 전문 검색 | tsvector/tsquery, pg_trgm | 외부 검색 엔진 대체 |
| 시계열 | TimescaleDB | 시계열 데이터 최적화 |
| 지리 정보 | PostGIS | 공간 데이터 처리 |
| 쿼리 분석 | pg_stat_statements | 쿼리 성능 통계 수집 |
| 샤딩 | Citus | 수평 확장 |
JSONB는 하이브리드 데이터 모델에서 중심 역할을 한다. 일반 JSON과 달리 이진(binary) 포맷으로 저장돼 파싱 오버헤드 없이 빠르게 조회할 수 있고, GIN(Generalized Inverted Index) 인덱스로 JSON 내부 키·값 검색도 인덱스 스캔으로 처리한다. MySQL의 텍스트 기반 JSON과 비교하면 쿼리 성능은 3~4배 빠르다.
스키마 변경이 잦거나 속성이 일정하지 않은 사용자 설정, 이벤트 메타데이터, 외부 API 응답에는 JSONB가 잘 맞는다. 다만 jsonb_set()으로 키 하나를 바꾸더라도 내부적으로 전체 값이 재작성되므로, 쓰기가 매우 빈번한 컬럼에는 신중해야 한다.
워크로드 성격으로 보는 데이터베이스 선택
2025년 기준 PostgreSQL은 90% 이상의 워크로드에 최적의 선택으로 평가된다. MySQL은 PHP/Laravel 기반 레거시 시스템이나 단순 CRUD 위주 애플리케이션에서 여전히 유효하다. MongoDB는 스키마 변화가 매우 빠른 프로토타입, 로깅 파이프라인, IoT 이벤트 소싱에서 강점을 가진다.
Oracle과 비교하면 PostgreSQL은 파티셔닝, 병렬 쿼리, 윈도우 함수, CTE, 논리적 복제 같은 엔터프라이즈 핵심 기능을 제공한다. 라이선싱 비용이 없다는 점은 TCO(총 소유 비용) 측면의 경쟁력으로 이어진다.
Patroni로 구성하는 고가용성 클러스터
Patroni는 PostgreSQL 고가용성의 사실상 표준 솔루션이다. 자동 장애 감지, 리더 선출, 페일오버를 제공하며, etcd·Consul·ZooKeeper 중 하나를 분산 합의(consensus) 저장소로 사용한다.
장애가 발생하면 Patroni는 etcd의 분산 합의를 이용해 새 Primary를 자동 선출한다. 기존 Primary가 복구되면 Standby로 다시 합류한다. REST API로 클러스터 상태를 실시간 확인하고 자동화 훅(hook)을 연결할 수 있으며, HAProxy를 연동하면 애플리케이션은 단일 엔드포인트를 통해 현재 Primary에 접근한다.
백업·관측·파티셔닝을 운영에 연결하기
pgBackRest는 PostgreSQL 전용 엔터프라이즈 백업 솔루션이며 Patroni와 통합된다. 전체 백업과 블록 레벨 증분 백업을 조합해 백업 시간과 저장 용량을 절감하고, Standby에서 백업을 실행해 Primary 부하를 피할 수 있다. 지속적인 WAL 아카이빙은 PITR을 지원하며, 병렬 압축과 S3·GCS·Azure 오브젝트 스토리지 연동도 제공한다.
PITR(Point-In-Time Recovery)은 특정 트랜잭션 직전으로 되돌리는 복구 방식이다. 실수로 대량 DELETE를 실행했거나 데이터가 손상된 경우에 핵심 복구 수단이 된다.
모니터링은 인스턴스, 쿼리, 클러스터 계층으로 나눠 본다. 인스턴스 상태는 pg_stat_activity, pg_stat_bgwriter, pg_stat_replication으로 파악한다. 쿼리별 실행 시간·호출 횟수·I/O 통계는 pg_stat_statements 확장에서 수집하고, pgBadger는 PostgreSQL 로그를 파싱해 슬로우 쿼리와 에러 패턴을 시각화한다. 클러스터 레벨에서는 Patroni REST API가 노드별 역할(primary/replica), 복제 동기화 상태, 페일오버 이력을 제공한다. Prometheus + patroni_exporter와 Grafana 조합이 일반적이다.
수억 건 이상의 테이블에는 선언적 파티셔닝이 필요하다. PostgreSQL은 날짜·숫자 범위를 기준으로 하는 RANGE, 특정 값 기준의 LIST, 균등 분산을 위한 HASH 방식을 제공한다. 파티션 프루닝(partition pruning)은 쿼리 플래너가 필요한 파티션만 스캔하게 해 I/O를 줄인다. 오래된 파티션은 DETACH PARTITION으로 즉시 아카이빙하고, 새 파티션은 ATTACH PARTITION으로 무중단 추가할 수 있다.
정형 데이터와 JSONB를 함께 설계하는 방식
PostgreSQL에서는 정형 데이터와 반정형 데이터를 같은 데이터베이스에서 다룰 수 있다. 자주 검색하거나 조인하는 속성은 정규화된 컬럼으로 분리하고, 불규칙한 속성이나 외부 유입 메타데이터는 JSONB에 저장하는 방식이 실용적이다. JSONB 컬럼에서 빈번히 찾는 키에는 표현식 인덱스(CREATE INDEX ON table ((data->>'key'))) 또는 GIN 인덱스를 추가한다.
이벤트 소싱은 대표적인 적용 패턴이다. 이벤트 타입·타임스탬프·사용자 ID는 정규 컬럼으로 두어 인덱스 스캔을 보장하고, 이벤트별로 달라지는 페이로드는 JSONB에 담는다. 이 구조는 MongoDB의 유연성과 PostgreSQL의 조인·집계 성능을 함께 활용한다.
PostgreSQL은 관계형·문서·벡터·전문 검색 워크로드를 포괄하는 범용 데이터 플랫폼으로 확장됐다. MVCC와 WAL이 동시성 및 내구성의 기반을 만들고, JSONB와 300개 이상의 확장이 다양한 워크로드를 단일 스택에서 처리하게 한다. Patroni·pgBackRest·파티셔닝으로 이어지는 운영 생태계는 Oracle 마이그레이션을 실질적으로 검토할 수 있는 수준이며, 데이터베이스 선택의 90%에서 PostgreSQL이 최적이라는 평가는 이 아키텍처와 생태계에 기반한다.
Sources
- EDB Blog - Postgres Named Developers' Favorite Database 2024
- Yugabyte Blog - Why PostgreSQL Remains the Top Choice for Developers in 2025
- PostgreSQL Documentation - MVCC Introduction
- Blog AlgoMaster - How PostgreSQL Works: Internal Architecture
- SitePoint - PostgreSQL JSONB Performance Guide
- Percona Blog - Patroni: The Key PostgreSQL Component for Enterprise HA
- Percona Docs - High Availability in PostgreSQL with Patroni
- Medium - Patroni PostgreSQL High Availability with pgBackRest
- DBVis - Bridging the Gap Between SQL and NoSQL in PostgreSQL
- AWS Blog - PostgreSQL as a JSON database: Advanced patterns and best practices
- Tech Insider - PostgreSQL vs MySQL 2026: 3.7x JSON Gap