나의 잡다한 노트 및 메모

PostgreSQL Subscription 본문

DB/PostgreSQL

PostgreSQL Subscription

peanutwalnut 2025. 8. 20. 17:07

SUBSCRIPTION은 PostgreSQL의 논리적 복제(Logical Replication) 기능에서 구독자(subscriber) 쪽에 정의하는 객체입니다. 쉽게 말하면 다른 데이터베이스의 변경 사항을 받아오는 역할을 하는 거예요.


🔹 언제 SUBSCRIPTION을 쓰나?

  1. 부분 테이블 복제 (선택적 복제)
    • 물리적 스트리밍(replication slot + standby)은 DB 전체를 통째로 복제합니다.
    • 반면 논리 복제특정 테이블만 골라서 복제할 수 있습니다.
    • 예: 운영 DB에서 orders 테이블만 분석 DB로 실시간 복제.
  2. 이기종 환경 (버전/플랫폼 다른 DB)
    • 물리 복제는 PostgreSQL 버전/플랫폼 동일성이 강제됩니다.
    • 논리 복제(SUBSCRIPTION)는 PostgreSQL 버전이 달라도, 심지어 다른 시스템(CDC → Kafka → DW)에도 활용 가능합니다.
  3. 온라인 마이그레이션
    • DB 버전을 업그레이드하거나 다른 서버로 이전할 때:
      • CREATE SUBSCRIPTION으로 새 서버에 구독을 만들고,
      • 변경사항을 실시간으로 따라가게 해서 다운타임 최소화.
  4. 다대일 / 일대다 복제
    • 한 Publisher → 여러 Subscriber (fan-out)
    • 여러 Publisher → 한 Subscriber (데이터 통합)
    • 물리 복제는 1:1(또는 cascading) 구조라서 이런 유연성이 없음.
  5. CDC(Change Data Capture)
    • 외부 분석 파이프라인(Kafka, Debezium, Spark 등)으로 변경 이벤트를 보내고 싶을 때.
    • 논리 슬롯 + subscription 조합으로 Postgres에서 직접 이벤트 추출 가능.

🔹 어떻게 동작하나?

  1. Publisher (출판자) DB
    • 특정 테이블/스키마/전체 테이블을 publication으로 등록.
      CREATE PUBLICATION mypub FOR TABLE orders, customers;
  2. 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;
  3. 실시간 동기화
    • 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