나의 잡다한 노트 및 메모
PostgreSQL Subscription 본문
SUBSCRIPTION은 PostgreSQL의 논리적 복제(Logical Replication) 기능에서 구독자(subscriber) 쪽에 정의하는 객체입니다. 쉽게 말하면 다른 데이터베이스의 변경 사항을 받아오는 역할을 하는 거예요.
🔹 언제 SUBSCRIPTION을 쓰나?
- 부분 테이블 복제 (선택적 복제)
- 물리적 스트리밍(replication slot + standby)은 DB 전체를 통째로 복제합니다.
- 반면 논리 복제는 특정 테이블만 골라서 복제할 수 있습니다.
- 예: 운영 DB에서 orders 테이블만 분석 DB로 실시간 복제.
- 이기종 환경 (버전/플랫폼 다른 DB)
- 물리 복제는 PostgreSQL 버전/플랫폼 동일성이 강제됩니다.
- 논리 복제(SUBSCRIPTION)는 PostgreSQL 버전이 달라도, 심지어 다른 시스템(CDC → Kafka → DW)에도 활용 가능합니다.
- 온라인 마이그레이션
- DB 버전을 업그레이드하거나 다른 서버로 이전할 때:
- CREATE SUBSCRIPTION으로 새 서버에 구독을 만들고,
- 변경사항을 실시간으로 따라가게 해서 다운타임 최소화.
- DB 버전을 업그레이드하거나 다른 서버로 이전할 때:
- 다대일 / 일대다 복제
- 한 Publisher → 여러 Subscriber (fan-out)
- 여러 Publisher → 한 Subscriber (데이터 통합)
- 물리 복제는 1:1(또는 cascading) 구조라서 이런 유연성이 없음.
- CDC(Change Data Capture)
- 외부 분석 파이프라인(Kafka, Debezium, Spark 등)으로 변경 이벤트를 보내고 싶을 때.
- 논리 슬롯 + subscription 조합으로 Postgres에서 직접 이벤트 추출 가능.
🔹 어떻게 동작하나?
- Publisher (출판자) DB
- 특정 테이블/스키마/전체 테이블을 publication으로 등록.
CREATE PUBLICATION mypub FOR TABLE orders, customers;
- 특정 테이블/스키마/전체 테이블을 publication으로 등록.
- Subscriber (구독자) DB
- replication connection으로 publisher에 붙고,
- publication에 등록된 변경 사항(WAL에서 논리 decoding)을 받아 apply.
CREATE SUBSCRIPTION mysub CONNECTION 'host=pub-db port=5432 dbname=mydb user=replicator password=secret' PUBLICATION mypub;
- 실시간 동기화
- INSERT/UPDATE/DELETE 이벤트가 subscriber에 순차 적용됨.
- Primary Key 필요(UPDATE/DELETE 추적용).
🔹 운영 시 주의사항
- DDL 복제 안 됨 → 스키마 변경은 수동 반영 필요.
- PK 없는 테이블은 UPDATE/DELETE 복제 불가.
- 대량 초기 로딩: COPY 기반 initial load 후에 스트리밍 적용.
- 슬롯 관리 필요: subscription마다 논리 슬롯 자동 생성됨 → pg_replication_slots 확인 필요.
- 성능: commit 단위로 이벤트 전송 → TPS 높은 환경은 apply 지연 발생할 수 있음.
'DB > PostgreSQL' 카테고리의 다른 글
| PostgreSQL Vacuum (3) | 2025.08.22 |
|---|---|
| PostgreSQL tablespace (0) | 2025.08.22 |
| PostgreSQL Replication slot (0) | 2025.08.20 |
| PG의 2PC(2-Phase-Commit) (4) | 2025.08.11 |
| PG의 wal_level 설정 (3) | 2025.07.30 |