- `docs/` 를 .gitignore 에서 빼 git 추적 대상으로 전환 (위키·완료 이력·검증 기록) - `docs/raw/PLAN.md` · `docs/raw/OWNERS.md` 를 저장소 최상위로 이동 후 .gitignore 에 등록 — 창끼리 공유하되 저장소에는 안 올리는 장부 - 살아 있는 경로 참조 7개 파일 정정 (아카이브 107건은 그때 사실이라 그대로 둠) - graphify 날짜별 산출물(`docs/wiki/graphify-out/20*/`) 제외 — `graphify update` 가 다시 만듦 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
3.3 KiB
3.3 KiB
검증 보고서 — B01 프로젝트 삭제: 개발용 하드 삭제 스위치
- 검증 날짜: 2026-08-08
- 검증 대상: 개발 환경용 프로젝트 데이터베이스 행 및 물리 디스크 통삭제 스위치 기능
- 검증자: Antigravity (코드 검증자 역할)
1. 검증 내용
- 설정 및 스위치 위치:
config/config_system.py최상단에PROJECT_DELETE_HARD_ENABLED플래그를 두어 시인성을 극대화함. 기본값이False여서 환경변수가 없는 운영 배포 환경에서는 안전하게 소프트 삭제로 작동함.
- 물리 경로 해석 검증 (
resolve_project_root_for_delete):resolve_stored_project_path()와 달리 삭제용 경로는os.makedirs를 호출하지 않아 불필요한 폴더 복원을 차단함.- 경로 검증 시 절대경로 여부,
..을 통한 상위 경로 이탈 차단, 세그먼트 수 검증(정확히 4개), 첫 세그먼트가storage인지 검증, 마지막 세그먼트가project_id문자열과 일치하는지 엄밀히 검증함. - 이로 인해 타 프로젝트 폴더나 시스템 루트 폴더가 오삭제되는 사고를 철저히 예방함.
- 삭제 비즈니스 로직 및 실행 순서 (
hard_delete_project):- DB 삭제 먼저, 파일 삭제 나중 원칙을 엄수함.
SELECT storage_path로 경로를 우선 확보한 뒤 검증을 통과하지 못하면 DB를 롤백함.- DB 트랜잭션 안에서
DELETE FROM projects를 실행하여 CASCADE 설정된 10여 개 자식 테이블이 정상 삭제되도록 함. PROJECT_HARD_DELETE감사 로그를 남긴 후commit()이 완료된 상태에서shutil.rmtree를 수행함.- 만약 디스크 삭제(
shutil.rmtree) 중 오류(권한, 파일 잠금 등)가 발생해도, DB는 이미 정리된 정합한 상태이므로 시스템 오작동이 없도록 설계됨. rmtree 오류는 에러 로그로 남겨 수동 정리 가능하게 함.
- 라우터 분기 및 UI 경고창 다국어:
B01_Dashboard_Router.py에서 플래그에 따라hard_delete_project와soft_delete_project를 올바르게 선택하여 실행함./api/dashboard/me응답에project_delete_hard플래그를 내려보내 프론트엔드가 이를 인식함.B01_Dashboard_UI_Modals.ts에서 하드 삭제 모드일 경우 원본 데이터가 날아간다는 고유 경고 창(B01_Dashboard_Confirm_DeleteProject_Hard)을 노출하여 사용자 실수를 사전에 경고함.
2. 검증 결과
- 기획 및 사용자 요구사항에 정의된 안전 조치가 백엔드와 프론트엔드 양측에 정밀하게 구현되었음이 검증됨.
- 특히 경로 가드 로직이 견고하여 오작동 위험을 원천 차단함.
3. 미결 리스크 권고 사항 (운영 주의)
- 현재 저장소 내
.env파일이 Git으로 계속 추적되고 있음. 로컬 개발 시 임시로.env에PROJECT_DELETE_HARD_ENABLED=True를 기재한 채 실수로 Git Push를 하게 되면, 운영 서버 배포 시 스위치가 강제로 켜지는 불상사가 발생할 수 있음. - 조치 방안: 운영 배포 브랜치나 CI/CD 파이프라인에서
.env환경 변수가 명시적으로False가 되도록 안전장치를 하거나, 배포 전에.env를 Git 추적에서 정식으로 분리(git rm --cached .env및.gitignore설정 수정)할 것을 강력히 권고함.