프로덕션급 PostgreSQL을 위한 최고의 pg_dump 백업 전략 7가지
Source: Dev.to
위에 제공된 소스 링크 외에 번역할 텍스트가 포함되어 있지 않습니다. 번역을 원하는 본문을 알려주시면 한국어로 번역해 드리겠습니다.
소개
pg_dump을 가끔 수동으로 실행하는 것은 백업 전략이 아니라 도박에 불과합니다. 운영 데이터베이스는 데이터 성장, 복구‑시간 목표(RTO) 및 운영 현실을 고려한 체계적인 접근이 필요합니다. 아마추어 수준과 프로덕션‑급 백업의 차이는 전략에 달려 있습니다: 무엇을, 언제, 어디에, 그리고 얼마나 자주 백업을 생성할지 아는 것입니다.

1. 회전이 포함된 예약 전체 백업
모든 프로덕션 백업 전략의 기반은 자동화된, 예약된 전체 백업과 지능적인 회전 정책을 결합한 것입니다. 이는 최신 백업을 항상 사용할 수 있게 보장하면서 저장소가 무한히 증가하는 것을 방지합니다.
회전 정책 (grandfather‑father‑son)
| 보존 기간 | 설명 |
|---|---|
| 일일 | 7일 보관 – 최근 실수에 대한 빠른 복구 |
| 주간 | 4주 보관 – 중기 복구 |
| 월간 | 12개월 보관 – 규정 준수 및 기록 접근 |
PowerShell 스크립트 예시 (매일 오전 2 시 실행)
# daily_backup.ps1
$timestamp = Get-Date -Format "yyyy-MM-dd_HHmmss"
pg_dump -F c -Z 6 -h localhost -U postgres -d production_db -f "backup_$timestamp.dump"
Windows 작업 스케줄러 – 작업: powershell.exe
Arguments: -File "C:\backups\scripts\daily_backup.ps1"
자동화가 없으면 백업 일관성은 인간의 기억에 의존하게 되며—특히 백업이 가장 중요한 바쁜 시기에 사람은 잊어버립니다.
2. 사전 배포 안전 백업
데이터베이스에 영향을 주는 모든 배포는 변경이 실행되기 전 즉시 백업을 트리거해야 합니다. 이렇게 하면 몇 시간 전이 아니라 몇 분 전의 복구 지점을 확보할 수 있습니다.
백업 매트릭스
| 트리거 이벤트 | 백업 유형 | 보존 기간 |
|---|---|---|
| 스키마 마이그레이션 | 전체 데이터베이스 | 최소 48 시간 |
| 주요 릴리스 | 전체 데이터베이스 | 다음 성공적인 릴리스까지 |
| 데이터 가져오기 / ETL | 영향을 받은 테이블 | 24 시간 |
| 수동 데이터 수정 | 영향을 받은 테이블 | 72 시간 |
예시 스니펫
# CI/CD 파이프라인에서 사전‑배포 백업
$release = $env:RELEASE_VERSION
$timestamp = Get-Date -Format "yyyyMMdd_HHmmss"
pg_dump -F c -Z 6 -d production_db -f "pre_deploy_${release}_${timestamp}.dump"
# 마이그레이션 전 특정 테이블에 대한 대상 백업
pg_dump -F c -d production_db -t users -t orders -f "pre_migrate_critical_tables.dump"
배포 파이프라인에 백업 트리거를 통합하면 “누가 백업을 했나요?”라는 질문이 사라집니다. 백업은 배포가 완료될 때까지 차단되는 필수 단계가 됩니다.
3. 대용량 데이터베이스를 위한 병렬 덤프 전략
데이터베이스 크기가 약 50 GB를 초과하면 단일 스레드 pg_dump가 매우 느릴 수 있습니다. 병렬 덤프는 여러 CPU 코어를 활용해 여러 테이블을 동시에 덤프함으로써 최신 멀티코어 서버에서 백업 시간을 60‑80 % 정도 단축합니다. 백업을 테이블별 파일로 나누는 디렉터리 형식(-F d)을 사용하십시오.
예시 명령
# 4개의 워커로 병렬 덤프
pg_dump -F d -j 4 -Z 6 -h localhost -U postgres -d large_db -f backup_dir/
# (워커 수를 맞춘) 병렬 복원
pg_restore -F d -j 4 -h localhost -U postgres -d restored_db backup_dir/
# 백업 디렉터리 내용 확인
ls -l backup_dir/
# 예상 결과: toc.dat, 3456.dat.gz, 3457.dat.gz, …
팁: CPU 코어 수 – 2 정도의 워커 수로 시작해 PostgreSQL과 OS를 위한 여유를 남겨두세요. 16코어 서버에서는 보통 -j 12 또는 -j 14가 데이터베이스를 불안정하게 만들지 않으면서 처리량을 최대로 끌어올립니다.
4. Schema‑and‑Data Separation Strategy
스키마 백업을 데이터 백업과 분리하면 복구 작업이 빨라지고 버전‑컨트롤 관행이 향상됩니다. 스키마‑전용 백업은 데이터베이스 크기에 관계없이 몇 킬로바이트 수준으로 작으며, 애플리케이션 코드와 함께 Git에 저장할 수 있습니다. 데이터‑전용 백업은 비교적 정적인 스키마 정의를 건너뛰므로 더 자주 생성할 수 있습니다.
Backup matrix
| 백업 유형 | 대략적인 크기 | 빈도 | 저장 위치 |
|---|---|---|---|
| Schema‑only | ~50 KB | 커밋/배포마다 | Git repository |
| Data‑only | Varies | 시간별/일별 | Cloud storage |
| Full backup | Largest | Weekly | Off‑site archive |
Example snippets
# Schema backup for version control
pg_dump -d production_db --schema-only -O --no-privileges -f schema.sql
# Data‑only backup (assumes schema exists at restore target)
pg_dump -F c -d production_db --data-only -f data_backup.dump
# Restore workflow: schema first, then data
psql -d new_db -f schema.sql
pg_restore -d new_db --data-only data_backup.dump
이 분리는 각 서비스가 자체 스키마를 소유하지만 공통 데이터 저장소를 공유하는 마이크로‑서비스 아키텍처에서 특히 빛을 발합니다.
전체 가이드에서 나머지 세 가지 전략을 계속 읽으며 견고하고 프로덕션‑급 PostgreSQL 백업 체계를 구축하세요.
Source: …
5. 다중 목적지 백업 전략
모든 백업을 한 곳에 저장하면 단일 장애 지점이 됩니다. 다중 목적지 전략은 백업을 여러 저장 시스템에 복사합니다 — 빠른 접근을 위한 로컬 디스크, 오프사이트 보호를 위한 클라우드 스토리지, 그리고 재해 복구를 위한 보조 지역 등. 어느 하나의 저장 시스템이 실패하더라도 백업은 다른 곳에서 사용할 수 있습니다.
# Backup to local storage first
$backupFile = "backup_$(Get-Date -Format 'yyyyMMdd').dump"
pg_dump -F c -Z 6 -d production_db -f "C:\backups\local\$backupFile"
# Copy to S3 (primary cloud)
aws s3 cp "C:\backups\local\$backupFile" "s3://company-backups/postgres/$backupFile"
# Copy to secondary region (geographic redundancy)
aws s3 cp "C:\backups\local\$backupFile" "s3://company-backups-dr/postgres/$backupFile" --region us-west-2
# Copy to network storage (NAS)
Copy-Item "C:\backups\local\$backupFile" "\\nas\backups\postgres\"
저장 계층
- 로컬 스토리지 – 일반 복구 시나리오에 가장 빠른 복구 시간을 제공합니다.
- 주 클라우드 – 로컬 재해에 대비한 오프사이트 보호를 제공합니다.
- 보조 지역 – 진정한 재해 복구를 위한 지리적 중복성을 제공합니다.
다중 목적지 접근 방식은 복잡성과 저장 비용을 증가시키지만, 상관된 장애에 대한 보호는 손실을 감당할 수 없는 데이터에 대한 투자를 정당화합니다.
Source:
6. 선택적 테이블 백업 전략
모든 테이블이 동일한 백업 우선순위를 가져야 하는 것은 아닙니다. 선택적 백업 전략은 중요한 비즈니스 데이터를 더 자주 백업하고, 로그 테이블, 캐시, 임시 데이터는 덜 긴급하게 처리하도록 우선순위를 매깁니다. 이를 통해 백업 시간과 저장 비용을 줄이고, 실제로 중요한 데이터의 복구 속도를 높일 수 있습니다.
# 중요 테이블 – 매시간 백업
pg_dump -F c -d production_db \
-t users -t orders -t payments -t subscriptions \
-f critical_hourly.dump
# 일반 테이블 – 매일 백업
pg_dump -F c -d production_db \
-T logs -T sessions -T cache -T analytics_events \
-f standard_daily.dump
# 전체 백업에서 크고 재생성 가능한 테이블 제외
pg_dump -F c -d production_db \
-T 'public.*_log' -T 'public.*_cache' -T audit_trail \
-f production_backup.dump
- 대체 불가능한 비즈니스 데이터가 포함된 테이블을 식별합니다(예: users, transactions, orders).
- 재생성 가능한 테이블을 분류합니다(캐시, 계산된 집계, 검색 인덱스 등).
- 데이터 중요도에 맞춰 백업 빈도를 조정한 단계별 백업 일정을 작성합니다.
이 전략은 데이터 모델에 대한 사전 분석이 필요하지만, 백업 속도가 빨라지고 복구 절차가 더 집중화되어 큰 이점을 제공합니다. 재해가 발생했을 때, 몇 분 안에 중요한 테이블을 복구하는 것이 전체 데이터베이스를 몇 시간 동안 복구하는 것보다 훨씬 효율적입니다.
7. 암호화된 백업 전략
프로덕션 백업에는 고객 정보, 재무 기록, 인증 자격 증명 등 민감한 데이터가 포함됩니다. 암호화된 백업 전략은 백업 파일이 유출되더라도 이 데이터가 보호되도록 보장합니다. 암호화는 백업이 서버를 떠나기 이전에 수행되어야 하며, 저장 중에 나중에 적용하는 것이 아니라는 점을 기억하세요.
# Backup with OpenSSL encryption (AES‑256)
pg_dump -F c -d production_db | \
openssl enc -aes-256-cbc -salt -pbkdf2 -out backup_encrypted.dump.enc
# Decrypt and restore
openssl enc -d -aes-256-cbc -pbkdf2 -in backup_encrypted.dump.enc | \
pg_restore -d restored_db
# Using GPG for key‑based encryption
pg_dump -F c -d production_db | \
gpg --encrypt --recipient backup@company.com -o backup.dump.gpg
암호화 키는 백업 파일과 별도로 저장해야 합니다 — 가능한 한 비밀 관리 서비스나 하드웨어 보안 모듈에 보관하는 것이 좋습니다. 백업과 같은 위치에 키를 저장한 채로 암호화하면 실제 보안 효과가 거의 없습니다. 키 관리 절차를 문서화하고 정기적으로 복호화를 테스트하여 실제 비상 상황에서 키 문제를 발견하는 일을 방지하세요.
A Simpler Path: Postgresus
이 일곱 가지 전략을 수동으로 구현하려면 상당한 스크립팅, 스케줄링 및 모니터링 인프라가 필요합니다. **Postgresus**는 **PostgreSQL backup**을 위한 가장 인기 있는 도구로, 몇 분만에 설정할 수 있는 웹 인터페이스를 통해 이 모든 전략을 제공합니다. 제공하는 기능은 다음과 같습니다:
- 스케줄링 및 회전
- 다중 목적지 스토리지 (S3, Google Drive, Dropbox, NAS)
- AES‑256‑GCM 암호화
- 즉시 알림
복잡한 스크립트를 관리하지 않고도 프로덕션 수준의 백업을 원하는 개인 및 기업 팀 모두에게 적합합니다.
전략 조합 선택
대부분의 운영 환경에서는 하나의 전략에만 의존하기보다 여러 전략을 결합하는 것이 더 유리합니다. 적절한 조합은 데이터베이스 규모, 복구 시간 목표(RTO), 그리고 규정 준수 요구 사항에 따라 달라집니다.
| 대상 | 추천 핵심 전략 |
|---|---|
| 스타트업 및 소규모 팀 | 정기적인 전체 백업 + 배포 전 백업 + 다중 목적지 저장 |
| 성장 중인 기업 | 선택적 테이블 백업 + 암호화 + 스키마/데이터 분리 추가 |
| 엔터프라이즈 환경 | 모든 전략에 병렬 덤프, 지리적 중복, 포괄적인 보존 정책 포함 |
정기적인 전체 백업을 기반으로 시작하고, 필요에 따라 추가 전략을 단계적으로 적용하십시오. 각 전략은 특정 장애 유형을 다루며, 함께 사용하면 실수로 인한 삭제부터 데이터센터 재해까지 모든 상황에 대비할 수 있는 방어‑인‑깊이(Defense‑in‑Depth)를 구현합니다.
결론
Production‑grade PostgreSQL 백업은 가끔씩 pg_dump 명령을 실행하는 것만으로는 충분하지 않습니다. 여기서 다룬 일곱 가지 전략 — 정기적인 전체 백업, 배포 전 안전 백업, 병렬 덤프, 스키마/데이터 분리, 다중 목적지 저장, 선택적 테이블 백업, 그리고 암호화 — 은 일상적인 보호부터 재해 복구에 이르는 백업 요구 사항 전체를 포괄합니다. 일곱 가지를 모두 즉시 구현할 필요는 없지만, 신중하게 조합하면 현대 애플리케이션이 요구하는 복원력을 확보할 수 있습니다.
…하지만 어떤 전략이 상황에 적용되는지, 언제 추가할지를 명확히 계획해야 합니다.
적절한 백업 전략을 구현하는 비용은 시간으로 측정되지만, 프로덕션 데이터를 잃는 비용은 경력, 고객, 그리고 때로는 회사를 단위로 측정됩니다.