PostgreSQL 기능 동결 이후 파티셔닝·논리 복제·pgvector 아키텍처

PostgreSQL 기능 동결 이후 파티션 프루닝, 논리적 복제와 CDC, pgvector 하이브리드 검색, PostgreSQL 13 업그레이드 전략을 정리한다.

2026-08-14 · 최초 발행 2026-04-23

기능 동결 뒤에 확정된 일정과 검증 구간

PostgreSQL 19의 기능 동결은 2026년 4월 8일 공식 시작됐다. 9월 정식 출시를 앞둔 이 시점에는 선언적 파티셔닝, 논리적 복제, pgvector 기반 벡터 검색과 관련한 변경사항이 확정되고, 이후 작업은 버그 수정·성능 개선·문서화에 집중된다. 신규 기능은 다음 CommitFest로 넘어간다.

마일스톤 날짜 내용
CommitFest 2026-01 완료 2026년 2월 주요 패치 병합 완료
Feature Freeze 2026년 4월 8일 신규 기능 추가 중단
Beta 1 2026년 6월 예정 안정화 테스트 시작
정식 출시 2026년 9월 예정 GA 릴리스
PostgreSQL 13 EOL 2025년 11월 보안 패치 지원 종료
2026-01-012026-02-012026-03-012026-04-012026-05-012026-06-012026-07-012026-08-012026-09-01CommitFest 2026-01 CommitFest 2026-03 Feature Freeze Beta 테스트 RC 릴리스 GA 출시 개발 단계안정화PostgreSQL 19 릴리스 타임라인

프루닝을 전제로 파티션을 운영하는 방법

선언적 파티셔닝은 PostgreSQL 10부터 계속 확장되어 왔다. 이번 변경은 파티션을 조회 시점에 제외하는 최적화뿐 아니라, 장기간 쌓인 데이터를 재구성하는 관리 작업에도 초점이 맞춰져 있다.

WHERE 절에 리터럴이 있으면 플래너는 계획 시간에 조회 대상 파티션을 고를 수 있다. 파라미터화된 쿼리나 서브쿼리 결과처럼 값이 실행 중에 확정되는 경우에는 실행 시간 프루닝이 적용된다. enable_partition_pruning의 기본값은 on이며, 이를 비활성화하면 전체 파티션 스캔이 발생한다.

-- 파티션 프루닝 동작 확인
EXPLAIN (ANALYZE, BUFFERS)
SELECT * FROM orders
WHERE created_at BETWEEN '2026-01-01' AND '2026-03-31';

-- 결과: Partitions: orders_2026_q1 (나머지 파티션 제외됨)

ALTER TABLE ... MERGE PARTITIONS는 인접한 두 파티션을 하나로 합치며, 데이터 이동 없이 메타데이터 수준에서 처리한다. 반대로 ALTER TABLE ... SPLIT PARTITION은 기준값을 따라 하나의 파티션을 나누고, 레인지와 리스트 파티션 모두에 적용할 수 있다. 파티션 테이블 초기 동기화에 활용할 수 있는 COPY ... TO 개선도 논리적 복제 초기화 속도와 연결된다.

-- 파티션 병합 예시 (PostgreSQL 19)
ALTER TABLE orders
MERGE PARTITIONS (orders_2025_q3, orders_2025_q4)
INTO orders_2025_h2;

-- 파티션 분할 예시
ALTER TABLE orders
SPLIT PARTITION orders_2026
INTO (
    PARTITION orders_2026_h1 FOR VALUES FROM ('2026-01-01') TO ('2026-07-01'),
    PARTITION orders_2026_h2 FOR VALUES FROM ('2026-07-01') TO ('2027-01-01')
);

파티션 방식은 데이터 접근 방식, 보존 정책, 파티션 수를 함께 보고 정한다.

전략 적합 케이스 파티션 프루닝 효과 관리 복잡도
범위 파티셔닝(Range) 시계열, 로그 데이터 높음 중간
목록 파티셔닝(List) 지역, 카테고리 분류 중간 낮음
해시 파티셔닝(Hash) 균등 분산 필요 시 낮음 낮음
복합 파티셔닝(Composite) 대용량 + 다차원 조건 매우 높음 높음

WAL에서 이벤트 스트림까지 이어지는 논리적 복제

논리적 복제는 WAL(Write-Ahead Log)의 행 수준 변경사항을 추출해 구독자에 보내는 방식이다. PostgreSQL 19에서는 WAL 생성 효율성이 개선됐다.

PostgreSQL 19 개선사항Writer ProcessWAL(Write-Ahead Log)WAL Decoder(pgoutput)Replication SlotSubscriber(복제 대상)CDC Consumer(Debezium·Kafka)

주요 변경사항에는 불필요한 WAL 레코드 생성을 억제하는 WAL 생성 최소화, 실제 적용 중인 WAL 레벨을 조회하는 effective_wal_level 서버 변수, wal_level = replica에서 논리 복제가 필요한 시점의 WAL 레벨 자동 승격, 충돌 해소에 필요한 정보를 보존하는 retain_conflict_info 구독자 설정이 포함된다.

CDC(Change Data Capture)는 데이터베이스 변경을 실시간으로 캡처해 이벤트 스트림으로 전달한다. 논리적 복제의 Replication Slot과 Debezium·Kafka를 연결하면 검색 색인, 분석 적재, 마이크로서비스 이벤트 소비, Redis 캐시 무효화 같은 소비 경로를 구성할 수 있다.

