{"id":31179520,"url":"https://github.com/hobby2025/localbackupmanager","last_synced_at":"2025-09-19T15:52:58.940Z","repository":{"id":314189663,"uuid":"1054511039","full_name":"Hobby2025/LocalBackUpManager","owner":"Hobby2025","description":"클라우드 DB를 로컬하드에 저장하기","archived":false,"fork":false,"pushed_at":"2025-09-18T05:35:40.000Z","size":391,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"dev","last_synced_at":"2025-09-18T06:15:32.369Z","etag":null,"topics":["fastapi","postgresql","python3"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Hobby2025.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-11T00:29:29.000Z","updated_at":"2025-09-18T05:21:29.000Z","dependencies_parsed_at":"2025-09-18T06:09:56.764Z","dependency_job_id":null,"html_url":"https://github.com/Hobby2025/LocalBackUpManager","commit_stats":null,"previous_names":["hobby2025/localbackupmanager"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Hobby2025/LocalBackUpManager","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hobby2025%2FLocalBackUpManager","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hobby2025%2FLocalBackUpManager/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hobby2025%2FLocalBackUpManager/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hobby2025%2FLocalBackUpManager/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Hobby2025","download_url":"https://codeload.github.com/Hobby2025/LocalBackUpManager/tar.gz/refs/heads/dev","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hobby2025%2FLocalBackUpManager/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":275964882,"owners_count":25561103,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-19T02:00:09.700Z","response_time":108,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["fastapi","postgresql","python3"],"created_at":"2025-09-19T15:52:57.104Z","updated_at":"2025-09-19T15:52:58.926Z","avatar_url":"https://github.com/Hobby2025.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 클라우드 데이터베이스 자동 백업 시스템\n\n[![Python](https://img.shields.io/badge/Python-3.8+-blue.svg)](https://python.org)\n[![FastAPI](https://img.shields.io/badge/FastAPI-0.104+-green.svg)](https://fastapi.tiangolo.com)\n[![PostgreSQL](https://img.shields.io/badge/PostgreSQL-13+-blue.svg)](https://postgresql.org)\n[![License](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)\n[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/Hobby2025/LocalBackUpManager)\n\n## 개요\n\n클라우드 데이터베이스를 로컬 하드디스크에 주기적으로 자동 백업하는 엔터프라이즈급 백업 솔루션입니다.\n다중 데이터베이스 환경에서의 통합 백업 관리와 웹 기반 관리 인터페이스를 제공합니다.\n\n### 주요 목적\n\n- 클라우드 데이터베이스의 안전한 로컬 백업\n- 데이터 손실 위험 최소화 및 재해 복구 대비\n- 백업 과정의 완전 자동화를 통한 운영 효율성 향상\n- 다중 데이터베이스 환경에서의 통합 백업 관리\n\n## 핵심 기능\n\n- 🗄️ **다중 데이터베이스 지원**: PostgreSQL, MySQL, SQLite 동시 관리\n- ⏰ **스케줄링된 자동 백업**: 우선순위 기반 스케줄링\n- 📈 **증분 백업 및 전체 백업**: WAL 기반 PITR 지원\n- 🔒 **백업 파일 압축 및 암호화**: AES-256 암호화\n- 🌐 **웹 기반 관리 인터페이스**: 직관적인 대시보드\n- 📊 **실시간 모니터링 및 알림**: 계층적 알림 시스템\n- 📅 **백업 파일 보존 정책**: 환경별 차등 정책\n- 📝 **로그 및 에러 추적**: 상세한 감사 로그\n\n## 지원 데이터베이스\n\n### PostgreSQL\n- **백업 도구**: pg_dump\n- **지원 버전**: 9.6+\n- **백업 형식**: Custom, Plain, Directory, Tar\n- **특징**: WAL 기반 증분 백업, PITR 지원\n\n### MySQL\n- **백업 도구**: mysqldump\n- **지원 버전**: 5.7+, 8.0+\n- **백업 형식**: SQL 덤프\n- **특징**: 단일 트랜잭션 일관성, 저장 프로시저/트리거 포함\n\n### SQLite\n- **백업 도구**: sqlite3 backup API, 파일 복사\n- **지원 버전**: 3.7+\n- **백업 형식**: 데이터베이스 파일, SQL 덤프\n- **특징**: WAL 체크포인트, 무결성 검사\n\n## 기술 스택\n\n### 백엔드\n\n- **Python 3.8+**: 메인 개발 언어\n- **FastAPI 0.104+**: REST API 서버\n- **PostgreSQL 13+**: 메타데이터 저장\n- **APScheduler 3.10+**: 백업 작업 스케줄링\n- **SQLAlchemy 2.0+**: ORM\n- **Alembic**: 데이터베이스 마이그레이션\n\n### 프론트엔드\n\n- **Bootstrap 5**: 반응형 웹 인터페이스\n- **Chart.js**: 백업 통계 시각화\n- **FullCalendar**: 백업 스케줄 관리\n- **SweetAlert2**: 사용자 알림\n\n### 보안 \u0026 도구\n\n- **Cryptography**: AES-256 암호화\n- **PostgreSQL 도구**: pg_dump, pg_restore, pg_basebackup\n- **압축**: gzip, lz4, zstd\n- **알림**: SMTP, Slack API, Discord Webhook\n\n## 프로젝트 구조\n\n```\nLocalBackUpManager/\n├── app/                    # 애플리케이션 코드\n│   ├── api/               # API 라우터\n│   │   ├── databases.py   # 데이터베이스 관리 API\n│   │   ├── backups.py     # 백업 관리 API\n│   │   ├── schedules.py   # 스케줄 관리 API\n│   │   └── monitoring.py  # 모니터링 API\n│   ├── core/              # 핵심 비즈니스 로직\n│   │   ├── backup_engine.py    # 백업 엔진\n│   │   ├── database_manager.py # DB 매니저\n│   │   ├── scheduler.py        # 스케줄러\n│   │   ├── encryption.py       # 암호화\n│   │   ├── compression.py      # 압축\n│   │   └── notification.py     # 알림\n│   ├── models/            # SQLAlchemy 모델\n│   ├── schemas/           # Pydantic 스키마\n│   └── utils/             # 유틸리티 함수\n├── web/                   # 웹 인터페이스\n│   ├── static/           # 정적 파일 (CSS, JS, 이미지)\n│   └── templates/        # HTML 템플릿\n├── data/                  # 데이터 저장소\n│   ├── backups/          # 백업 파일\n│   ├── logs/             # 로그 파일\n│   └── postgresql_metadata/ # 메타데이터 DB\n├── config/                # 설정 파일\n│   ├── settings.yaml     # 애플리케이션 설정\n│   └── databases.yaml    # 데이터베이스 설정\n├── docs/                  # 문서\n│   ├── Proposal-Project.md      # 프로젝트 기획서\n│   ├── Development-Guidelines.md # 개발 지침서\n│   ├── PostgreSQL-Schema.md     # DB 스키마 설계\n│   └── GitHub-Issues-Guidelines.md # 이슈 관리 가이드\n├── tests/                 # 테스트 코드\n├── requirements.txt       # Python 의존성\n├── docker-compose.yml     # Docker 구성\n├── Dockerfile            # Docker 이미지\n└── README.md             # 프로젝트 설명서\n```\n\n## 빠른 시작\n\n### 시스템 요구사항\n\n**최소 요구사항:**\n\n- OS: Linux/Windows/macOS\n- Python: 3.8+\n- RAM: 2GB\n- Storage: 10GB (시스템) + 백업 용량\n- Network: 안정적인 인터넷 연결\n\n**권장 요구사항:**\n\n- OS: Ubuntu 20.04 LTS / CentOS 8\n- Python: 3.11+\n- RAM: 8GB\n- Storage: SSD 50GB + 백업 전용 스토리지\n- Network: 1Gbps 이상\n\n### 설치 방법\n\n#### 1. 저장소 클론\n\n```bash\ngit clone https://github.com/your-org/LocalBackUpManager.git\ncd LocalBackUpManager\n```\n\n#### 2. 가상환경 생성 및 활성화\n\n```bash\npython -m venv venv\nsource venv/bin/activate  # Linux/Mac\n# venv\\Scripts\\activate   # Windows\n```\n\n#### 3. 의존성 설치\n\n```bash\npip install -r requirements.txt\n```\n\n#### 4. 환경 설정\n\n```bash\ncp config/settings.yaml.example config/settings.yaml\ncp config/databases.yaml.example config/databases.yaml\ncp .env.example .env\n```\n\n#### 5. 환경변수 설정\n\n```bash\n# .env 파일 편집\nMETADATA_DB_PASSWORD=your_secure_password\nENCRYPTION_KEY=your_32_character_encryption_key\nSMTP_USERNAME=your_email@company.com\nSMTP_PASSWORD=your_app_password\n```\n\n#### 6. 메타데이터 데이터베이스 초기화\n\n```bash\n# PostgreSQL 메타데이터 DB 생성\ncreatedb backup_metadata\n\n# 마이그레이션 실행\nalembic upgrade head\n```\n\n#### 7. 설정 검증\n\n```bash\npython -m app.main validate-config\n```\n\n#### 8. 서비스 시작\n\n```bash\npython -m app.main\n```\n\n웹 인터페이스: http://localhost:8000\n\n### Docker로 실행\n\n```bash\n# Docker Compose로 실행\ndocker-compose up -d\n\n# 개별 컨테이너 빌드\ndocker build -t backup-manager .\ndocker run -p 8000:8000 backup-manager\n```\n\n## 📖 사용법\n\n### 1. 데이터베이스 추가\n\n1. 웹 인터페이스에서 \"데이터베이스 관리\" 페이지로 이동\n2. \"새 데이터베이스 추가\" 버튼 클릭\n3. 연결 정보 입력 (호스트, 포트, 사용자명, 비밀번호)\n4. 환경 및 우선순위 설정\n5. 연결 테스트 후 저장\n\n### 2. 백업 스케줄 설정\n\n1. \"스케줄 관리\" 페이지에서 백업 일정 설정\n2. 전체 백업 및 증분 백업 스케줄 구성\n3. 압축 및 암호화 옵션 선택\n4. 보존 정책 설정\n\n### 3. 수동 백업 실행\n\n1. \"백업 관리\" 페이지에서 대상 데이터베이스 선택\n2. \"백업 실행\" 버튼 클릭\n3. 백업 유형 선택 (전체/증분/스키마/데이터)\n4. 실행 및 진행 상황 모니터링\n\n### 4. 모니터링 및 알림\n\n1. 대시보드에서 실시간 백업 상태 확인\n2. 백업 성공률 및 성능 메트릭 모니터링\n3. 알림 설정으로 이메일/Slack/Discord 알림 구성\n\n## 🔧 설정\n\n### 데이터베이스 설정 (config/databases.yaml)\n\n```yaml\ndatabases:\n  production_db:\n    name: \"운영 데이터베이스\"\n    host: \"prod-db.company.com\"\n    port: 5432\n    database: \"production\"\n    username: \"backup_user\"\n    password: \"${PROD_DB_PASSWORD}\"\n    environment: \"production\"\n    priority: \"high\"\n\n    backup_config:\n      full_backup_schedule: \"0 2 * * 0\" # 매주 일요일 2시\n      incremental_schedule: \"0 */6 * * *\" # 6시간마다\n      compression: \"lz4\"\n      encryption: true\n      retention_policy:\n        daily: 7\n        weekly: 4\n        monthly: 12\n```\n\n### 알림 설정 (config/settings.yaml)\n\n```yaml\nnotifications:\n  email:\n    enabled: true\n    smtp_server: \"smtp.gmail.com\"\n    smtp_port: 587\n    use_tls: true\n  slack:\n    enabled: true\n    webhook_url: \"${SLACK_WEBHOOK_URL}\"\n  discord:\n    enabled: false\n    webhook_url: \"${DISCORD_WEBHOOK_URL}\"\n```\n\n## API 문서\n\n서버 실행 후 다음 URL에서 자동 생성된 API 문서를 확인할 수 있습니다:\n\n- **Swagger UI**: http://localhost:8000/docs\n- **ReDoc**: http://localhost:8000/redoc\n\n### 주요 API 엔드포인트\n\n```\nGET    /api/databases              # 모든 데이터베이스 목록 조회\nPOST   /api/databases              # 새 데이터베이스 추가\nGET    /api/backups                # 모든 백업 목록 조회\nPOST   /api/backups/database/{db_id} # 특정 DB 백업 실행\nGET    /api/schedules              # 모든 스케줄 조회\nPOST   /api/schedules/database/{db_id} # 새 스케줄 생성\nGET    /api/monitoring/status      # 시스템 상태 조회\n```\n\n## 테스트\n\n```bash\n# 단위 테스트 실행\npytest tests/unit/\n\n# 통합 테스트 실행\npytest tests/integration/\n\n# 커버리지 리포트\npytest --cov=app tests/\n\n# 특정 테스트 실행\npytest tests/test_backup_engine.py -v\n```\n\n## 모니터링\n\n### 주요 메트릭\n\n- 백업 성공률\n- 백업 소요 시간\n- 백업 파일 크기\n- 디스크 사용량\n- 데이터베이스 연결 상태\n\n### 알림 레벨\n\n- **CRITICAL**: 운영 DB 백업 실패, 시스템 오류\n- **WARNING**: 디스크 공간 부족, 성능 저하\n- **INFO**: 백업 완료, 정기 리포트\n\n## 보안\n\n### 데이터 보안\n\n- 백업 파일 AES-256 암호화\n- 데이터베이스 연결 정보 암호화 저장\n- SSL/TLS 연결 사용\n\n### 접근 제어\n\n- 백업 디렉토리 권한 제한 (700)\n- 설정 파일 권한 제한 (600)\n- 환경변수를 통한 민감 정보 관리\n\n## 배포\n\n### Docker 배포\n\n```bash\n# 프로덕션 환경 배포\ndocker-compose -f docker-compose.prod.yml up -d\n\n# 스케일링\ndocker-compose up --scale backup-manager=3\n```\n\n### 시스템 서비스 등록\n\n```bash\n# systemd 서비스 등록 (Linux)\nsudo cp scripts/backup-manager.service /etc/systemd/system/\nsudo systemctl enable backup-manager\nsudo systemctl start backup-manager\n```\n\n## 문서\n\n- [프로젝트 기획서](docs/Proposal-Project.md)\n- [개발 지침서](docs/Development-Guidelines.md)\n- [PostgreSQL 스키마 설계](docs/PostgreSQL-Schema.md)\n- [GitHub 이슈 관리 가이드](docs/Issues-Guidelines.md)\n\n## 기여하기\n\n1. Fork the Project\n2. Create your Feature Branch (`git checkout -b feature/AmazingFeature`)\n3. Commit your Changes (`git commit -m 'Add some AmazingFeature'`)\n4. Push to the Branch (`git push origin feature/AmazingFeature`)\n5. Open a Pull Request\n\n자세한 기여 가이드라인은 [개발 지침서](docs/Development-Guidelines.md)를 참고하세요.\n\n## 라이선스\n\n이 프로젝트는 MIT 라이선스 하에 배포됩니다. 자세한 내용은 [LICENSE](LICENSE) 파일을 참고하세요.\n\n## 지원\n\n- 이슈 리포트: [GitHub Issues](https://github.com/your-org/LocalBackUpManager/issues)\n- 문서: [프로젝트 문서](docs/)\n\n## 로드맵\n\n### Phase 1: 핵심 인프라 구축\n\n- 1.1 프로젝트 구조 설정 및 개발 환경 구축\n- 1.2 FastAPI 기반 REST API 서버 구현\n- 1.3 PostgreSQL 메타데이터 데이터베이스 설계 및 구현\n- 1.4 기본 백업 엔진 구현 (pg_dump 기반)\n\n### Phase 2: 다중 데이터베이스 지원\n\n- 2.1 DatabaseManager 구현\n- 2.2 설정 파일 시스템\n\n### Phase 3: 웹 인터페이스 개발\n\n- 3.1 대시보드 페이지\n- 3.2 데이터베이스 관리 페이지\n\n### Phase 4: 고급 기능 및 최적화\n\n- 4.1 증분 백업 구현\n- 4.2 성능 최적화\n\n### Phase 5: 알림 및 모니터링 시스템\n\n- 5.1 알림 시스템 구현\n- 5.2 모니터링 대시보드\n\n### Phase 6: 보안 및 컴플라이언스\n\n- 6.1 보안 강화\n- 6.2 감사 시스템\n\n### Phase 7: 테스트 및 배포 준비\n\n- 7.1 테스트 시스템\n- 7.2 배포 시스템\n\n### Phase 8: DB Type 확장 및 안정화\n\n- 8.1 메타모델 확장 및 마이그레이션 (db_type 추가)\n- 8.2 DatabaseManager 어댑터화 (연결/풀/테스트)\n- 8.3 BackupEngine 백업 전략 어댑터\n- 8.4 설정·문서·배포 업데이트\n- 8.5 통합 및 안정화 테스트\n\n### Phase 9: 웹 UI / UX 개선\n\n- 9.1 Tailwind CSS 도입 및 점진 전환\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhobby2025%2Flocalbackupmanager","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhobby2025%2Flocalbackupmanager","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhobby2025%2Flocalbackupmanager/lists"}