https://github.com/hobby2025/localbackupmanager
클라우드 DB를 로컬하드에 저장하기
https://github.com/hobby2025/localbackupmanager
fastapi postgresql python3
Last synced: 9 months ago
JSON representation
클라우드 DB를 로컬하드에 저장하기
- Host: GitHub
- URL: https://github.com/hobby2025/localbackupmanager
- Owner: Hobby2025
- License: mit
- Created: 2025-09-11T00:29:29.000Z (10 months ago)
- Default Branch: dev
- Last Pushed: 2025-09-18T05:35:40.000Z (9 months ago)
- Last Synced: 2025-09-18T06:15:32.369Z (9 months ago)
- Topics: fastapi, postgresql, python3
- Language: Python
- Homepage:
- Size: 382 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# 클라우드 데이터베이스 자동 백업 시스템
[](https://python.org)
[](https://fastapi.tiangolo.com)
[](https://postgresql.org)
[](LICENSE)
[](https://deepwiki.com/Hobby2025/LocalBackUpManager)
## 개요
클라우드 데이터베이스를 로컬 하드디스크에 주기적으로 자동 백업하는 엔터프라이즈급 백업 솔루션입니다.
다중 데이터베이스 환경에서의 통합 백업 관리와 웹 기반 관리 인터페이스를 제공합니다.
### 주요 목적
- 클라우드 데이터베이스의 안전한 로컬 백업
- 데이터 손실 위험 최소화 및 재해 복구 대비
- 백업 과정의 완전 자동화를 통한 운영 효율성 향상
- 다중 데이터베이스 환경에서의 통합 백업 관리
## 핵심 기능
- 🗄️ **다중 데이터베이스 지원**: PostgreSQL, MySQL, SQLite 동시 관리
- ⏰ **스케줄링된 자동 백업**: 우선순위 기반 스케줄링
- 📈 **증분 백업 및 전체 백업**: WAL 기반 PITR 지원
- 🔒 **백업 파일 압축 및 암호화**: AES-256 암호화
- 🌐 **웹 기반 관리 인터페이스**: 직관적인 대시보드
- 📊 **실시간 모니터링 및 알림**: 계층적 알림 시스템
- 📅 **백업 파일 보존 정책**: 환경별 차등 정책
- 📝 **로그 및 에러 추적**: 상세한 감사 로그
## 지원 데이터베이스
### PostgreSQL
- **백업 도구**: pg_dump
- **지원 버전**: 9.6+
- **백업 형식**: Custom, Plain, Directory, Tar
- **특징**: WAL 기반 증분 백업, PITR 지원
### MySQL
- **백업 도구**: mysqldump
- **지원 버전**: 5.7+, 8.0+
- **백업 형식**: SQL 덤프
- **특징**: 단일 트랜잭션 일관성, 저장 프로시저/트리거 포함
### SQLite
- **백업 도구**: 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 이상
### 설치 방법
#### 1. 저장소 클론
```bash
git clone https://github.com/your-org/LocalBackUpManager.git
cd LocalBackUpManager
```
#### 2. 가상환경 생성 및 활성화
```bash
python -m venv venv
source venv/bin/activate # Linux/Mac
# venv\Scripts\activate # Windows
```
#### 3. 의존성 설치
```bash
pip install -r requirements.txt
```
#### 4. 환경 설정
```bash
cp config/settings.yaml.example config/settings.yaml
cp config/databases.yaml.example config/databases.yaml
cp .env.example .env
```
#### 5. 환경변수 설정
```bash
# .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
```
#### 6. 메타데이터 데이터베이스 초기화
```bash
# PostgreSQL 메타데이터 DB 생성
createdb backup_metadata
# 마이그레이션 실행
alembic upgrade head
```
#### 7. 설정 검증
```bash
python -m app.main validate-config
```
#### 8. 서비스 시작
```bash
python -m app.main
```
웹 인터페이스: http://localhost:8000
### Docker로 실행
```bash
# Docker Compose로 실행
docker-compose up -d
# 개별 컨테이너 빌드
docker build -t backup-manager .
docker run -p 8000:8000 backup-manager
```
## 📖 사용법
### 1. 데이터베이스 추가
1. 웹 인터페이스에서 "데이터베이스 관리" 페이지로 이동
2. "새 데이터베이스 추가" 버튼 클릭
3. 연결 정보 입력 (호스트, 포트, 사용자명, 비밀번호)
4. 환경 및 우선순위 설정
5. 연결 테스트 후 저장
### 2. 백업 스케줄 설정
1. "스케줄 관리" 페이지에서 백업 일정 설정
2. 전체 백업 및 증분 백업 스케줄 구성
3. 압축 및 암호화 옵션 선택
4. 보존 정책 설정
### 3. 수동 백업 실행
1. "백업 관리" 페이지에서 대상 데이터베이스 선택
2. "백업 실행" 버튼 클릭
3. 백업 유형 선택 (전체/증분/스키마/데이터)
4. 실행 및 진행 상황 모니터링
### 4. 모니터링 및 알림
1. 대시보드에서 실시간 백업 상태 확인
2. 백업 성공률 및 성능 메트릭 모니터링
3. 알림 설정으로 이메일/Slack/Discord 알림 구성
## 🔧 설정
### 데이터베이스 설정 (config/databases.yaml)
```yaml
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
```
### 알림 설정 (config/settings.yaml)
```yaml
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}"
```
## API 문서
서버 실행 후 다음 URL에서 자동 생성된 API 문서를 확인할 수 있습니다:
- **Swagger UI**: http://localhost:8000/docs
- **ReDoc**: http://localhost:8000/redoc
### 주요 API 엔드포인트
```
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 # 시스템 상태 조회
```
## 테스트
```bash
# 단위 테스트 실행
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 배포
```bash
# 프로덕션 환경 배포
docker-compose -f docker-compose.prod.yml up -d
# 스케일링
docker-compose up --scale backup-manager=3
```
### 시스템 서비스 등록
```bash
# systemd 서비스 등록 (Linux)
sudo cp scripts/backup-manager.service /etc/systemd/system/
sudo systemctl enable backup-manager
sudo systemctl start backup-manager
```
## 문서
- [프로젝트 기획서](docs/Proposal-Project.md)
- [개발 지침서](docs/Development-Guidelines.md)
- [PostgreSQL 스키마 설계](docs/PostgreSQL-Schema.md)
- [GitHub 이슈 관리 가이드](docs/Issues-Guidelines.md)
## 기여하기
1. Fork the Project
2. Create your Feature Branch (`git checkout -b feature/AmazingFeature`)
3. Commit your Changes (`git commit -m 'Add some AmazingFeature'`)
4. Push to the Branch (`git push origin feature/AmazingFeature`)
5. Open a Pull Request
자세한 기여 가이드라인은 [개발 지침서](docs/Development-Guidelines.md)를 참고하세요.
## 라이선스
이 프로젝트는 MIT 라이선스 하에 배포됩니다. 자세한 내용은 [LICENSE](LICENSE) 파일을 참고하세요.
## 지원
- 이슈 리포트: [GitHub Issues](https://github.com/your-org/LocalBackUpManager/issues)
- 문서: [프로젝트 문서](docs/)
## 로드맵
### Phase 1: 핵심 인프라 구축
- 1.1 프로젝트 구조 설정 및 개발 환경 구축
- 1.2 FastAPI 기반 REST API 서버 구현
- 1.3 PostgreSQL 메타데이터 데이터베이스 설계 및 구현
- 1.4 기본 백업 엔진 구현 (pg_dump 기반)
### Phase 2: 다중 데이터베이스 지원
- 2.1 DatabaseManager 구현
- 2.2 설정 파일 시스템
### Phase 3: 웹 인터페이스 개발
- 3.1 대시보드 페이지
- 3.2 데이터베이스 관리 페이지
### Phase 4: 고급 기능 및 최적화
- 4.1 증분 백업 구현
- 4.2 성능 최적화
### Phase 5: 알림 및 모니터링 시스템
- 5.1 알림 시스템 구현
- 5.2 모니터링 대시보드
### Phase 6: 보안 및 컴플라이언스
- 6.1 보안 강화
- 6.2 감사 시스템
### Phase 7: 테스트 및 배포 준비
- 7.1 테스트 시스템
- 7.2 배포 시스템
### Phase 8: DB Type 확장 및 안정화
- 8.1 메타모델 확장 및 마이그레이션 (db_type 추가)
- 8.2 DatabaseManager 어댑터화 (연결/풀/테스트)
- 8.3 BackupEngine 백업 전략 어댑터
- 8.4 설정·문서·배포 업데이트
- 8.5 통합 및 안정화 테스트
### Phase 9: 웹 UI / UX 개선
- 9.1 Tailwind CSS 도입 및 점진 전환