--- 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` 등 공통 유틸화).