Files
Aislo/docs/wiki/pages/B05_Profile/B05_frontend.md
T
eomsangdonandClaude Opus 5 eb30b774f8 chore(docs): docs 폴더 git 추적 전환 · PLAN·OWNERS 최상위 이관
- `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>
2026-09-09 18:19:07 +09:00

10 KiB

type, status, page_id, related_pages, last_updated, source
type status page_id related_pages last_updated source
page-frontend stable B05_Profile
B05_Profile/B05_backend
B05_Profile/B05_api
B05_Profile/B05_db
B05_Profile/B05_dependencies
B05_Profile/B05_corridor_surface
B05_Profile/B05_Profile_plan_2026-08-19
B06_Section/B06_culvert_set
a00_app_shell_framework
concepts/drainage_watershed
architecture/project_map
architecture/workflow_data_flow
2026-09-02
docs/raw/verification/2026-07-19_verify_B05_B06_UI_Station_Improvement.md
docs/raw/verification/2026-08-08_verify_B05_B06_fixes.md
docs/raw/plans/2026-08-17_plan_B05_box_ui_recommendations.md
docs/raw/plans/2026-08-20_plan_B06_배수관_횡단도_세트.md
docs/raw/verification/2026-08-23_verify_B05_3D_예상형상_코리도_서피스_교차검증.md
docs/raw/plans/2026-08-30_plan_B05_B06_ui_fixes.md
docs/raw/verification/2026-08-30_verify_B05_B06_ui_fixes.md
docs/raw/plans/2026-09-02_plan_B05_profile_edit_followup_completed.md

B05_Profile — Frontend

B05 노선 설계 프론트엔드는 Canvas/WebGL 기반 3D 노선 뷰어, SVG/HTML 기반 종단 선형 및 지반고 편집 도구, 비정규 측점(구조물) 입력 UI, 배수유역/관매설 편집 패널 및 마커 레이어로 구성됩니다.

구조물 단일 편집 폼, 배수관 부속 옵션, 종단 알약 레인과 4경로 선택 동기화는 B05_Profile/B05_structures를 기준으로 한다. 배관은 pipe_points.json, 일반 구조물은 structures.json을 정본으로 유지한다. 2026-08-19 범위 입력·설계속도·표시 정비는 B05_Profile/B05_Profile_plan_2026-08-19에 정리했다.

3D 예상형상의 5종 삼각망 서피스, 원지반 재절단, 캐시·저장, 절성토 완전 분리와 편집 갱신은 B05_Profile/B05_corridor_surface를 기준으로 한다.

📂 소스코드 1:1 세분화 위키 파일 목록

소스 파일명 위키 명세 문서 핵심 역할
B05_Profile_UI_Page.ts [[B05_Profile/frontend/B05_Profile_UI_Page]] 메인 뷰포트 조립 및 새로고침 복원 오케스트레이터
B05_Profile_UI_Panel.ts [[B05_Profile/frontend/B05_Profile_UI_Panel]] 좌측 지표면 선택, 제어점 팔레트, 등급/경사 폼 패널
B05_Profile_UI_Profile_Panel.ts [[B05_Profile/frontend/B05_Profile_UI_Profile_Panel]] 하단 60vh 2단 종단면 패널 오케스트레이터
B05_Profile_UI_Profile_Table.ts [[B05_Profile/frontend/B05_Profile_UI_Profile_Table]] 12행 도면식 테이블 렌더러 및 비정규 측점 2단 스태거 표기 (700줄 한계 준수를 위해 구조물 라인은 분리)
_UI_Profile_Structures.ts [[B05_Profile/frontend/_UI_Profile_Structures]] [신설/2026-08-02] 종단 그래프 구조물 측점선 렌더링, 그래프 위 드래그 조작(attachStationDrag) 및 3D 마커 연동 모듈 (113줄)
B05_Profile_UI_Profile_Alignment.ts [[B05_Profile/frontend/B05_Profile_UI_Profile_Alignment]] 시공계획고 기하 및 수동 델타 편집 정본 모델링
B05_Profile_UI_IrregularStations.ts [[B05_Profile/frontend/B05_Profile_UI_IrregularStations]] 비정규 측점(구조물) 구조화 입력 UI 섹션
B05_Profile_UI_Drainage_Panel.ts [[B05_Profile/frontend/B05_Profile_UI_Drainage_Panel]] B05 배수유역도 우측 패널 및 관 매설 정보 연동/조회 조율 (530줄)
_UI_Drainage_Render.ts [[B05_Profile/frontend/_UI_Drainage_Render]] [신설/2026-08-02] 700줄 한계 준수를 위해 분리된 우측 배수유역도 Canvas 렌더러
B05_Profile_UI_Drainage_Parts.ts [[B05_Profile/frontend/B05_Profile_UI_Drainage_Parts]] 배수유역도 관련 공용 UI 파츠 및 버튼 렌더러, 패널 리사이즈 및 캐시 헬퍼
_UI_Selection.ts [[B05_Profile/frontend/_UI_Selection]] [신설/2026-08-02] 유역 영역 ↔ 종단 그래프 세로선 ↔ 좌측 구조물 폼(+3D 마커) 간의 선택 3자 양방향 동기화 및 무한 루프 방지 가드 모듈 (97줄)
B05_Profile_UI_Drainage_Pipes.ts [[B05_Profile/frontend/B05_Profile_UI_Drainage_Pipes]] 배관 정보 시각화 및 노선 선형 상 배관 마커 조회 레이어 (246줄)
B05_Profile_UI_Viewer.ts [[B05_Profile/frontend/B05_Profile_UI_Viewer]] Three.js WebGL 3D 뷰어 인터페이스 및 마커 오버레이
B05_Profile_Api_Fetch.ts [[B05_Profile/frontend/B05_Profile_Api_Fetch]] 백엔드 API (solve, confirm 등) 통신 클라이언트 (B05 전용 drainage API를 제거하고 B04 공용 API를 직접 매핑 호출)
B05_Profile_Api_Structures.ts [[B05_Profile/B05_structures]] 구조물 레지스트리·정본 조회/저장 및 충돌 오류 구분
B05_Profile_UI_Structures_Panel.ts [[B05_Profile/B05_structures]] A·C·D·E·기타 선택, 측점·옵션 단일 폼과 목록 CRUD
B05_Profile_UI_Structures_Fields.ts [[B05_Profile/B05_structures]] 공통 옵션 입력 조각과 기슭막이 필드
B05_Profile_UI_Drainage_Facility.ts [[B05_Profile/B05_structures]] 배수관·BOX암거·세월교 부속 폼과 관 저장소 연결
B05_Profile_UI_Structures_Marks.ts [[B05_Profile/B05_structures]] 2행 알약 레인·벌룬·구간 띠·A군 세로선 선택 동기화
_Facility_Fields.ts [[B05_Profile/B05_structures]] 보호공·날개벽 입력 조각과 물넘이·세월교 필요 단면 표시
_Structures_List.ts [[B05_Profile/B05_structures]] 구조물 목록 렌더링·항목 라벨 분리
_Drainage_Chrome.ts·_Drainage_Interact.ts [[B05_Profile/B05_structures]] 배수 패널 DOM·포인터/휠 상호작용 분리

📋 핵심 프론트엔드 아키텍처 개요

  • 일반 구조물 정본 편집(2026-08-16): structures.json을 별도 정본으로 로드·직렬 저장하고, 실패·409 충돌 시 서버 정본을 다시 조회한다. 우클릭 빠른 추가는 배관 관리 타입과 필수 옵션 타입을 제외하며, 필수 옵션 타입은 사이드 폼에서 확정 후 저장한다.

  • B05 구조물·배수 UI 정리(2026-08-17): 종단 설계 기준은 기본 접힘이며, 보호공은 돌붙임(찰/메)·도수로로 통합했다. 구조물·배수·페이지·종단 패널 5개 파일은 401~695줄로 분리했고, 가변 상태는 접근자로 전달해 기존 동작을 보존한다.

  • 유량 기반 추천 표시(2026-08-17): 유역 목록은 유효직경 뒤에 배관/BOX암거/세월교 추천을 표시한다. 물넘이·세월교는 월류 폭 입력 시 필요한 수심·단면·유속을 보여 주며, 지형 조건은 현장 확인 문구로 구분한다.

  • B04/B05 배수 데이터 일원화 완결 (2026-08-02): B05 전용 배수 API를 호출하던 통신 클라이언트를 폐기하고, B04 공용 API(fetchDetailPipePoints·computeDetailBasins·saveDetailPipePoints)를 직접 호출하여 B04와 B05 화면이 하나의 pipe_points.json04_detailed_basins.geojson 정본을 완벽히 공유하도록 연동했습니다.

  • 종단 그래프 구조물 연동 및 드래그 조작: 테이블의 복잡성을 줄이고 직관성을 높이기 위해 구조물 라인을 종단 그래프 칸(.b05-profile__chart)으로 통합 배치했습니다. kind === "irregular"인 측점선(배관 포함)을 좌클릭 드래그(attachStationDrag)하여 위치를 이동시키면 실시간으로 배수유역 및 관 매설 정보가 재계산되고 2D/3D 오버레이로 즉각 전파됩니다.

  • 종단 그래프 우클릭 컨텍스트 메뉴: 그래프 빈 자리 우클릭 시 "배관 추가", 측점선 근처 우클릭 시 "배관/구조물 삭제"가 작동하도록 우클릭 메뉴(mountStructureMenu in _UI_Profile_Structures.ts)를 이관 통합했습니다.

  • 선택 3자 동기화: _UI_Selection.ts 신설을 통해 유역 영역 클릭 ↔ 종단 그래프 세로선 선택 ↔ 좌측 구조물 폼(+3D 마커) 간의 선택 상태를 실시간 양방향 갱신하고, 내부 isSyncing 가드를 두어 재귀적 무한 루프를 원천 가드했습니다.

  • 휠 줌 당기면 확대, 밀면 축소 반전: 2D 지도, 횡단도, CAD 뷰어 등 전반에 걸쳐 마우스 휠 당길 시 확대, 밀 시 축소로 방향을 일괄 반전 적용했습니다.

  • 패널 리사이즈 뷰포트 배율 유지: 리사이즈 감지 시 뷰포트 오프셋과 범위를 늘어난 만큼 더 넓은 범위를 보여 주도록 재보정하여, 사용자가 이전에 확인하던 줌 축척의 이탈 현상을 방지했습니다.

  • 유역 목록 3행 스크롤 제한: 유역 수가 많아질 때 패널 레이아웃이 무한히 늘어나지 않도록, CSS calc를 활용해 최대 3행 높이만 노출하고 내부 스크롤이 일어나도록 UI 스크롤을 제한했습니다.

  • 배수 오버레이 가독성 최적화: 집중유역 오버레이를 마커 및 유역 최상단으로 분리 렌더링하고, 유역 번호 서클 라벨을 배관 마커 위에 최종 오버레이로 얹어 등고선/화살표에 가려지지 않도록 조치했습니다.

  • 배수유역 패널 UI 정정 (2026-08-02): 페이지 진입 시 배수유역 패널이 기본적으로 접혀 보이던 문제를 기본 펼침 상태로 정정하였으며, 우측 도킹 패널의 접힘 메커니즘에 맞추어 collapseToward: "right" 및 접기/펼치기 화살표 회전 각도를 올바르게 보정 구현하였습니다.

  • 하위 컴포넌트: B05_Profile/B05_frontend_viewer

남은 파일 한계

2026-08-22 현재 B05_Profile_UI_Structures_Panel.ts는 1,015줄이다. 동작 문제는 아니지만 단일 파일 700줄 제한을 넘으므로 후속 분리 대상이다.

종단테이블 표시 보정

구조물 측점의 빈 칸은 왼쪽 테두리를 투명 처리해 곡선 L/R 경계가 절토고~곡선 행을 관통해 보이지 않게 한다. 곡선 셀과 일반 값 셀의 행 구분선은 유지한다.

종단 편집 안전장치

최소고 가드는 모든 편집이 통과하는 _Profile_Panel.applyEdits에서 판정한다. 편집 이력은 b05:pipes도 함께 보존해 계획선과 관 위치를 같이 되돌린다.