- `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>
40 lines
4.5 KiB
Markdown
40 lines
4.5 KiB
Markdown
---
|
|
type: page-backend
|
|
status: stable
|
|
page_id: B05_Profile
|
|
related_pages: ["[[B05_Profile/B05_frontend]]", "[[B05_Profile/B05_api]]", "[[B05_Profile/B05_db]]", "[[B05_Profile/B05_dependencies]]", "[[B05_Profile/B05_corridor_surface]]", "[[architecture/project_map]]", "[[architecture/workflow_data_flow]]"]
|
|
last_updated: 2026-08-23
|
|
source: ["docs/raw/verification/2026-08-08_verify_server_and_e2e_fixes.md", "docs/raw/verification/2026-07-18_verify_b04_confirm_b05_rebuild.md", "docs/raw/verification/2026-07-19_verify_종횡단_이슈수정_3건.md", "docs/raw/verification/2026-07-20_verify_B05_longitudinal_grade_line.md", "docs/raw/verification/2026-07-24_verify_B05_B06_표준횡단.md", "docs/raw/verification/2026-08-23_verify_B05_3D_예상형상_코리도_서피스_교차검증.md"]
|
|
---
|
|
|
|
# B05_Profile — Backend
|
|
|
|
B05 경로 설계 백엔드는 FastAPI 라우터, confirm 헬퍼 모듈, aiomysql Repository, Pydantic Schema 및 최적 탐색/시공계획고/단면 생성/배수유역 및 관 매설 연동 엔진 모듈들로 세분화되어 구성됩니다.
|
|
|
|
일반 구조물 레지스트리·파일 정본·검증·마이그레이션·후속 STALE 연계는 [[B05_Profile/B05_structures]]를 기준으로 한다.
|
|
|
|
## 📂 소스코드 1:1 세분화 위키 파일 목록
|
|
|
|
| 소스 파일명 | 위키 명세 문서 | 핵심 역할 |
|
|
|---|---|---|
|
|
| `B05_Profile_Router.py` | `[[B05_Profile/backend/B05_Profile_Router]]` | FastAPI 엔드포인트 서빙 및 최적경로/선형편집 영속화 |
|
|
| `B05_Profile_Router_Confirm.py` | `[[B05_Profile/backend/B05_Profile_Router_Confirm]]` | 경로 확정(`confirm`) 시 비정규 측점 및 종단 병합 오케스트레이션 헬퍼 |
|
|
| `B05_Profile_Repository.py` | `[[B05_Profile/backend/B05_Profile_Repository]]` | `routes`, `route_points`, `route_statistics` Raw SQL CRUD |
|
|
| `B05_Profile_Schema.py` | `[[B05_Profile/backend/B05_Profile_Schema]]` | Pydantic V2 요청/응답 및 % 경사 정규화 검증 스키마 |
|
|
| `B05_Profile_Engine_Solver.py` | `[[B05_Profile/backend/B05_Profile_Engine_Solver]]` | DTM 비용면 캐싱, 경유점 order null 정렬 예외 보정(`item.get("order") or 0`) 및 최적 경로 Solver |
|
|
| `B05_Profile_Engine_Grade.py` | `[[B05_Profile/backend/B05_Profile_Engine_Grade]]` | 법정 기준 시공계획고, 종단곡선 15m(`default_curve_length_m`) 일원화 및 최대가용 L 클램프 엔진 |
|
|
| `B05_Profile_Engine_Sections.py` | `[[B05_Profile/backend/B05_Profile_Engine_Sections]]` | 종단(`longitudinal.json`) 및 횡단(`cross_*.json`) 단면 파일 생성 엔진 |
|
|
| `B05_Profile_Structures_Schema.py` | `[[B05_Profile/B05_structures]]` | 구조물 타입·인스턴스와 배치형태별 위치 검증 |
|
|
| `B05_Profile_Structures_Repository.py` | `[[B05_Profile/B05_structures]]` | `structures.json` 원자 저장, 판번호·레지스트리 검증 |
|
|
| `B05_Profile_Structures_Migration.py` | `[[B05_Profile/B05_structures]]` | 구 비정규 구조물의 멱등 변환 모듈 |
|
|
| `B05_Profile_Structures_Router.py` | `[[B05_Profile/B05_structures]]` | 구조물 타입 조회와 목록 GET/PUT, STALE 요청 |
|
|
| `B05_Profile_Router_Corridor.py` | `[[B05_Profile/B05_corridor_surface]]` | 코리도 JSON 조회·원자 저장과 용량 제한 |
|
|
|
|
## 📋 핵심 백엔드 아키텍처 개요
|
|
- **일반 구조물 SSOT(2026-08-16)**: 배관은 B04 공용 `pipe_points.json`에 유지하고 B~G 구조물은 `B05_Profile/route/structures.json`에 revision과 함께 저장한다. 미등록 타입·잘못된 배치·옵션·범위는 서버에서 거절한다.
|
|
- **자동 설계 체인 배수유역·관 재생성 연동**: `_prepare_drainage_pipes_and_reprofile()` 신설을 통해 B05 확정 직후 자동 설계 체인(`run_auto_design_chain`) 및 이월 체인(`run_redesign_chain`)에서 배수유역·관 지점을 반영한 종횡단 재추출을 자동 수행.
|
|
- **B04/B05 배수 데이터 일원화**: B05 사본 저장소와 복제 연산 로직을 전면 제거하고 B04 공용 API(`B04_PreProcess_Router_Basins.py` 경유)를 직접 매핑 호출.
|
|
- **경로 및 모델 확정 시점 통합**: B04 "모델 확정", B05 "경로 확정" 시점에 공용 API `PUT /drainage/pipe-points`를 호출해 데이터 커밋 저장.
|
|
- **비정규 측점 및 종단 정본 정합**: 관 마커 이동 시 종단 뷰어 및 구조물 폼과 동기화되어 `confirm()` 처리 시 `longitudinal.json` 및 `cross_*.json`에 안전 합류.
|
|
- **모듈 분리 규격 준수**: 단일 소스 700줄 제약 만족 (주요 알고리즘은 `common_util_drainage_detail.py` 등 공통 유틸화).
|