--- type: concept status: draft related_pages: ["[[B02_ProjRegister/B02_backend]]", "[[B03_FileInput/B03_backend]]", "[[B04_PreProcess/B04_backend]]", "[[B05_Profile/B05_backend]]", "[[B06_Section/B06_backend]]", "[[B07_Quantity/B07_backend]]", "[[B08_DesignDetail/B08_backend]]", "[[B09_Estimation/B09_frontend]]", "[[architecture/implementation_status]]", "[[architecture/shared_resources]]"] last_updated: 2026-08-23 source: raw/guidelines/structure.md, raw/guidelines/db_schema.md, raw/guidelines/backend.md, raw/guidelines/agent.md, raw/plans/2026-07-17_plan_b04_defects.md, raw/plans/2026-07-26_plan_도엽_오버레이.md --- # 저장 경로 규칙 (Workflow-based Folder Structure) ## 경로 패턴 ``` storage/{company_slug}/{user_slug}/{project_id}/ ├── B03_FileInput/input/{file_type}/ WF0 원본 입력 ├── B04_PreProcess/ │ ├── processed/ 변환 지형 및 타 지도 가공 데이터 │ │ └── map_sheets/ 1:5,000 수치지형도 도엽 zip 및 metadata │ └── models/ WF1 모델 (지면 필터 ground_points_{filter}.npz 캐시 포함) ├── B05_Profile/route/ WF2 경로·일반 구조물 structures.json ├── B05_Profile/corridor/ WF2 3D 코리도 corridor_{route:04d}.json ├── B06_Section/longitudinal/, cross_sections/ WF3 종횡단 ├── B07_Quantity/ 현재 별도 산출물 없음 ├── B08_DesignDetail/ │ ├── manifest.json 도면 확정 메타데이터·횡단 quantity_table │ └── drawings/{drawing_id}.json 확정 CAD 도면 └── B09_Estimation/ 현재 산출 backend 미확인 ``` ## 원칙 (backend.md 3절) 1. **하드코딩 금지** — 경로는 `config/config_system.py`에서 import. 2. **물리 파일은 DB 저장 금지** — 대용량 파일은 파일시스템, DB에는 경로만. 3. **단계별 루트 강제** — 각 B0x 폴더명은 실제 워크플로우 페이지명과 동일해야 함. `raw/`, `processed/`, `computed/`를 프로젝트 루트 공용 폴더로 만들지 않음. 4. **경로 생성 책임** — 원칙상 단계별로 분리하되, 현재 B05가 B06 종횡단 파일을 생성하고 B08이 B06 단면을 재계산하므로 실제 구현 예외를 함께 추적한다. 5. **상대 경로만 DB 저장** — 프로젝트 루트 기준 상대경로. 사용자 입력 경로 직접 결합 금지(경로 이탈 방지), 절대경로 저장 금지. ## DB 컬럼 ↔ 실제 경로 매핑 상세 표 → [[db_schema/overview]] "파일 경로 추적 컬럼" ## 파일명 규칙 (structure.md 1절) - 페이지 폴더: 로그인 전 `A0x_`, 로그인 후 `B0x_`, 워크플로우는 `wf[번호]` 접두사 - 파일명: `폴더명(페이지명)_기능_기타사양.확장자` - 공통 유틸: `common_util/common_util_기능.확장자` ## 코드 감사 주의사항 - B05 `generate_sections()`가 `B06_Section/longitudinal`과 `cross_sections`를 생성한다. - B05 일반 구조물은 `B05_Profile/route/structures.json`, 배관은 B04 공용 `pipe_points.json`이 각각 정본이다. [[B05_Profile/B05_structures]] 참조. - B05 예상형상 코리도는 DB가 아닌 `B05_Profile/corridor/corridor_{route:04d}.json`에 입력 해시와 리본을 원자 저장한다. [[B05_Profile/B05_corridor_surface]] 참조. - B08은 `B06_Section` 산출물을 읽고 `B08_DesignDetail/manifest.json` 및 `drawings/*.json`을 저장한다. - `workflow.json`은 프로젝트 루트에 있지만 workflow 상태 SSOT는 아니다.