PostgreSQL 물리 복제와 논리 복제 비교 및 설정 방법
PostgreSQL의 물리 복제와 논리 복제 차이점과 구성 절차를 초보자 시각에서 정리한 기술 설명서
목차
개요
PostgreSQL 복제는 고가용성과 읽기 확장을 위해 자주 사용된다. 물리 복제와 논리 복제는 목적과 동작 방식에서 차이가 있다. 이 글은 두 방식의 차이, 장단점, 기본 설정 절차를 초보자도 이해하기 쉽게 설명한다.
물리 복제(Physical Replication)
개념
물리 복제는 데이터베이스 클러스터의 바이너리 레벨 상태를 그대로 복제한다. WAL(Write-Ahead Logging)을 스트리밍하여 마스터에서 발생한 변경을 그대로 슬레이브에 적용한다. 모든 데이터 파일과 내부 상태가 동일하게 유지된다.
장점
- 설정과 관리가 비교적 단순하다.
- 모든 변경(DDL 포함)이 자동으로 복제된다.
- 복제 지연이 적고, 복제된 노드는 장애 시 빠르게 승계 가능하다.
단점
- 테이블 단위의 선택적 복제가 불가능하다.
- 버전이나 아키텍처가 달라지면 복제 호환성 문제가 발생할 수 있다.
- 슬레이브는 읽기 전용이며 일부 복구 시 제약이 있다.
기본 설정 절차
물리 복제의 핵심 단계는 마스터에서 WAL 송신을 허용하고, 슬레이브에서 베이스백업을 받아 복제 연결을 설정하는 것이다.
마스터 설정 (postgresql.conf)
listen_addresses = '*'
wal_level = replica
max_wal_senders = 5
wal_keep_size = '512MB'
archive_mode = on
archive_command = 'cp %p /var/lib/postgresql/wal_archive/%f'
접근 제어 (pg_hba.conf)
host replication replicator 192.168.0.0/24 md5
슬레이브 초기화
pg_basebackup -h master_host -D /var/lib/postgresql/data -U replicator -P -R
-R 옵션은 standby.signal 또는 recovery.conf 설정을 자동 생성하여 복제 연결을 구성한다. 슬레이브는 재시작 후 자동으로 마스터에 연결한다.
논리 복제(Logical Replication)
개념
논리 복제는 데이터 변경을 논리적 레코드 단위로 전송한다. 특정 테이블이나 행 단위로 복제 가능하며, 서로 다른 스키마나 버전 사이에서도 유연하게 동작한다. 기본적으로 게시(publication)와 구독(subscription) 개념을 사용한다.
장점
- 테이블 단위 선택적 복제가 가능하다.
- 데이터 마이그레이션이나 버전 업그레이드 시 유용하다.
- 복제 대상에 필터링, 변환을 적용할 수 있는 확장성이 있다.
단점
- DDL 변경은 자동으로 복제되지 않아 별도 처리 필요하다.
- 설정과 운영이 물리 복제보다 복잡할 수 있다.
- 대량 트래픽 환경에서는 지연이 발생할 수 있다.
기본 설정 절차
논리 복제는 wal_level을 logical로 설정하고, 퍼블리케이션을 생성한 후 서브스크립션을 구성한다.
공통 설정 (postgresql.conf)
wal_level = logical
max_replication_slots = 10
max_wal_senders = 10
게시 생성 (마스터)
-- 예: 모든 테이블 게시
CREATE PUBLICATION my_pub FOR ALL TABLES;
-- 특정 테이블 게시
CREATE PUBLICATION my_pub_tables FOR TABLE public.users, public.orders;
구독 생성 (슬레이브 혹은 리시버)
CREATE SUBSCRIPTION my_sub
CONNECTION 'host=master_host port=5432 dbname=mydb user=replicator password=secret'
PUBLICATION my_pub;
구독 생성 시 초기 데이터 동기화도 수행한다. 필요에 따라 WITH (copy = false) 옵션으로 초기 복사를 생략할 수 있다.
물리 vs 논리 비교 요약
- 사용 목적: 고가용성 및 빠른 장애 복구는 물리 복제에 적합하다. 테이블 단위 복제나 데이터 통합은 논리 복제가 유리하다.
- 호환성: 물리 복제는 동일 버전/아키텍처에 의존한다. 논리 복제는 이질적 환경에서 유연하다.
- 운영 복잡도: 물리 복제가 단순하다. 논리 복제는 세밀한 제어와 추가 관리가 필요하다.
운영 팁과 주의사항
- 접속 사용자 권한은 최소 권한 원칙으로 구성한다. 복제 전용 계정을 생성한다.
- WAL 보존 정책(wal_keep_size, archive)을 환경에 맞게 조정한다. 보존이 짧으면 슬레이브가 따라잡지 못하는 상황 발생 가능.
- 논리 복제 사용 시 DDL 변경 계획을 세운다. 스키마 변경이 복제 지연이나 충돌을 유발할 수 있다.
- 모니터링과 경고 체계를 마련한다. pg_stat_replication, pg_replication_slots 등을 주기적으로 확인한다.
- 테스트 환경에서 장애 복구 절차를 검증한다. 복제 설정만으로는 모든 장애 시나리오를 커버하지 못한다.
문제 해결 체크리스트
- 연결 실패: pg_hba.conf와 방화벽 설정, 사용자 인증 정보를 확인한다.
- 슬롯 누적: 논리 슬롯이 소비되지 않으면 디스크 점유가 증가하므로 불필요한 슬롯 제거가 필요하다.
- 복제 지연: 네트워크 대역폭과 WAL 생성량, I/O 성능을 점검한다.
결론
물리 복제는 간단하고 안정적인 장애 대응에 유리하다. 논리 복제는 선택적 복제와 마이그레이션에 강점이 있다. 목적과 운영 환경을 고려해 적절한 방식을 선택하고, 설정·테스트·모니터링을 병행하면 안정적인 복제 환경을 구성할 수 있다.