본문으로 건너뛰기
11.1 백업 전략 결정

11.1 백업 전략 결정

운영 PostgreSQL의 백업 전략은 데이터 손실 허용량(RPO)과 복구 시간 허용량(RTO), 그리고 보존 기간으로 결정됩니다. PostgreSQL은 두 갈래 — 논리 백업(pg_dump)과 물리 백업(pg_basebackup·pgBackRest·Barman)을 모두 지원합니다. 둘의 차이와 의사결정 기준을 정리합니다.

논리 vs 물리

측면논리 백업물리 백업
단위SQL/COPY 텍스트 또는 custom 포맷페이지 그대로 + WAL
도구pg_dump, pg_dumpallpg_basebackup, pgBackRest, Barman
크기보통 작음 (압축)원본 + WAL
복원 시간느림 (SQL 재실행, 인덱스 재생성)빠름 (페이지 복사)
PITR불가능 (스냅샷 시점만)가능 (WAL 재생)
클러스터 vs DBDB 1개 단위로 가능클러스터 전체
메이저 버전 간 이동가능불가 (같은 메이저만)
일부 테이블만가능 (-t orders)불가
운영 부하큰 테이블은 부담base 백업 1회, 그 후 WAL 누적은 가벼움

의사결정

    flowchart TD
  Q1{"보호 요구"}
  Q1 -- "최근 N시간 손실 OK" --> LOGICAL["pg_dump<br/>(주기 스냅샷)"]
  Q1 -- "초 단위 손실까지 방어" --> PITR["pg_basebackup + WAL archive<br/>또는 pgBackRest"]

  Q2{"버전 마이그레이션"}
  Q2 -- "메이저 업그레이드 도구" --> LOGICAL2["pg_dump 또는 logical replication"]
  Q2 -- "같은 메이저 내 이동" --> PHYSICAL["physical"]

  Q3{"클러스터 규모"}
  Q3 -- "< 50GB" --> EITHER["둘 다 OK"]
  Q3 -- "> 500GB" --> PHYSICAL3["physical (pgBackRest/Barman)"]

  classDef log fill:#dbeafe,stroke:#1d4ed8,color:#1e3a8a
  classDef phy fill:#d1fae5,stroke:#047857,color:#064e3b
  classDef q fill:#fed7aa,stroke:#c2410c,color:#7c2d12
  class LOGICAL,LOGICAL2,EITHER log
  class PITR,PHYSICAL,PHYSICAL3 phy
  class Q1,Q2,Q3 q
  

운영 표준 권장:

시나리오백업 전략
일반 운영pgBackRest (또는 Barman) 일별 풀 + 시간별 증분 + WAL archive 연속
작은 DB (< 50GB)nightly pg_dump + 14일 보존 가능
마이그레이션·테스트 환경 복제pg_dump (custom format)
클라우드 매니지드클라우드 자체 백업 (RDS automated backups 등)
컴플라이언스 — 장기 보존physical 백업 + 외부 cold storage (S3 Glacier)

RPO·RTO 매트릭스

RPO 요구RTO 요구권장
24h시간 단위일일 pg_dump
1h시간 단위pg_basebackup + WAL archive
분 단위분 단위동기 standby + WAL archive
초 단위초 단위동기 standby + failover 자동화
0 (무손실)초 단위동기 quorum 복제 + 자동 failover

3-2-1 규칙

  • 3 카피
  • 2 다른 매체
  • 1 오프사이트

PostgreSQL 환경 매핑:

  • primary 데이터 + standby + archive — 3 카피
  • 로컬 디스크 + 외부 객체 저장소 — 2 매체
  • 다른 리전 또는 cold storage — 오프사이트

운영 사고의 70%는 3-2-1 미준수에서 시작합니다. “어제 백업했는데 백업 디렉토리가 같은 디스크에 있었다” 같은 사례가 흔합니다.

WAL archive의 역할

물리 백업의 핵심은 기준 백업 + 그 이후의 WAL. WAL이 누락되면 base 백업 시점까지밖에 복구 못 함 → RPO 큽니다.

archive_command가 계속 성공해야 PITR이 의미.

SELECT * FROM pg_stat_archiver;
-- last_archived_wal, last_failed_wal, last_failed_time

last_failed_timelast_archived_time보다 늦으면 archive 실패 후 미복구 — 즉시 대응합니다.

백업 자체의 검증

가장 자주 잊는 단계. 백업이 복원 가능한지를 정기 확인하지 않으면 필요할 때 실패합니다.

검증 빈도방법
매주pg_dump 결과를 빈 인스턴스에 restore — 자동화
매월물리 백업 PITR을 staging에서 실제 실행
매분기운영자가 DR 시나리오 시뮬레이션 (역할 분담 포함)

“백업이 있는가"가 아니라 “방금 복원 시도가 성공했는가"가 진짜 지표

저장 위치

위치용도
로컬 NVMe빠른 backup write, 임시
같은 호스트의 별 디스크빠른 복구
외부 NFS/네트워크 스토리지호스트 망 시 안전
S3 / NCP Object Storage / Azure Blob오프사이트 표준
Glacier / Archive tier장기 보존 (저렴)

pgBackRest는 S3·Azure·GCS·SFTP 다 직접 지원합니다. Barman은 SSH/SFTP 기반입니다.

보존 정책

카테고리일반
nightly14~30일
weekly full3개월
monthly1년
yearly7년 (컴플라이언스 요구)

pgBackRest의 expire 명령 또는 Barman의 retention_policy가 자동 정리합니다.

흔한 사고 패턴

사고원인예방
백업 디스크가 데이터와 같이 망함단일 디스크오프사이트
archive_command 실패가 모르게 누적모니터링 부족pg_stat_archiver 알람
pg_dump 30분 걸린다고 새벽에만 돌림RPO 24h물리 백업으로 전환
복원 절차 문서가 옛 버전검증 안 함분기 DR 훈련
매니지드 백업만 믿음클라우드 사고 가능성외부 dump 보조
클라우드 매니지드의 자동 백업도 클라우드 콘솔 안에 산다. 계정 사고·삭제·리전 장애 시 같이 사라집니다. 외부 객체 저장소로 별도 dump가 컴플라이언스의 표준입니다.

정리

  • 백업 결정 = RPO + RTO + 보존 정책의 함수
  • 운영 표준은 pgBackRest 또는 Barman + WAL archive 연속
  • 작은 DB·마이그레이션엔 pg_dump 적절, 큰 DB·PITR 필요는 물리
  • 3-2-1 규칙: 3 카피, 2 매체, 1 오프사이트
  • WAL archive 실패는 즉시 알람 — pg_stat_archiver.last_failed_time
  • 복원 검증이 진짜 지표 — “방금 복원 성공했나”

다음 절(11.2)에서는 가장 단순한 백업 도구 — **pg_dump / pg_restore**를 봅니다.