- `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>
60 lines
7.4 KiB
Markdown
60 lines
7.4 KiB
Markdown
---
|
|
type: page-backend
|
|
status: stable
|
|
page_id: B06_Section
|
|
related_pages: ["[[B06_Section/B06_frontend]]", "[[B06_Section/B06_api]]", "[[B06_Section/B06_db]]", "[[B06_Section/B06_dependencies]]", "[[B06_Section/B06_culvert_set]]", "[[architecture/project_map]]", "[[architecture/workflow_data_flow]]"]
|
|
last_updated: 2026-08-26
|
|
source: ["docs/raw/verification/2026-07-19_verify_B05_B06_UI_Station_Improvement.md", "docs/raw/verification/2026-07-19_verify_B05_B06_improvements.md", "docs/raw/verification/2026-07-19_verify_half_width_persistence.md", "docs/raw/verification/2026-07-19_verify_responsive_layout_drag.md", "docs/raw/verification/2026-07-19_verify_B05_B06_차트_레이아웃_후속보정.md", "docs/raw/verification/2026-07-20_verify_B07_상세설계개선.md", "docs/raw/verification/2026-07-21_verify_B06_ground_section_type_B07_linkage.md", "docs/raw/verification/2026-07-21_verify_B06_default_design_B07_gating.md", "docs/raw/verification/2026-07-22_verify_B06_B07.md", "docs/raw/verification/2026-07-25_verify_b05_b06_modifications.md", "docs/raw/verification/2026-08-02_verify_mass_haul_and_drainage_fixes.md", "docs/raw/verification/2026-08-02_verify_mass_haul_distribution_and_refinements.md", "docs/raw/verification/2026-07-18_verify_B06_DrawingRendering.md", "docs/raw/verification/2026-07-18_verify_B06_ProfileCross.md", "docs/raw/verification/2026-07-19_verify_종횡단_이슈수정_3건.md", "docs/raw/verification/2026-07-24_verify_B05_B06_표준횡단.md", "docs/raw/plans/2026-08-20_plan_B06_배수관_횡단도_세트.md", "docs/raw/verification/2026-08-20_verify_B06_배수관_횡단도_세트_자체검증근거.md", "docs/raw/plans/2026-08-26_plan_B05_B06_구조물_인접측점_3D투영커브.md", "docs/raw/verification/2026-08-26_verify_B05_B06_구조물_인접측점_3D투영커브_교차검증.md"]
|
|
---
|
|
|
|
# B06_Section — Backend
|
|
|
|
2026-08-22 책임 분리 리팩터링 뒤 `B06_Section_Router.py`는 현재 678줄로 700줄 제한을 만족한다. Python 구문 검사와 라우터 import 검사 통과 기록이 있으며 Git 작업은 하지 않았다.
|
|
|
|
## 요청·응답 모델
|
|
| 항목 | 위치 | 역할 |
|
|
|---|---|---|
|
|
| `SectionConfirmResponse` | `B06_Section_Schema.py` | 확정 route와 confirmed 상태 응답 |
|
|
| `SectionSummaryResponse` | `B06_Section_Schema.py` | 종단·횡단 결과 요약 응답 |
|
|
| `SectionDetailResponse` | `B06_Section_Schema.py` | 종단 결과 및 다수 횡단면 일괄 데이터 형식 정의 |
|
|
| `SectionRegenerateRequest` | `B06_Section_Schema.py` | 횡단 반폭 재생성 요청 검증 (`cross_half_width_m`에 `gt=0` 유효성 검증 적용) |
|
|
| `CrossDesignRequest` / `CrossDesignResponse` | `B06_Section_Schema.py` | 측점별 지반유형/단면유형/측구위치 계산 요청 및 **절토 토사/암반 분리 면적(`cut_soil_area_m2`, `cut_rock_area_m2`, `cut_rock_kind`) 응답 스키마** |
|
|
| `EarthworkConversion` / `EarthworkConversionFactor` | `B06_Section_Schema.py` | 토량환산계수(L, C) 전송을 위한 Pydantic 스키마 |
|
|
|
|
## 계산 엔진
|
|
| 항목 | 위치 | 역할 |
|
|
|---|---|---|
|
|
| `compute_cross_design()` | `B06_Section_Engine_Design.py` | **[2단계 경사 & N-2-4 연동]** 측점별 표준단면 절/성토 단면적 및 기하선 연산 엔진 (리핑암/발파암 2단계 절토 경사, 단면유형 자동 판정, `ditch_enabled` 토글) |
|
|
| `_split_cut_areas()` | `[[B06_Section/backend/B06_Section_Engine_Areas]]` | **[신설/2026-08-02]** 700줄 충족을 위해 분리된 암 경계선 기준 절토면적 토사/암반 정밀 적분 연산 |
|
|
| `design_elevation_from_longitudinal()` | `B06_Section_Engine_Design.py` | 종단 계획선 계획고 선형보간 계산 헬퍼 |
|
|
| `attach_culvert_sets()` | `B06_Section_Engine_Culvert.py` | 구조물 세트를 상세 횡단 dict에 결합; BOX암거·세월교는 소유 측점만 사용 |
|
|
| `_SPAN_LINKED_TYPES` | `B06_Section_Engine_Culvert.py` | 인접 측점 연동 타입 집합; 현재 비어 있으며 기슭막이는 별도 프론트 경로 사용 |
|
|
| *종횡단 생성 엔진* | `B05_Profile_Engine_Sections.py` 등 | 기존 B06 종횡단 생성 엔진 파일 3종은 **B05 노선 설계 최적화 시점에 실시간 통합 계산**하도록 B05로 이관되었습니다. |
|
|
|
|
## 라우터·workflow (조회, 확정, 타 프로젝트 불러오기 및 재생성)
|
|
| 항목 | 위치(상대 경로) | 역할 |
|
|
|---|---|---|
|
|
| `get_sections()` | `B06_Section_Router.py` | route 종횡단 요약 조회 (B05에서 계산된 데이터가 없을 시 오류 반환. `data.options`에 이력이 있을 시 DB 반폭 값 1순위로 조회 적용) |
|
|
| `get_road_widths()` | `B06_Section_Router.py` | 임도 등급별 법정 최소 도로폭 정보 조회 엔드포인트 |
|
|
| `cross_design_one()` | `B06_Section_Router.py` | 단건 측점 지반/단면 지정 즉시 계산 및 `data.design` 병합 저장 |
|
|
| `list_recent_company_projects()` | `B06_Section_Router.py` | 동일 회사 최근 5개 프로젝트 목록 반환 |
|
|
| `get_project_standard_cross_section()` | `B06_Section_Router.py` | 지정 프로젝트 표준단면 설정 로드 |
|
|
| `regenerate_sections()` | `B06_Section_Router.py` | **횡단 반폭 재생성**: 재생성 옵션을 받아 `run_section_generation` 엔진 비동기 실행 |
|
|
| `confirm_sections()` / `save_sections()` | `[[B06_Section/backend/B06_Section_Router_Confirm]]` | **[신설/2026-08-02]** 700줄 충족을 위해 분리된 임시 저장 및 확정(유토곡선 병합 저장 및 stage 3 COMPLETE 전이) 라우터 |
|
|
| `detail_sections()` | `B06_Section_Router.py` | 종단 결과 및 다수 횡단면 데이터 일괄 조회 API |
|
|
| `start_stage()` / `complete_stage()` / `fail_stage()` | `B06_Section_Router.py` | WF3 상태 전이 → [[workflow_state]] |
|
|
|
|
## 데이터 영구 저장 및 환경설정
|
|
| 항목 | 위치 | 역할 |
|
|
|---|---|---|
|
|
| `update_cross_section_design()` | `B06_Section_Repository.py` | `cross_sections.data` 내 `design` JSON 키 멱등성 업데이트 (행 부재 시 구조물/비정규 측점 INSERT 멱등 처리) |
|
|
| `merge_longitudinal_section_data()` | `B06_Section_Repository.py` | **[신설/2026-08-02]** 유토곡선 결과(`mass_haul`) 데이터를 `longitudinal_sections.data`에 병합 저장하는 멱등성 Raw SQL 헬퍼 |
|
|
| `get_recent_company_projects()` | `B06_Section_Repository.py` | Raw SQL 기반 동일 회사 최근 5개 프로젝트 조회 |
|
|
| `get_cross_sections_missing_design_chainages()` | `B06_Section_Repository.py` | 확정 시 미지정 측점 목록 추출 헬퍼 |
|
|
| `delete_sections_for_route()` | `B06_Section_Repository.py:27` | 동일 route 기존 결과 삭제 후 재생성 |
|
|
| `get_latest_section_options()` | `B06_Section_Repository.py:50` | 가장 최근 `longitudinal_sections`의 `data.options` 스냅샷 로드 및 역직렬화 헬퍼 |
|
|
| `EARTHWORK_CONVERSION_FACTORS` | `config/config_system.py:439` | **[신설/2026-08-02]** 지반유형 3종에 대한 체적 변화 계수 기본값 (토사 L1.25/C0.90, 리핑암 L1.35/C1.15, 발파암 L1.60/C1.30) |
|
|
| `EARTHWORK_HAUL_EQUIPMENT_LIMITS_M` | `config/config_system.py:462` | **[신설/2026-08-02]** 토공 운반장비 선정 제한거리 (종무대 20m, 도쟈 50m, 덤프 초과) |
|
|
| `SECTION_DESIGN_TEMPLATES` | `config/config_system.py` | 표준단면 프리셋 (토사: 절토 1:1.2, 측구 1000x400 / 암반: 절토 1:0.6, 측구 790x400) 및 고정 성토경사(1:1.2) |
|
|
| 잔재 파일 방지 | `B05_Profile_Engine_Sections.py:145` | 횡단 세션 재계산 후 저장 전 `prune_stale_cross_files()` 잔재 자동 삭제 |
|