## 왜 백업 전략이 중요한가
데이터베이스 장애는 예고 없이 찾아옵니다. 하드웨어 고장, 실수로 인한 데이터 삭제, 랜섬웨어 공격 등 다양한 위협 속에서 안정적인 백업 시스템은 서비스 연속성의 마지막 보루입니다. 특히 PostgreSQL과 Redis를 함께 운영하는 환경에서는 각 데이터베이스의 특성에 맞는 백업 전략이 필수적입니다.
## 3-2-1 백업 원칙의 실전 적용
### 기본 원칙
업계 표준인 **3-2-1 원칙**은 다음과 같습니다:
- **3개의 복사본**: 원본 데이터 + 백업 2개
- **2가지 저장 매체**: 로컬 디스크, 네트워크 스토리지 등
- **1개의 오프사이트**: 물리적으로 분리된 위치
이 원칙을 실제 시스템에 적용하면 다음과 같은 구조가 됩니다:
```bash
[주 서버] → [백업 서버] → [원격 서버/클라우드]
```
### 계층별 백업 전략
#### 1. 시간별 백업 (중요 데이터)
트랜잭션이 많은 프로덕션 환경에서는 **1시간 단위 백업**이 효과적입니다.
```bash
#!/bin/bash
# 시간별 PostgreSQL 백업 예시
DATE=$(date +%Y%m%d_%H%M)
BACKUP_DIR="/var/backups/hourly"
pg_dump -U postgres -Fc database_name > "${BACKUP_DIR}/db_${DATE}.dump"
# 7일 이상 된 파일 자동 삭제
find ${BACKUP_DIR} -name "*.dump" -mtime +7 -delete
```
**보관 기간**: 7일 (168시간)
**장점**: RPO(복구 시점 목표) 1시간 이내 달성
#### 2. 일일 전체 백업
매일 새벽 2시에 전체 데이터베이스를 백업합니다.
```bash
# cron 설정 예시
0 2 * * * /usr/local/bin/backup_daily.sh
```
**보관 기간**: 30일
**용도**: 월간 데이터 추세 분석, 대규모 장애 복구
#### 3. Redis 스냅샷 백업
Redis는 인메모리 특성상 별도 백업이 필요합니다.
```bash
# Redis BGSAVE를 활용한 백업
redis-cli BGSAVE
cp /var/lib/redis/dump.rdb /backups/redis/dump_$(date +%Y%m%d).rdb
```
**스케줄**: 새벽 3시 (DB 백업과 시간 분산)
**보관 기간**: 30일
### 교차 서버 동기화
단일 서버 장애에 대비해 **2시간마다 rsync로 백업 서버에 복제**합니다.
```bash
#!/bin/bash
# 백업 서버로 동기화
rsync -avz --delete \
/var/backups/ \
backup-server:/remote/backups/
```
**주의사항**:
- `--delete` 옵션 사용 시 원본 삭제가 백업에도 반영됨
- 랜섬웨어 대비를 위해 불변(immutable) 백업 고려
## Docker 환경 백업
VM 기반 컨테이너 환경에서는 **볼륨 백업**이 핵심입니다.
```bash
# Docker 볼륨 백업
docker run --rm \
-v volume_name:/data \
-v /backups:/backup \
alpine tar czf /backup/volume_backup.tar.gz -C /data .
```
**스케줄**: 새벽 4시
**보관 기간**: 14일
## 백업 검증의 중요성
> "테스트하지 않은 백업은 백업이 아니다"
월 1회 백업 복구 테스트를 권장합니다:
```bash
# PostgreSQL 복구 테스트
pg_restore -U postgres -d test_db backup_file.dump
```
## 모니터링 체크리스트
- [ ] 백업 스크립트 실행 성공 여부
- [ ] 백업 파일 크기 급변 감지
- [ ] 디스크 용량 80% 이상 시 알림
- [ ] 교차 서버 동기화 지연 모니터링
## 결론
효과적인 백업 시스템은 다음 세 가지 요소로 완성됩니다:
1. **자동화**: cron과 스크립트로 사람 개입 최소화
2. **다층화**: 시간별/일별/원격 백업으로 복구 옵션 확보
3. **검증**: 정기적인 복구 테스트로 실효성 확인
### 다음 단계
- 백업 암호화 적용 (GPG, LUKS)
- 클라우드 스토리지 통합 (S3, GCS)
- 증분 백업(Incremental Backup) 도입으로 저장 공간 최적화
안정적인 백업 시스템은 단순히 '만약을 위한 보험'이 아니라, 서비스 신뢰성의 핵심 인프라입니다.