Skip to content

fix: 테스트 격리 DB의 운영 백업 오염 차단 — 복원 리허설로 발견한 동형 재발 결함 - #419

Merged
easygap merged 1 commit into
mainfrom
fix/backup-isolation-guard
Jun 11, 2026
Merged

fix: 테스트 격리 DB의 운영 백업 오염 차단 — 복원 리허설로 발견한 동형 재발 결함#419
easygap merged 1 commit into
mainfrom
fix/backup-isolation-guard

Conversation

@easygap

@easygap easygap commented Jun 10, 2026

Copy link
Copy Markdown
Owner

발견 경위 (17번째 감사 라운드 — 복원 리허설)

백업이 실제로 복원 가능한지 첫 실측을 수행하다 발견: 당일 운영 백업이 빈 DB였다(거래 0·포지션 0). 운영 DB 자체는 무사.

원인 (과거 'DB 복구 사건'과 동형의 재발)

테스트가 run_daily_backup을 monkeypatch 없이 실행하면(test_critical_fixesrun_rebalance 경로), conftest의 QUANT_DB_PATH 격리는 DB만 격리하고 백업 경로는 격리하지 않아, 격리된(빈) DB가 같은 날짜 파일명으로 운영 data/backups/에 백업돼 진짜 백업을 덮어썼다.

수정

QUANT_DB_PATH(격리)가 설정된 환경에서는 QUANT_BACKUP_PATH를 명시하지 않는 한 운영 backup_path에 쓰지 않는다(fail-safe skip). 운영 환경은 기존과 동일.

복구·검증

  • 운영 백업 재생성 → 복원 리허설 재검증: 바스켓 키 거래 9·포지션 9·스냅샷 1(NAV 9,960,286원) 보존 확인
  • 오염된 빈 백업 삭제
  • 회귀 테스트 3건, 전체 1493 passed

교훈

백업은 복원 리허설까지가 백업이다 — 존재만 확인한 백업은 검증된 것이 아니다. (주간 운영 점검에 복원 리허설 포함 권장)

복원 리허설(백업이 실제로 복원 가능한지 첫 실측)에서 발견: 당일 운영 백업이
빈 DB였다. 원인 — 테스트가 run_daily_backup을 monkeypatch 없이 실행하면
(test_critical_fixes의 run_rebalance 경로), conftest의 QUANT_DB_PATH 격리는
DB만 격리하고 백업 경로는 격리하지 않아, 격리된(빈) DB가 같은 날짜 파일명으로
운영 data/backups/에 백업돼 진짜 백업을 덮어썼다. 과거 'DB 복구 사건'(테스트가
운영 DB를 삭제)과 동형의 결함이 백업 경로에서 재발한 것.

가드: QUANT_DB_PATH(격리 DB)가 설정된 환경에서는 QUANT_BACKUP_PATH를 명시하지
않는 한 운영 backup_path에 쓰지 않는다(skip+debug 로그). 운영 환경(env 미설정)
은 기존과 동일.

복구: 운영 백업 재생성 후 복원 리허설 재검증 — 바스켓 키 거래 9·포지션 9·
스냅샷 1(NAV 9,960,286) 보존 확인, 오염된 빈 백업 삭제.

회귀 테스트 3건(격리 시 거부/완전 격리 시 수행/운영 환경 정상). 전체 1493 passed.

교훈: 백업은 '복원 리허설'까지가 백업이다 — 존재만 확인한 백업은 검증된 것이
아니다.
@easygap
easygap merged commit b45f5a3 into main Jun 11, 2026
1 check passed
easygap added a commit that referenced this pull request Jun 11, 2026
fix: 테스트의 운영 추적 파일(reports/) 오염 일괄 차단 — #419 스택
easygap added a commit that referenced this pull request Jul 6, 2026
fix: 테스트 격리 DB의 운영 백업 오염 차단 — 복원 리허설로 발견한 동형 재발 결함
easygap added a commit that referenced this pull request Jul 6, 2026
백업 오염(#419)과 동형의 경로 둘을 추가 적발·차단:

1) reports/sector_map_cache.json — git 추적되는 운영 캐시(상관관계 리스크
   체크가 소비)인데, 개별 테스트가 SECTOR_MAP_CACHE_PATH monkeypatch를 잊으면
   테스트 데이터가 운영 캐시를 덮어썼다(매 스위트 실행 후 working tree dirty로
   관찰되던 원인). conftest autouse fixture로 전 테스트 일괄 임시 경로 강제 —
   개별 테스트의 기억에 의존하지 않는다.

2) reports/full_paper_lifecycle_test.json — test_paper_lifecycle이 추적 파일을
   매 실행 덮어씀. 산출물은 tmp_path로, 추적 파일은 과거 검증 증빙으로 보존.

검증: 전체 1493 passed 후 git status에서 reports/ 오염 0 확인(이전엔 매번
M 2건). 백업 가드(#419 스택) 동작으로 운영 백업도 무손상(바스켓 거래 9건 유지).
easygap added a commit that referenced this pull request Jul 6, 2026
fix: 테스트의 운영 추적 파일(reports/) 오염 일괄 차단 — #419 스택
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant