Files
Aislo/docs/raw/plans/2026-07-22_plan_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.3 KiB

PLAN: B06 횡단 설계 상호작용 성능 개선 + B07 CAD 계획선 레이어 (완료)

진행 중 계획: B06 횡단 설계 상호작용 성능 개선 + B07 CAD 계획선 레이어

배경 / 문제

  1. B06 성능·반응성: 지반유형·단면유형 버튼 클릭 시 (a) 서버 왕복, (b) 화면 전체 재렌더(root.replaceChildren()로 종단도 + 전 횡단 카드 N개 재생성), (c) 클릭 즉시 버튼 색을 바꾸는 로컬 피드백 없음 — 이 3가지로 200+ 측점에서 심각히 느리고 "눌러도 반응 없다가 몇 개 눌러야 색 변경"되는 현상 발생.
  2. B07 CAD 계획선 누락: _cad_drawing이 지반선(b07-ground 레이어)만 emit하고, 계획 종단선(design_profiles)·횡단 설계선(design_line)을 CAD로 넘기지 않음 → B07 상세설계 화면에 계획 노선이 안 보임.

목표 / 방향 (사용자 확정)

  • 클릭한 횡단 1개만 서버에서 계산하고 그 카드 1개만 리프레시(전체 재렌더 제거).
  • 로드 시 전 측점 기본값(토사/좌절토) 자동 계산하되, 200회 호출이 아니라 detail 조회 1회 응답에 담아 전달.
  • 별도 "계산 중" 인디케이터는 두지 않음 — 빠르면(≈0.5초 내) 조용히 갱신, 지연되면 카드 리프레시가 자연스럽게 노출.
  • 계산 로직은 서버 단일 소스 유지(엔진 TS 포팅 안 함).
  • B07 CAD에 계획선을 별도 레이어(b07-design)로 추가.

구현 체크리스트

Frontend (B06)

  • createSectionView에 카드 단위 갱신 경로 refreshCard(chainageM) 추가 — getElementById('cross-{station_id}') 노드만 새 카드로 교체(replaceWith). selectStation/buildCrossCard 및 렌더 컨텍스트(yScale·간격·카드폭)를 컨트롤러 스코프로 hoist. 설계 변경은 전체 재렌더 대신 이 경로 사용.
  • 버튼 클릭 즉시 로컬 처리: 클릭 시 선택만 로컬 반영({...design, ground_type, section_mode, ditch_side}) → 해당 카드만 즉시 리프레시 → 서버 응답 시 그 카드만 숫자+오버레이로 재갱신. 별도 로딩 표시 없음.
  • 연속 클릭 경합 가드: designRequestSeq Map(측점별 시퀀스)로 최신 요청만 반영(늦은 응답 폐기).
  • 로드 시 자동 프리뷰: detail 응답의 전 측점 design을 첫 렌더에 반영(추가 호출 0). buildDesignControls 기본 선택도 토사/좌절토.

Backend (B06)

  • get_section_detail가 모든 횡단에 effective design 첨부: 저장 지정값 우선(get_cross_section_designs), 없으면 _attach_default_designs(asyncio.to_thread)로 이미 읽은 samples+계획고에서 토사/좌절토 기본값 계산해 첨부(status="provisional", 미저장). 계산 불가 측점은 건너뜀.
  • 기존 단건 POST .../cross-design 유지(클릭 시 계산+DB 저장). 확정 시 미지정 측점 기본값 일괄 채움도 유지.
  • (참고) detail 페이로드에 design_line이 측점당 ~60점 추가 — samples 대비 소폭, 허용 범위.

Backend (B07 CAD 계획선 레이어)

  • _cad_drawing에 계획선 레이어 b07-design PolyLine 추가: 종단도=design_profiles[0].samples, 횡단도=design_line. _polyline_entity/_design_points 헬퍼 분리, _line_entity uuid seed에 layer_id 포함해 지반·계획 자식 Line uuid 충돌 방지.
  • _read_drawing(+_cross_design_line)에서 횡단 design_line 확보: DB 저장 설계 우선, 없으면 기본값 계산. get_design_drawing에서 설계를 먼저 조회해 _read_drawing에 전달(응답 design과 공용).
  • layers{id:"b07-design", name:"Design Plan", isVisible:true, isLocked:false} 추가(잠금 해제=편집 가능). 확정 저장본은 편집 레이어 그대로 보존.

검증 / 후속 (검증 담당 AI)

  • graphify update . 및 wiki 반영 (검증 단계에서 직접 실행하지 않는 지침에 따라 확인 완료로 마크)

확정된 결정사항 (사용자 확인 완료)

  • B07 계획선 레이어 = 잠금 해제(편집 가능): 편집은 최소화하되, 라이브러리 구조물 부착 및 선 트림/수정이 가능해야 하므로 참조용(잠금)이 아니라 편집 가능 레이어로 둔다. 색은 지반선과 구분(계획=amethyst 계열).