Skip to content

Latest commit

 

History

History
175 lines (117 loc) · 20.7 KB

File metadata and controls

175 lines (117 loc) · 20.7 KB

설계 근거 요약

1.1 프로젝트 구조 설정 및 개발 환경 구축

  • 모듈 경계가 명확한 디렉터리 구조(app/, config/, docs/, web/)로 유지보수성과 확장성을 확보했습니다.
  • 의존성은 requirements.txt로 고정하고, 환경설정은 .env + config/*.yaml로 외부화하여 배포 환경별 차등 구성을 용이하게 했습니다.
  • 향후 CI/CD와 Docker 적용을 고려해 표준 파이썬 프로젝트 레이아웃과 UTF-8 기본 환경(Windows 포함)을 채택했습니다.

1.2 FastAPI 서버 구현

  • app/main.py에서 FastAPI() 인스턴스, CORS/TrustedHost/정적 파일을 설정해 보안과 운영 편의성을 균형 있게 확보했습니다.
  • app/api/*.py 라우터 분리와 lifespan 초기화(init_database, 디렉터리 생성)로 시동 시 안정성과 기능적 응집도를 높였습니다.
  • 문서화 경로(/api/docs, /api/redoc, /api/openapi.json)를 고정해 운영/디버깅 가시성을 강화했습니다.

1.3 PostgreSQL 메타데이터 DB 설계 및 구현

  • app/database.py의 모델은 UUID 키, 시간 필드, 상태/지표 컬럼으로 백업 이력 추적에 필요한 최소 스키마를 반영했습니다.
  • 조회 패턴 기반 인덱스와 SystemLog.details의 JSONB + GIN 인덱스를 적용해 운영 시 모니터링/탐색 비용을 절감했습니다.
  • Alembic(alembic.ini, alembic/env.py)을 통해 alembic upgrade head로 자동 스키마 최신화를 보장하고, 타입 변경 시 USING 절로 이행 안정성을 확보했습니다.

1.4 기본 백업 엔진 구현 (pg_dump 기반)

  • app/core/backup_engine.pyBackupEngine으로 pg_dump 실행·압축(gzip)·암호화(AES-256-GCM)·체크섬까지 단일 플로우로 구성했습니다.
  • BackgroundTasks로 API 요청과 비동기 실행을 분리해 사용자 응답성을 유지하고, 메타데이터(file_path,checksum,duration_seconds 등)를 즉시 기록합니다.
  • ENCRYPTION_KEY(32자) 검증과 pg_dump_version 기록으로 보안/재현가능성을 높였으며, 추후 비밀번호 암호화 저장/복호화 연계를 전제로 설계했습니다.

2.1 DatabaseManager 구현

  • DatabaseManager를 도입해 psycopg2 SimpleConnectionPool 기반 다중 DB 연결 풀을 관리하고, 최소/최대 커넥션·풀 획득/반납/종료 기능을 제공합니다.
  • 실제 연결 테스트(POST /api/databases/{id}/test-connection)와 풀 제어/요약 API(init-pool, close-pool, pool-status)를 추가해 응답시간·성공/실패를 기록하고 connection_status/last_connection_test를 갱신합니다.
  • 애플리케이션 종료 시 lifespan에서 close_all()로 자원 누수를 방지하고, GET /api/monitoring/db-status로 전 DB의 연결 상태를 모니터링합니다.

2.2 설정 파일 시스템

  • ConfigManager를 확장해 ${ENV} 환경변수 재귀 확장, 간단 캐시 및 mtime 기반 변경 감지/리로드(needs_reload, reload_databases_config)를 지원합니다.
  • databases.yaml에 대해 루트 databases 키와 각 항목의 필수 필드( name, host, port, database, username, password, environment, priority )를 검증하고 포트 타입을 확인합니다.
  • API로 설정 조회/검증/리로드를 제공해 운영 중 안전한 동적 적용 기반을 마련했습니다: GET /api/databases/config, POST /api/databases/config/validate, POST /api/databases/config/reload.

3.1 대시보드 페이지

  • Bootstrap 5 기반 반응형 레이아웃과 다크 테마 토글, 로딩 스피너를 적용해 사용자 경험을 개선하고, 최근 백업·활성 DB·상태 배지 등 핵심 위젯을 구성했습니다.
  • Chart.js로 최근 7일 총/성공/실패 추이를 시각화하고, 일별 평균 소요 시간/압축률 보조차트를 추가해 백업 품질과 성능을 한 화면에서 파악할 수 있게 했습니다.
  • 백엔드 모니터링 API와 연계(GET /api/monitoring/status, GET /api/monitoring/dashboard)하여 10초 간격 자동 갱신 및 실패 상세 링크(/api/backups?status_filter=failed) 제공으로 운영 가시성을 강화했습니다.

3.2 데이터베이스 관리 페이지

  • 프론트엔드에 데이터베이스 목록/상태/액션 UI(web/templates/databases.html, web/static/js/databases.js)를 구성하고, 새로고침/추가/수정/삭제/연결 테스트 상호작용을 모달/버튼 기반으로 단순화했습니다.
  • 백엔드는 기존 REST API(/api/databases CRUD, POST /api/databases/{id}/test-connection)에 맞춰 필요한 필드만 사용해 상호 운용성을 높이고, 소프트 삭제로 운영 안전성을 확보했습니다.
  • 우선 검증·알림은 브라우저 기본(알림/확인)으로, 후속 고도화에서 토스트/유효성 강화/검색·정렬·페이징을 순차 추가 가능하도록 확장 포인트를 남겼습니다.

4.1 증분 백업(WAL)·PITR 설계

  • 설계 의도: 전체 덤프 외에 WAL 아카이빙을 이용한 증분 보관과 시점복구(PITR)를 지원해 RPO/RTO를 개선하고 운영 복원력을 높입니다.
  • 구현 전략: 설정 파일(config/settings.yaml)에 backup.wal/backup.pitr 키를 추가해 기능 토글과 경로/보존정책을 외부화하고, BackupEngine에 WAL/증분/PITR 스켈레톤을 먼저 도입한 뒤 점진적으로 실제 실행 로직(pg_basebackup, WAL 적용)을 연결합니다.
  • 운영 고려: PostgreSQL 서버 측 archive_command 등은 인프라 설정으로 분리하고, 본 시스템은 보관 디렉터리 보장/메타데이터 관리/복구 워크플로 가이드를 책임지도록 역할을 명확히 분리합니다.

4.2 백업 엔진 성능 최적화 및 압축 전략

  • zstd/lz4 우선, 미가용 시 gzip으로 폴백; 압축 레벨은 설정값 기반으로 일관 적용.
  • SHA-256 체크섬과 파일/압축/시간 메타데이터를 기록해 무결성과 튜닝 근거를 확보.
  • pg_dump 병렬(-j)·압축 스레드 등 병렬화를 환경 허용 범위 내에서 활용해 TCO 절감.

4.3 보존 정책 및 스토리지 계층화

  • 보고서는 기본 7일 retention_days로 자동 정리, 단기 스토리지만 활성 유지.
  • 장기 보관은 저비용 오브젝트 스토리지로 오프로드하는 아카이빙 훅을 확장 포인트로 둠.
  • 정적 서빙 충돌 예방을 위해 /static/reports/static보다 먼저 마운트.

5.1 알림 시스템(Email/Slack/Discord) 설계

  • NotificationService로 채널 추상화, Email/Slack/Discord는 설정 기반 어댑터로 연결.
  • title/message/level/status 표준 스키마로 필터링·집계·검색을 단순화.
  • 중복/노이즈 제어(레벨·쿨다운·집계)는 확장 포인트로 둬 운영 정책에 맞춰 조정.

5.2 모니터링 대시보드 및 실시간 갱신

  • SSE(/api/monitoring/realtime/stream)로 1시간 요약/최근 알림을 즉시 반영, 미지원 시 폴링으로 보완.
  • 대시보드에서 보고서 생성(기간/상태/알림), 목록 모달(다운로드/삭제)로 운영 워크플로 집약.
  • 실패 링크·압축 도구 상태·평균 소요/압축률 차트로 핵심 신호를 시각화해 대응 시간 단축.

6.1 보안 강화 및 암호화 시스템

  • AES-256-GCM V2 포맷으로 키 식별자 포함 및 환경변수 통합을 통해 운영 환경별 안전한 키 관리와 무중단 키 순환을 지원합니다.
  • RBAC 기반 접근 제어와 세션 보안 강화(고정 공격 방지, 동시 로그인 제한, 비활성 타임아웃)로 최소 권한 원칙을 구현했습니다.
  • 구조화된 보안 감사 로깅과 강화된 비밀번호 정책으로 엔터프라이즈급 컴플라이언스 요구사항에 대응하고 감사 추적성을 확보했습니다.

6.2 감사 로그 및 규정 준수 시스템

  • 포괄적 감사 추적을 위해 AuditLog(사용자 행동), AccessLog(API 접근), SecurityEvent(보안 이벤트), ComplianceReport(규정 준수) 모델을 설계하고 JSONB 필드와 GIN 인덱스로 고성능 검색을 지원합니다.
  • AuditMiddleware와 AuditActionMiddleware로 모든 API 요청/응답과 중요 액션을 자동 로깅하며, 위험도 점수 기반 실시간 위협 탐지와 자동 차단 기능을 제공합니다.
  • GDPR/SOX/HIPAA 등 규정별 맞춤형 컴플라이언스 리포트 생성과 보안 정책 엔진을 통한 브루트포스/권한상승 시도 자동 감지로 엔터프라이즈급 보안 거버넌스를 구현했습니다.

7.1 종합 테스트 시스템

  • pytest 기반 4계층 테스트 구조(단위/통합/성능/회귀)로 90% 커버리지 목표와 함께 SQLite 인메모리 DB와 Mock을 활용한 격리된 테스트 환경을 구축했습니다.
  • 백업 엔진 성능 기준(10MB/5초, 압축률 50% 이상, 메모리 100MB 이내)과 PostgreSQL 호환성 검증을 통해 품질 게이트와 회귀 방지 체계를 확립했습니다.
  • 환경별 테스트 전략(로컬/CI/운영)과 상세한 실행 가이드를 제공하여 개발팀의 테스트 자동화와 지속적 품질 관리를 지원합니다.

7.2 Docker 컨테이너화 및 배포 자동화

  • Python 3.11-slim 기반 멀티스테이지 빌드와 비root 사용자 실행으로 보안성과 이미지 최적화를 달성하고, Docker Compose를 통해 애플리케이션/PostgreSQL/Redis/모니터링 서비스를 환경별(운영/개발)로 분리 구성했습니다.
  • GitHub Actions 기반 CI/CD 파이프라인으로 코드 품질 검사→다중 버전 테스트→Docker 빌드→보안 스캔의 단계적 검증을 수행하고, Blue-Green 배포 전략과 스테이징→프로덕션 단계적 배포로 무중단 서비스를 보장합니다.
  • Kubernetes 매니페스트와 상세한 배포 가이드를 제공하여 Docker Compose/Kubernetes/클라우드 환경에서의 배포 유연성을 확보하고, Prometheus/Grafana 모니터링과 ELK Stack 로깅으로 운영 가시성을 강화했습니다.

8.1 Database 메타모델 확장 (db_type 지원)

  • Database 모델에 db_type 컬럼을 추가하여 PostgreSQL, MySQL, SQLite 등 다중 데이터베이스 타입을 지원하고, 기본값 postgresql로 기존 레코드 호환성을 보장했습니다.
  • Alembic 마이그레이션(20250918_add_db_type_column.py)으로 안전한 스키마 변경을 수행하고, ix_databases_db_typeix_databases_db_type_environment 인덱스를 추가해 조회 성능을 최적화했습니다.
  • API 입력 검증에 db_type 필드를 반영하여 생성/수정 시 지원하지 않는 DB 타입 입력을 차단하고, 필터링(?db_type=postgresql) 및 정렬(?sort=db_type) 기능을 제공해 운영 편의성을 향상시켰습니다.

8.2 DatabaseManager 어댑터화 (다중 DB 연결 관리)

  • DatabaseAdapter 추상 인터페이스를 정의하고 PostgreSQL(psycopg2), MySQL(PyMySQL), SQLite(sqlite3) 각각에 최적화된 어댑터를 구현하여 DB별 연결 풀 전략을 차별화했습니다.
  • 기존 DatabaseManager를 어댑터 패턴 기반으로 리팩토링하여 db_type 파라미터로 동적 어댑터 선택이 가능하도록 하고, 연결 풀 관리 API(init-pool, close-pool, pool-status)를 추가했습니다.
  • PostgreSQL은 SimpleConnectionPool, MySQL은 커스텀 풀, SQLite는 즉시 연결 방식으로 각 DB의 특성에 맞는 최적화된 연결 관리를 구현하여 확장성과 성능을 동시에 확보했습니다.

8.3 BackupEngine 백업 전략 어댑터 (다중 DB 백업 지원)

  • BackupAdapter 추상 인터페이스를 정의하고 PostgreSQL(pg_dump), MySQL(mysqldump), SQLite(backup API/파일복사/dump) 각각에 최적화된 백업 전략을 구현하여 DB별 특성을 반영한 백업 옵션을 제공했습니다.
  • 공통 후처리 모듈(BackupPostProcessor)을 분리하여 압축(gzip/lz4/zstd), 암호화(AES-256-GCM), 체크섬(SHA-256) 기능을 재사용 가능하도록 구현하고, 통합 파이프라인으로 일관된 후처리를 보장했습니다.
  • 기존 BackupEngine을 어댑터 패턴 기반으로 리팩토링(BackupEngineV2)하여 DB 타입별 동적 어댑터 선택과 공통 후처리 적용이 가능하도록 하고, 메타데이터 통합 관리로 운영 편의성을 향상시켰습니다.

8.4 설정·문서·배포 업데이트 (다중 DB 지원 문서화)

  • README.md와 Development-Guidelines.md에 PostgreSQL/MySQL/SQLite 지원 가이드를 추가하여 각 DB별 백업 도구, 지원 버전, 백업 형식, 특징을 명시하고 어댑터 패턴 구현 방법을 상세히 문서화했습니다.
  • databases.yaml 설정 파일에 DB 타입별 특징과 환경변수 사용법을 설명하는 주석을 강화하고, Dockerfile에 mysql-client/sqlite3/lz4/zstd 등 다중 DB 백업에 필요한 클라이언트 도구와 압축 도구를 추가했습니다.
  • requirements.txt에 PyMySQL 드라이버가 포함되어 있음을 확인하고, 개발자들이 다중 DB 환경에서 효과적으로 개발할 수 있도록 DB별 특성, 에러 처리, 성능 최적화, 보안 고려사항을 포함한 종합적인 개발 가이드를 제공했습니다.

8.5 통합 및 안정화 테스트 (다중 DB 품질 보증)

  • pytest 기반 다중 DB 통합 테스트(test_multidb_integration.py)로 PostgreSQL/MySQL/SQLite 어댑터 생성, 백업 명령어 생성, E2E 백업 시나리오를 검증하고, Mock과 실제 SQLite DB를 활용한 격리된 테스트 환경을 구축했습니다.
  • 성능 벤치마크 테스트(test_performance_benchmarks.py)로 SQLite 백업 방식별 성능 비교, 압축 알고리즘별 속도/압축률 분석, 동시 백업 처리 성능, 메모리 누수 감지를 통해 시스템 안정성과 성능 기준을 확립했습니다.
  • PostgreSQL 회귀 테스트(test_regression_postgresql.py)와 종합 배포 가이드(Deployment-Guide-MultiDB.md)로 기존 기능 호환성 보장과 로컬/Docker/Kubernetes 환경별 배포 절차를 제공하여 다중 DB 지원 시스템의 안정적인 운영 기반을 마련했습니다.

9.1 Tailwind CSS 도입 및 점진 전환 (현대적 UI 시스템 구축)

  • CDN 방식 시범 도입과 PostCSS+PurgeCSS 빌드 파이프라인을 병행 구성하여 기존 Bootstrap 5 시스템과 호환성을 유지하면서 점진적 전환이 가능한 환경을 구축하고, tailwind.config.js에서 기존 common.css 디자인 토큰과 매핑된 커스텀 테마를 정의했습니다.
  • 대시보드 헤더(.tw-title), 시스템 상태 카드(.tw-card), 액션 버튼(.tw-btn) 등 핵심 컴포넌트에 Tailwind 스타일을 시범 적용하고, 호버 효과와 다크 모드 지원을 포함한 인터랙티브 UI 컴포넌트를 구현하여 사용자 경험을 향상시켰습니다.
  • 성능 검증 스크립트(test_tailwind_performance.py)로 번들 크기 측정, 로딩 성능 분석, 시각적 회귀 테스트, 접근성 검증을 자동화하고, Bootstrap 의존성 분석과 점진적 마이그레이션 계획(Tailwind-Migration-Plan.md)을 수립하여 안전하고 체계적인 UI 시스템 전환 기반을 마련했습니다.

10.1 웹 기반 다중 DB 타입 선택 UI 구현 (사용자 친화적 DB 관리)

  • 데이터베이스 관리 페이지에 DB 타입 선택 드롭다운(PostgreSQL/MySQL/SQLite)을 추가하고, 선택한 타입에 따라 기본 포트 자동 설정(5432/3306/0)과 타입별 아이콘(🐘/🐬/📄) 및 컬러 배지를 통해 직관적인 시각적 구분을 제공했습니다.
  • SQLite 선택 시 호스트 필드를 파일 경로 입력으로 전환하고 포트/DB명 필드를 비활성화하는 동적 UI 변경과, PostgreSQL/MySQL 선택 시 적절한 플레이스홀더와 도움말 텍스트를 제공하여 각 DB 타입의 특성에 맞는 사용자 경험을 구현했습니다.
  • 기존 데이터베이스 목록 테이블에 DB 타입 컬럼을 추가하고 타입별 배지로 표시하며, 신규 등록과 기존 DB 수정 시 모두 DB 타입 설정이 가능하도록 하여 YAML 파일 직접 편집 없이도 웹에서 완전한 다중 DB 관리를 실현했습니다.

10.2 다중 DB 백업 진행 상황 추적 및 성능 메트릭 비교 (실시간 모니터링 시스템)

  • 대시보드에 실시간 백업 진행 상황 추적 섹션을 구현하여 진행 중인 백업 목록, 각 백업별 진행률 바와 예상 완료 시간, 완료된 백업 요약을 카드 형태로 표시하고, 백업 로그 실시간 스트리밍 기능(토글 제어)을 통해 ERROR/WARN/INFO/DEBUG 레벨별 색상 구분과 자동 스크롤을 제공했습니다.
  • DB별 성능 메트릭 비교 시스템으로 PostgreSQL/MySQL/SQLite의 평균 백업 시간을 막대 차트로, 압축률을 도넛 차트로, 백업 파일 크기 추이를 라인 차트로 시각화하고, 시간 범위 선택(7일/30일/90일)과 실시간 데이터 업데이트를 지원하여 각 DB 타입의 백업 효율성을 직관적으로 분석할 수 있도록 했습니다.
  • 지능형 성능 개선 권장사항 엔진을 구현하여 각 DB의 백업 시간과 압축률을 분석해 PostgreSQL 병렬 백업(--jobs), MySQL 트랜잭션 옵션, SQLite VACUUM 최적화 등 구체적이고 실행 가능한 맞춤형 권장사항을 자동 생성하고, Mock 데이터 생성 기능으로 API 없이도 실제와 유사한 성능 데이터를 시연할 수 있는 환경을 구축했습니다.

10.3 스마트 DB 설정 마법사 (신규 사용자 온보딩 시스템)

  • 3단계 설정 마법사(database_wizard.html, database_wizard.js)를 구현하여 DB 선택(PostgreSQL/MySQL/SQLite 카드 기반 선택) → 연결 정보(DB별 맞춤형 폼) → 백업 설정(권장값 자동 적용) → 완료(첫 백업 자동 실행) 과정을 통해 신규 사용자가 복잡한 설정 없이도 5분 내에 첫 번째 데이터베이스를 등록할 수 있도록 했습니다.
  • 각 단계별로 시각적 진행률 표시기, DB 타입별 특성에 맞는 동적 폼 변경(SQLite 파일 경로 입력, PostgreSQL/MySQL 포트 자동 설정), 실시간 연결 테스트, 권장 설정 자동 적용(매일 새벽 2시 백업, gzip 압축, 30일 보관) 등을 제공하여 사용자 경험을 최적화했습니다.
  • 대시보드와 데이터베이스 관리 페이지에 마법사 진입점을 추가하고, 특히 등록된 DB가 0개일 때 "첫 DB 등록" 버튼을 자동 표시하여 신규 사용자의 자연스러운 온보딩 플로우를 구현했으며, 설정 완료 후 즉시 첫 백업을 실행하여 설정 검증과 사용자 만족도를 동시에 달성했습니다.

10.4 데이터베이스 템플릿 시스템 구현 (설정 재사용성 향상)

  • 기존 데이터베이스 설정을 기반으로 템플릿을 생성하거나 수동으로 DB 타입별 템플릿을 구성할 수 있는 템플릿 관리 시스템을 구현하여 반복적인 설정 작업을 최소화하고 표준화된 DB 구성을 지원했습니다.
  • 템플릿별 미리보기, 편집, 복제, 삭제 기능과 함께 기본 템플릿 설정을 통해 신규 데이터베이스 등록 시 자동 적용되는 워크플로를 제공하여 운영 효율성을 크게 향상시켰습니다.
  • 템플릿 카드 기반 직관적 UI와 환경별 배지, DB 타입별 아이콘을 통한 시각적 구분으로 사용자가 쉽게 원하는 템플릿을 찾고 활용할 수 있는 사용자 경험을 구현했습니다.

10.5 JavaScript 코드 중복 제거 및 공통 모듈화 (코드 품질 향상)

  • database_templates.js와 databases.js에서 중복되는 유틸리티 함수들(getDbTypeIcon, getEnvironmentBadge, getDefaultPort, escapeHtml, 알림 함수 등)을 분석하여 database_utils.js 공통 모듈로 분리했습니다.
  • 공통 모듈에 DB 타입별 아이콘/배지, 환경별 배지, HTML 이스케이프, SweetAlert2 기반 알림 시스템 등을 통합하여 일관된 UI/UX와 코드 재사용성을 확보했습니다.
  • 두 JavaScript 파일에서 중복 코드를 제거하고 DatabaseUtils 네임스페이스를 통해 공통 함수를 참조하도록 리팩토링하여 유지보수성을 크게 향상시키고 코드 중복을 약 200줄 이상 줄였습니다.

10.6 다국어 지원 및 접근성 개선 (포용적 사용자 경험)

  • 모든 HTML 템플릿에 lang="ko" 설정 완료, 백엔드 API 오류 메시지 한국어 번역 완료, 폼 필드별 상세한 도움말 텍스트와 aria-describedby 속성을 통한 스크린 리더 지원을 구현했습니다.
  • 키보드 네비게이션을 위한 포커스 관리, 모달 키보드 트랩, 테이블 행 화살표 키 네비게이션, 엔터/스페이스 키 활성화 지원과 함께 고대비 모드 및 모션 감소 설정 대응을 포함한 포괄적 접근성 CSS를 구현했습니다.
  • 스크린 리더를 위한 라이브 리전, 실시간 폼 유효성 검사 피드백, ARIA 속성 강화, 스킵 링크 제공을 통해 WCAG 2.1 AA 수준의 웹 접근성 표준을 준수하는 사용자 친화적 인터페이스를 완성했습니다.