클라우드 데이터베이스를 로컬 하드디스크에 주기적으로 자동 백업하는 엔터프라이즈급 백업 솔루션입니다. 다중 데이터베이스 환경에서의 통합 백업 관리와 웹 기반 관리 인터페이스를 제공합니다.
- 클라우드 데이터베이스의 안전한 로컬 백업
- 데이터 손실 위험 최소화 및 재해 복구 대비
- 백업 과정의 완전 자동화를 통한 운영 효율성 향상
- 다중 데이터베이스 환경에서의 통합 백업 관리
- 🗄️ 다중 데이터베이스 지원: PostgreSQL, MySQL, SQLite 동시 관리
- ⏰ 스케줄링된 자동 백업: 우선순위 기반 스케줄링
- 📈 증분 백업 및 전체 백업: WAL 기반 PITR 지원
- 🔒 백업 파일 압축 및 암호화: AES-256 암호화
- 🌐 웹 기반 관리 인터페이스: 직관적인 대시보드
- 📊 실시간 모니터링 및 알림: 계층적 알림 시스템
- 📅 백업 파일 보존 정책: 환경별 차등 정책
- 📝 로그 및 에러 추적: 상세한 감사 로그
- 백업 도구: pg_dump
- 지원 버전: 9.6+
- 백업 형식: Custom, Plain, Directory, Tar
- 특징: WAL 기반 증분 백업, PITR 지원
- 백업 도구: mysqldump
- 지원 버전: 5.7+, 8.0+
- 백업 형식: SQL 덤프
- 특징: 단일 트랜잭션 일관성, 저장 프로시저/트리거 포함
- 백업 도구: sqlite3 backup API, 파일 복사
- 지원 버전: 3.7+
- 백업 형식: 데이터베이스 파일, SQL 덤프
- 특징: WAL 체크포인트, 무결성 검사
- Python 3.8+: 메인 개발 언어
- FastAPI 0.104+: REST API 서버
- PostgreSQL 13+: 메타데이터 저장
- APScheduler 3.10+: 백업 작업 스케줄링
- SQLAlchemy 2.0+: ORM
- Alembic: 데이터베이스 마이그레이션
- Bootstrap 5: 반응형 웹 인터페이스
- Chart.js: 백업 통계 시각화
- FullCalendar: 백업 스케줄 관리
- SweetAlert2: 사용자 알림
- Cryptography: AES-256 암호화
- PostgreSQL 도구: pg_dump, pg_restore, pg_basebackup
- 압축: gzip, lz4, zstd
- 알림: SMTP, Slack API, Discord Webhook
LocalBackUpManager/
├── app/ # 애플리케이션 코드
│ ├── api/ # API 라우터
│ │ ├── databases.py # 데이터베이스 관리 API
│ │ ├── backups.py # 백업 관리 API
│ │ ├── schedules.py # 스케줄 관리 API
│ │ └── monitoring.py # 모니터링 API
│ ├── core/ # 핵심 비즈니스 로직
│ │ ├── backup_engine.py # 백업 엔진
│ │ ├── database_manager.py # DB 매니저
│ │ ├── scheduler.py # 스케줄러
│ │ ├── encryption.py # 암호화
│ │ ├── compression.py # 압축
│ │ └── notification.py # 알림
│ ├── models/ # SQLAlchemy 모델
│ ├── schemas/ # Pydantic 스키마
│ └── utils/ # 유틸리티 함수
├── web/ # 웹 인터페이스
│ ├── static/ # 정적 파일 (CSS, JS, 이미지)
│ └── templates/ # HTML 템플릿
├── data/ # 데이터 저장소
│ ├── backups/ # 백업 파일
│ ├── logs/ # 로그 파일
│ └── postgresql_metadata/ # 메타데이터 DB
├── config/ # 설정 파일
│ ├── settings.yaml # 애플리케이션 설정
│ └── databases.yaml # 데이터베이스 설정
├── docs/ # 문서
│ ├── Proposal-Project.md # 프로젝트 기획서
│ ├── Development-Guidelines.md # 개발 지침서
│ ├── PostgreSQL-Schema.md # DB 스키마 설계
│ └── GitHub-Issues-Guidelines.md # 이슈 관리 가이드
├── tests/ # 테스트 코드
├── requirements.txt # Python 의존성
├── docker-compose.yml # Docker 구성
├── Dockerfile # Docker 이미지
└── README.md # 프로젝트 설명서
최소 요구사항:
- OS: Linux/Windows/macOS
- Python: 3.8+
- RAM: 2GB
- Storage: 10GB (시스템) + 백업 용량
- Network: 안정적인 인터넷 연결
권장 요구사항:
- OS: Ubuntu 20.04 LTS / CentOS 8
- Python: 3.11+
- RAM: 8GB
- Storage: SSD 50GB + 백업 전용 스토리지
- Network: 1Gbps 이상
git clone https://github.com/your-org/LocalBackUpManager.git
cd LocalBackUpManager
python -m venv venv
source venv/bin/activate # Linux/Mac
# venv\Scripts\activate # Windows
pip install -r requirements.txt
cp config/settings.yaml.example config/settings.yaml
cp config/databases.yaml.example config/databases.yaml
cp .env.example .env
# .env 파일 편집
METADATA_DB_PASSWORD=your_secure_password
ENCRYPTION_KEY=your_32_character_encryption_key
SMTP_USERNAME=your_email@company.com
SMTP_PASSWORD=your_app_password
# PostgreSQL 메타데이터 DB 생성
createdb backup_metadata
# 마이그레이션 실행
alembic upgrade head
python -m app.main validate-config
python -m app.main
웹 인터페이스: http://localhost:8000
# Docker Compose로 실행
docker-compose up -d
# 개별 컨테이너 빌드
docker build -t backup-manager .
docker run -p 8000:8000 backup-manager
- 웹 인터페이스에서 "데이터베이스 관리" 페이지로 이동
- "새 데이터베이스 추가" 버튼 클릭
- 연결 정보 입력 (호스트, 포트, 사용자명, 비밀번호)
- 환경 및 우선순위 설정
- 연결 테스트 후 저장
- "스케줄 관리" 페이지에서 백업 일정 설정
- 전체 백업 및 증분 백업 스케줄 구성
- 압축 및 암호화 옵션 선택
- 보존 정책 설정
- "백업 관리" 페이지에서 대상 데이터베이스 선택
- "백업 실행" 버튼 클릭
- 백업 유형 선택 (전체/증분/스키마/데이터)
- 실행 및 진행 상황 모니터링
- 대시보드에서 실시간 백업 상태 확인
- 백업 성공률 및 성능 메트릭 모니터링
- 알림 설정으로 이메일/Slack/Discord 알림 구성
databases:
production_db:
name: "운영 데이터베이스"
host: "prod-db.company.com"
port: 5432
database: "production"
username: "backup_user"
password: "${PROD_DB_PASSWORD}"
environment: "production"
priority: "high"
backup_config:
full_backup_schedule: "0 2 * * 0" # 매주 일요일 2시
incremental_schedule: "0 */6 * * *" # 6시간마다
compression: "lz4"
encryption: true
retention_policy:
daily: 7
weekly: 4
monthly: 12
notifications:
email:
enabled: true
smtp_server: "smtp.gmail.com"
smtp_port: 587
use_tls: true
slack:
enabled: true
webhook_url: "${SLACK_WEBHOOK_URL}"
discord:
enabled: false
webhook_url: "${DISCORD_WEBHOOK_URL}"
서버 실행 후 다음 URL에서 자동 생성된 API 문서를 확인할 수 있습니다:
- Swagger UI: http://localhost:8000/docs
- ReDoc: http://localhost:8000/redoc
GET /api/databases # 모든 데이터베이스 목록 조회
POST /api/databases # 새 데이터베이스 추가
GET /api/backups # 모든 백업 목록 조회
POST /api/backups/database/{db_id} # 특정 DB 백업 실행
GET /api/schedules # 모든 스케줄 조회
POST /api/schedules/database/{db_id} # 새 스케줄 생성
GET /api/monitoring/status # 시스템 상태 조회
# 단위 테스트 실행
pytest tests/unit/
# 통합 테스트 실행
pytest tests/integration/
# 커버리지 리포트
pytest --cov=app tests/
# 특정 테스트 실행
pytest tests/test_backup_engine.py -v
- 백업 성공률
- 백업 소요 시간
- 백업 파일 크기
- 디스크 사용량
- 데이터베이스 연결 상태
- CRITICAL: 운영 DB 백업 실패, 시스템 오류
- WARNING: 디스크 공간 부족, 성능 저하
- INFO: 백업 완료, 정기 리포트
- 백업 파일 AES-256 암호화
- 데이터베이스 연결 정보 암호화 저장
- SSL/TLS 연결 사용
- 백업 디렉토리 권한 제한 (700)
- 설정 파일 권한 제한 (600)
- 환경변수를 통한 민감 정보 관리
# 프로덕션 환경 배포
docker-compose -f docker-compose.prod.yml up -d
# 스케일링
docker-compose up --scale backup-manager=3
# systemd 서비스 등록 (Linux)
sudo cp scripts/backup-manager.service /etc/systemd/system/
sudo systemctl enable backup-manager
sudo systemctl start backup-manager
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature
) - Commit your Changes (
git commit -m 'Add some AmazingFeature'
) - Push to the Branch (
git push origin feature/AmazingFeature
) - Open a Pull Request
자세한 기여 가이드라인은 개발 지침서를 참고하세요.
이 프로젝트는 MIT 라이선스 하에 배포됩니다. 자세한 내용은 LICENSE 파일을 참고하세요.
- 이슈 리포트: GitHub Issues
- 문서: 프로젝트 문서
- 1.1 프로젝트 구조 설정 및 개발 환경 구축
- 1.2 FastAPI 기반 REST API 서버 구현
- 1.3 PostgreSQL 메타데이터 데이터베이스 설계 및 구현
- 1.4 기본 백업 엔진 구현 (pg_dump 기반)
- 2.1 DatabaseManager 구현
- 2.2 설정 파일 시스템
- 3.1 대시보드 페이지
- 3.2 데이터베이스 관리 페이지
- 4.1 증분 백업 구현
- 4.2 성능 최적화
- 5.1 알림 시스템 구현
- 5.2 모니터링 대시보드
- 6.1 보안 강화
- 6.2 감사 시스템
- 7.1 테스트 시스템
- 7.2 배포 시스템
- 8.1 메타모델 확장 및 마이그레이션 (db_type 추가)
- 8.2 DatabaseManager 어댑터화 (연결/풀/테스트)
- 8.3 BackupEngine 백업 전략 어댑터
- 8.4 설정·문서·배포 업데이트
- 8.5 통합 및 안정화 테스트
- 9.1 Tailwind CSS 도입 및 점진 전환