Files
Aislo/docs/raw/verification/2026-07-22_verify_B06_B07.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

4.8 KiB

Verification Report: B06/B07 Interaction Performance and CAD Design Layer

  • 검증 대상: B06 횡단 설계 상호작용 성능 개선 & B07 CAD 계획선 레이어
  • 검증 일자: 2026-07-22
  • 검증 판정: PASS (실무 적합성 및 성능/기능 요구사항 충족)

1. 검증 개요

B06 단계의 횡단 카드 렌더링 성능 저하(서버 왕복 지연 및 전체 재렌더로 인한 측점 반응성 저하)를 해결하고, B07 CAD 상세 설계 화면에 계획선(계획 종단선 및 횡단 설계선)이 노출되지 않던 문제를 해결하기 위해 최근 수정된 코드를 정밀 검증하였습니다.


2. 세부 검증 내용

A. B06 횡단 설계 상호작용 성능 개선

  1. 단건 카드 Surgical 갱신 (refreshCard)
    • 프론트엔드 구현: B06_wf3_ProfileCross_UI_Section_View.ts 내에 refreshCard 함수를 신설하여, 전체 다시 그리기(draw())를 수행하지 않고 변경된 측점의 카드 노드만 replaceWith로 교체하는 Surgical Update를 구현하였습니다.
    • 효과: 200+ 측점이 존재하는 상황에서도 전체 렌더링 부하 없이 클릭 즉시 대상 카드만 교체되므로 렌더링 성능이 비약적으로 향상되었습니다.
  2. 로컬 UI 선반영 및 비동기 결과 경합 가드 (designRequestSeq)
    • 프론트엔드 구현: B06_wf3_ProfileCross_UI_Page.ts에서 버튼 클릭 즉시 로컬 상태를 변경하여 해당 카드를 즉각 교체하는 로컬 피드백을 구현하였습니다.
    • 경합 가드: designRequestSeq Map을 활용하여 비동기 응답 도착 시 요청 시퀀스(seq)를 대조하고, 이전 요청의 응답(느린 응답)은 폐기하는 최신성 가드가 안전하게 적용되었습니다.
  3. 미지정 측점 자동 채움 및 프리뷰
    • 백엔드 구현: B06_wf3_ProfileCross_Router.pyget_section_detail API에서 지정 설계가 없는 측점은 즉석에서 _attach_default_designs를 돌려 토사/좌절토 기준의 프리뷰 설계 데이터를 첨부합니다.
    • 확정 시점 일괄 저장: confirm_sections API에서 미지정 측점 목록(get_cross_sections_missing_design_chainages)을 받아와 기본값 계산 후 확정 전에 일괄 DB 저장하도록 처리되어 설계 누락을 원천 차단합니다.

B. B07 CAD 계획선 레이어 추가

  1. 계획선 레이어 b07-design 추가 및 ID 충돌 예방
    • 백엔드 구현: _cad_drawing 헬퍼에서 지반선(b07-ground) 외에 계획선(b07-design)을 별도 레이어의 PolyLine으로 변환해 emit하도록 확장하였습니다.
    • UUID 충돌 예방: 자식 Line entity 생성 시 layer_id를 seed 문자열에 추가 포함(_line_entityuuid5 생성자)하여, 지반선과 계획선의 entity ID가 중독되어 렌더러에서 유실되던 현상을 방지했습니다.
  2. 계획선 편집 허용 (잠금 해제)
    • 백엔드 구현: layers 정의 시 계획선(b07-design) 레이어의 isLocked: false로 설정하여 실무자가 라이브러리 구조물 부착 및 선 트림 편집을 행할 수 있도록 실무 요구사항을 완벽히 맞추었습니다.
  3. 횡단도 계획선 동적 파생
    • 백엔드 구현: 확정된 설계가 DB에 아직 없는 경우에도 _cross_design_line을 통해 즉석에서 기본 설계를 계산해 도면에 반영함으로써 B07 초기 진입 시 계획선이 누락되는 현상을 방지하였습니다.

3. 코드 적합성 평가

  • FastAPI 비동기 최적화: 파일 I/O 및 대량 수학 계산이 포함되는 _attach_default_designs, _compute_default_designs, _cad_drawing 등의 CPU 바운드 작업을 asyncio.to_thread를 사용하여 이벤트 루프 블로킹 없이 처리하였습니다.
  • 수학적 무결성: B06_wf3_ProfileCross_Engine_Design.py에서 절·성토 단면적 산출 시 영교점(부호 전환점)을 엄밀히 분할하여 사다리꼴 적분(_trapezoid_areas)을 하므로 토공량 왜곡이 발생하지 않습니다.
  • Surgical Edit 원칙 준수: 주변 라이브러리나 스펙 이외의 부분을 건드리지 않고 성능 개선 및 레이어 바인딩을 위한 최소 코드로만 정교하게 작성되었습니다.

4. 최종 판정 및 조치

  • 검증 판정: PASS
  • 조치 사항:
    1. 검증이 완료된 B06 횡단 설계 상호작용 성능 개선 + B07 CAD 계획선 레이어 계획은 docs/raw/PLAN.md에서 삭제하고 docs/raw/plans/2026-07-22_plan_B06_B07.md로 아카이브 이관합니다.
    2. 사용자의 명시적 지침("그래프파이, 인제스트, 린트는 너의 역할이 아니야")에 따라, graphify update ., 위키 인제스트 및 위키 린트 작업은 수행하지 않고 검증 작업을 완료합니다.