- `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>
65 lines
6.3 KiB
Markdown
65 lines
6.3 KiB
Markdown
# 검증 보고서: B06 종횡단도(도면) 렌더링 추가
|
|
**검증일**: 2026-07-18
|
|
**검증자**: Antigravity (QA/Verifier)
|
|
|
|
---
|
|
|
|
## 1. 개요
|
|
B06 "종횡단 생성" 단계에서 생성 수치와 파일 경로만 요약 카드로 표시하고 도면이 누락되었던 문제를 개선하기 위해, **0_old 버전의 SVG 기반 종단 및 횡단 도면 렌더링 기능을 이식**하는 작업이 완료되었습니다. 바닐라 TS, 다국어 리소스, 테마 CSS 변수를 준수하며, Y축 스케일 동기화 및 실시간 높이 배율(Vertical Exaggeration) 조절, 종횡단 연계 하이라이트/스크롤 상호작용이 완성도 높게 구현되었음을 검증하였습니다.
|
|
|
|
---
|
|
|
|
## 2. 검증 대상 및 파일별 검증 상세
|
|
|
|
### 📂 백엔드 (Backend)
|
|
1. **[config_system.py](file:///C:/Program_coding/%EC%9E%84%EB%8F%84%EC%84%A4%EA%B3%84%20%EB%B0%8F%20%EA%B2%AC%EC%A0%81%EC%9E%90%EB%8F%99%ED%99%94%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%20%EA%B0%9C%EB%B0%9C/config/config_system.py)**
|
|
- `SECTION_VERTICAL_EXAGGERATION` 설정 변수를 0_old config와 매칭하여 추가(기본값 `1.0`). 환경 변수로부터 오버라이드 지원.
|
|
- **평가**: 설정 누락 없이 안전하게 설정 레이어에 반영됨.
|
|
|
|
2. **[B06_wf3_ProfileCross_Router.py](file:///C:/Program_coding/%EC%9E%84%EB%8F%84%EC%84%A4%EA%B3%84%20%EB%B0%8F%20%EA%B2%AC%EC%A0%81%EC%9E%90%EB%8F%99%ED%99%94%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%20%EA%B0%9C%EB%B0%9C/B06_wf3_ProfileCross/B06_wf3_ProfileCross_Router.py)**
|
|
- **`GET /api/projects/{project_id}/sections/{route_id}/detail`** 신규 라우터 추가.
|
|
- 종단 JSON 파일 정보와 `cross_sections` 하위의 모든 `cross_*.json` 파일을 리스트화하여 하나의 응답(`SectionDetailResponse`)으로 묶어 반환.
|
|
- 파일 탐색 시 프로젝트 내 경로 접근 제어 및 `asyncio.to_thread`를 통한 비동기 파일 입출력(Disk I/O) 최적화 준수.
|
|
- **평가**: 응답 설계가 단순하고 대용량 다중 JSON 처리가 효율적임.
|
|
|
|
3. **[B06_wf3_ProfileCross_Schema.py](file:///C:/Program_coding/%EC%9E%84%EB%8F%84%EC%84%A4%EA%B3%84%20%EB%B0%8F%20%EA%B2%AC%EC%A0%81%EC%9E%90%EB%8F%99%ED%99%94%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%20%EA%B0%9C%EB%B0%9C/B06_wf3_ProfileCross/B06_wf3_ProfileCross_Schema.py)**
|
|
- `SectionDetailResponse` 스키마 정의 및 defaults 스키마 내 `vertical_exaggeration` 필드 보강.
|
|
- **평가**: 과도한 객체 중첩 구조 없이 직관적인 스키마 구조 수립.
|
|
|
|
---
|
|
|
|
### 💻 프론트엔드 (Frontend)
|
|
1. **[B06_wf3_ProfileCross_UI_Section_View.ts](file:///C:/Program_coding/%EC%9E%84%EB%8F%84%EC%84%A4%EA%B3%84%20%EB%B0%8F%20%EA%B2%AC%EC%A0%81%EC%9E%90%EB%8F%99%ED%99%94%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%20%EA%B0%9C%EB%B0%9C/B06_wf3_ProfileCross/B06_wf3_ProfileCross_UI_Section_View.ts) (신규)**
|
|
- **`createLongitudinalProfile`**: 종단 SVG 구현. 측점 클릭 및 접근성 포커싱(`tabIndex=0`, `role="button"`) 핸들링.
|
|
- **`createCrossSectionCard`**: 횡단 십자 마커, 중심선 마킹, 미터 단위 정밀 그리드 렌더링.
|
|
- **Y축 스케일 동기화**: `calculateYScale`을 통한 종/횡단 전체의 동일한 `pixelsPerMeter` 공유 스케일 설계 적용.
|
|
- **높이 배율(Vertical Exaggeration) 반영**: 스무딩 배율 조정 계수를 실시간 연산에 매핑.
|
|
- **평가**: 바닐라 TS 컴포넌트화와 브라우저 호환성을 완벽하게 만족함.
|
|
|
|
2. **[B06_wf3_ProfileCross_Api_Fetch.ts](file:///C:/Program_coding/%EC%9E%84%EB%8F%84%EC%84%A4%EA%B3%84%20%EB%B0%8F%20%EA%B2%AC%EC%A0%81%EC%9E%90%EB%8F%99%ED%99%94%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%20%EA%B0%9C%EB%B0%9C/B06_wf3_ProfileCross/B06_wf3_ProfileCross_Api_Fetch.ts)**
|
|
- `fetchSectionDetail` API 래퍼 및 관련 반환 인덱스 인터페이스 추가 완료.
|
|
|
|
3. **[B06_wf3_ProfileCross_UI_Page.ts](file:///C:/Program_coding/%EC%9E%84%EB%8F%84%EC%84%A4%EA%B3%84%20%EB%B0%8F%20%EA%B2%AC%EC%A0%81%EC%9E%90%EB%8F%99%ED%99%94%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%20%EA%B0%9C%EB%B0%9C/B06_wf3_ProfileCross/B06_wf3_ProfileCross_UI_Page.ts)**
|
|
- 좌측 옵션 영역에 "높이 배율" 입력 필드 추가.
|
|
- `input` 이벤트 리스너를 바인딩하여, 사용자가 배율을 변경할 때 서버 재요청(재생성) 없이 클라이언트에서 SVG 뷰(`sectionView.render`)를 즉시 다시 그려내도록 구현.
|
|
- 결과 렌더링 시 `loadSectionDetail`을 통합하여 자동 생성 완료 혹은 기존 결과 복구 즉시 도면을 바인딩.
|
|
- 종단면도의 측점을 클릭했을 때 해당 횡단면 카드에 빨간색 아웃라인 하이라이트를 주고 `scrollIntoView`를 통해 횡단면 그리드 안에서 자동 스크롤 추적되도록 기능 통합.
|
|
- **평가**: 700줄 제약 범위 내(393줄)에서 상호작용 흐름을 깔끔하게 조율함.
|
|
|
|
4. **[B06_wf3_ProfileCross_UI_Style.css](file:///C:/Program_coding/%EC%9E%84%EB%8F%84%EC%84%A4%EA%B3%84%20%EB%B0%8F%20%EA%B2%AC%EC%A0%81%EC%9E%90%EB%8F%99%ED%99%94%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%20%EA%B0%9C%EB%B0%9C/B06_wf3_ProfileCross/B06_wf3_ProfileCross_UI_Style.css)**
|
|
- 도면 패널, 반응형 그리드(`repeat(2, minmax(0, 1fr))`), selected 상태 하일라이트 테두리(`var(--color-danger)`), 마우스 호버 효과 부여.
|
|
- SVG 세부 요소(그리드 라인, 프로파일 라인, 축 레이블 등)의 `stroke`/`fill` 색상을 모두 theme 변수(`--color-chart-0`, `--color-chart-1` 등)로 대체 적용.
|
|
- **평가**: 디자인 가이드라인에 부합하며 미디어 쿼리를 통한 모바일 대응이 탁월함.
|
|
|
|
5. **[ui_template_locale.ts](file:///C:/Program_coding/%EC%9E%84%EB%8F%84%EC%84%A4%EA%B3%84%20%EB%B0%8F%20%EA%B2%AC%EC%A0%81%EC%9E%90%EB%8F%99%ED%99%94%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%20%EA%B0%9C%EB%B0%9C/ui_template/ui_template_locale.ts)**
|
|
- 높이 배율 라벨, BP/EP 측점 표기명, 축 설명 등 총 20여 개 이상의 한국어/영어 로케일 번역 키가 정상 바인딩됨을 대조.
|
|
|
|
---
|
|
|
|
## 3. 검증 종합 결과
|
|
* **0_old 완벽한 이식**: React 기반 코드를 바닐라 TS로 성공적으로 이식함.
|
|
* **상호작용 품질**: 종단도 측점 클릭 시 횡단도 카드 하이라이트 및 스무스 스크롤 작동 완벽.
|
|
* **실시간 처리 성능**: 높이 배율 조정 시 API 요청 없이 즉각적인 SVG 부분 렌더링으로 쾌적한 UX 제공.
|
|
|
|
**종합 판정**: **PASS (승인)**
|