WAL 스트림PostgreSQL 19(Primary)Replication Slot(pgoutput)DebeziumKafka ConnectorKafka Topic(orders.public.events)Elasticsearch(검색 색인)Data Warehouse(분석용 적재)마이크로서비스(이벤트 소비)캐시 무효화(Redis)

운영 중에는 미소비된 Replication Slot이 WAL 파일을 누적시켜 디스크 고갈로 이어질 수 있음을 관리해야 한다. 복제 시작 시에는 전체 테이블의 초기 스냅샷이 필요하며, DDL은 논리 복제만으로 자동 전파되지 않아 스키마 버전 관리가 필요하다. Kafka Consumer 쪽에는 at-least-once 보장에 대응하는 중복 제거(idempotent processing)도 구현해야 한다.

-- 논리 복제 슬롯 생성
SELECT pg_create_logical_replication_slot('my_cdc_slot', 'pgoutput');

-- WAL 변경사항 직접 조회 (디버깅 용도)
SELECT * FROM pg_logical_slot_peek_binary_changes(
    'my_cdc_slot', NULL, NULL,
    'proto_version', '1',
    'publication_names', 'my_publication'
);

-- 슬롯 상태 모니터링
SELECT slot_name, active, restart_lsn, confirmed_flush_lsn,
       pg_wal_lsn_diff(pg_current_wal_lsn(), restart_lsn) AS lag_bytes
FROM pg_replication_slots;

pgvector로 벡터·전문·관계형 검색을 함께 다루기

pgvector는 PostgreSQL에 벡터 데이터 타입과 유사도 검색을 더하는 확장이다. PostgreSQL 19 커뮤니티는 pgvector와의 통합을 핵심 방향으로 설정했고, 하이브리드 검색 지원도 강화된다.

IVFFlat은 클러스터 기반의 근사 최근접 이웃(ANN) 검색으로, 빠른 빌드 시간과 정확도·속도 간 조정이 특징이다. HNSW(Hierarchical Navigable Small World)는 그래프 기반 ANN으로 높은 재현율(Recall)을 제공하는 대신 메모리 사용량이 늘어난다.

-- 벡터 컬럼 생성
CREATE TABLE documents (
    id BIGSERIAL PRIMARY KEY,
    content TEXT,
    embedding vector(1536),  -- OpenAI text-embedding-3-small 차원
    created_at TIMESTAMPTZ DEFAULT now()
);

-- HNSW 인덱스 생성 (높은 재현율)
CREATE INDEX ON documents
USING hnsw (embedding vector_cosine_ops)
WITH (m = 16, ef_construction = 64);

-- 유사도 검색 쿼리
SELECT id, content,
       1 - (embedding <=> '[0.1, 0.2, ...]'::vector) AS similarity
FROM documents
ORDER BY embedding <=> '[0.1, 0.2, ...]'::vector
LIMIT 10;
AI 애플리케이션Embedding 모델(OpenAI / 로컬 LLM)PostgreSQL 19(pgvector 탑재)벡터 검색(HNSW 인덱스)전문 검색(tsvector + GIN)관계형 쿼리(JOIN + 필터)하이브리드 랭킹(RRF: Reciprocal RankFusion)최종 검색 결과

하나의 PostgreSQL 인스턴스에서 벡터, 전문, 관계형 검색을 결합하면 별도 벡터 DB(Pinecone, Weaviate) 없이 단일 데이터 소스를 유지할 수 있다. 벡터 데이터와 메타데이터는 ACID 트랜잭션 안에서 일관성을 유지하고, SQL JOIN으로 벡터 검색 결과에 비즈니스 필터를 바로 적용할 수 있다.

벡터 수 권장 구성 비고
~100만 PostgreSQL + pgvector 단일 인스턴스로 충분
100만~1000만 PostgreSQL + pgvector + 파티셔닝 파티션별 인덱스 분리
1000만 이상 전용 벡터 DB 검토 Pinecone, Qdrant, Weaviate

지원이 끝난 PostgreSQL 13 환경의 이전 경로

PostgreSQL 13은 2025년 11월에 공식 지원이 종료됐다. 보안 패치와 버그 수정이 중단되므로 업그레이드를 검토해야 한다.

pg_upgrade는 물리적 데이터 디렉터리를 마이그레이션해 다운타임을 최소화하는 경로다. 신규 인스턴스를 논리 복제 대상으로 두고 트래픽을 전환한 뒤 구버전을 제거하는 무중단 업그레이드도 가능하다. 소규모 데이터베이스라면 pg_dump/restore를 쓸 수 있지만 다운타임은 피할 수 없으며, AWS RDS·Azure Database·Google Cloud SQL의 인플레이스 업그레이드 기능을 활용하는 방법도 있다.

# pg_upgrade를 이용한 버전 업그레이드 (예시)
pg_upgrade \
  -b /usr/lib/postgresql/13/bin \
  -B /usr/lib/postgresql/19/bin \
  -d /var/lib/postgresql/13/main \
  -D /var/lib/postgresql/19/main \
  --check  # 실제 업그레이드 전 호환성 검사

파티션 병합·분할은 장기 운영 데이터의 재편성 비용을 낮추는 선택지다. WAL 효율화와 CDC를 결합한 논리적 복제는 실시간 데이터 파이프라인의 기반이 될 수 있으며, HNSW와 하이브리드 검색은 별도 벡터 DB 없이 AI 애플리케이션 데이터 계층을 단순화하는 경로가 된다.

Sources

PostgreSQL논리적 복제파티셔닝pgvectorCDC