From 714b30196df969422e0f5a415c2d4a5fd8ee40f0 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Tue, 20 Oct 2026 20:33:01 +0900 Subject: [PATCH] =?UTF-8?q?chore(=EC=A1=B0=EC=82=AC):=20=EC=9A=94=EA=B5=AC?= =?UTF-8?q?=20304=20=EB=B6=84=EC=84=9D=20H=20=E2=80=94=20=EA=B3=84?= =?UTF-8?q?=EC=82=B0=20=EC=9E=90=EB=A6=AC=20=EC=8B=9C=EA=B0=84=20=EC=B8=A1?= =?UTF-8?q?=EC=A0=95=20=C2=B7=20=EB=B3=B4=EC=95=88=20=EB=93=B1=EA=B8=89=20?= =?UTF-8?q?=C2=B7=20=EC=8B=A4=ED=96=89=20=EC=9E=90=EB=A6=AC=20=EC=8A=A4?= =?UTF-8?q?=EC=9C=84=EC=B9=98=20=EC=84=A4=EA=B3=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01AbccG79TsSMUjnGqBq1MUE --- ...2026-10-20_요구304_H_계산자리_시간_보안.md | 238 ++++++++++++++++++ 1 file changed, 238 insertions(+) create mode 100644 docs/raw/조사/2026-10-20_요구304_H_계산자리_시간_보안.md diff --git a/docs/raw/조사/2026-10-20_요구304_H_계산자리_시간_보안.md b/docs/raw/조사/2026-10-20_요구304_H_계산자리_시간_보안.md new file mode 100644 index 000000000..2323691ad --- /dev/null +++ b/docs/raw/조사/2026-10-20_요구304_H_계산자리_시간_보안.md @@ -0,0 +1,238 @@ +# 요구 304-1 (D2) 계산 자리 — 시간 먼저 · 보안 · 스위치 (분석 · 코드 고침 없음) + +- 원문 = `docs/raw/요구_1020/사용자요구_1020.md` 요구 298-5 · 302-2(D2) · 304-1 · 앞 자료 = `2026-10-20_요구298_F_보안_속도.md`(F) · `2026-10-20_요구298_D_노선저장_토스트_메모리.md`(D) 계획고 덮어쓰기 절. +- 기준 = `main_laptop_1` `406556c3b` · 랩탑(ESD_LAPTOP) · Node 22.17 · Python 3.12.7 · 다른 창 병행 중(같은 값 ±30% 흔들림). +- 추정 = 안 잰 값 · 그 밖은 실측. + +## 0. 결론 + +- 계산 자체는 빠름 — B05 · B06 조작 한 번의 TS 셈 = 계획고 ▲ 36~43 ms · 노선 점 놓기 70~82 ms(그중 발자국 그림 자료 25~36 ms). B09 총괄 셈 0.03 ms. +- 서버로 옮기면 붙는 것 = 회선 20~80 ms + **Node 새 프로세스 0.1 s + 자료 넘김 0.1~0.15 s** 또는 **파이썬 짝 6~100 배 느림** → 조작 한 번 0.2~3 s. 「끌면서 0.1 s」 · 「놓고 0.3 s」는 지금 서버 길로 못 맞춤(상주 Node 를 만들면 0.05~0.1 s 가능 · 추정). +- 보안 이득은 계산 자리보다 **S1(개발 서버가 원본 TS · 한글 주석 · 소스맵째 내줌 — 랩탑 메인 5173 에서 확인)** · S2 · S4 가 먼저 — 그대로면 무엇을 서버로 옮겨도 원본이 새어 나감. +- 방향 = **F 의 (d) 섞음 + 스위치판 하나** — B05 · B06 조작 계산 = 「둘 다」(브라우저 미리보기 + [저장] 서버 정본) · 값어치 A(B09 · M01 · M02 · 배분 · 추천 · 배수) = 「서버」 · 도구 · 그림 = 「브라우저」. 스위치는 **빌드 때 값**이어야 보안이 됨(실행 중 값이면 코드가 묶음에 남음). +- D2 계획고 덮어쓰기 = 같은 「옮기기」를 브라우저(TS) · 서버(파이썬 짝)가 각자 하고 둘 다 저장에 씀 — 「코드 두 벌 + 정본 두 곳」 둘 다 원인 → 「[저장] 정본은 늘 서버 한 곳 · 저장 본문은 사용자 입력만」을 구조로 박음. + +## 1. 측정 방법 · 견본 + +| 항목 | 방법 | +|---|---| +| 견본 | `resources/tester/fixtures/golden_472`(검증_랩탑메인 노선 370 사본 · 읽기만) — 노선 1,080 m · 측점 57 · 노드 27 · 관 1 · 구조물 0 · 측점당 지반 표본 81 · 상세 1.45 MB · 격자 2.1 MB. 구조물 0 이라 구조물 셈은 가벼운 쪽 · 측점 수에 거의 비례 | +| 브라우저 근사 | 화면 단계 함수 그대로(472-1 헬퍼 배선 · vite ssr 묶음) Node 한 프로세스 안에서 — 처음 1 + 이어서 4 · 노선 교점 ±1 m 12 번 · 계획고 ▲▼ 0.1 m 12 번 · 따로 잰 셈 4~200 번 중앙값. 그리기 · GC · 메인 스레드 경합 빠짐 → **셈 몫**(340 화면 실측 ▲ 0.06 s · 횡단 그리기 포함 0.21 s 와 맞음) | +| 서버 Node | 서버와 같은 배관(`common_util_node_bundle.run_bundle_json` · 부를 때마다 새 `node` · 임시 JSON) · 묶음은 지금 코드로 tmp 에 새로 지은 사본(config 묶음 안 건드림 · 7 묶음 모두 낡음 상태였음) | +| 서버 파이썬 | 472-1 길(`server_save` = [저장] 재계산 · `server_route` = 노선 저장 체인) · DB 없이 고정 자료 사본 · 단계 함수를 감싸 잼 · 5 번 · 3 번 | +| 회선 | 쿠키 없는 읽기만 — TCP 연결 · 401 창구(DB 안 감) · `/api/health` · 5173 프록시 거친 401 · ping · 20~30 번 중앙값 | +| [저장] · [확정] 실제 | 서버 로그 `[계측]` 줄(`_log_steps`) 모음 — 랩탑 메인 + 서브 1~8 `tmp/server.log` 아홉 · 새로 저장 안 함 | +| 브라우저 실측 | 안 함 — Node 근사가 340 화면 실측과 맞아 꼭 필요하지 않음 | +| 자료 | 스크립트 · 원자료 = `tmp/req304/`(`bench.mjs` · `bench_cross.mjs` · `py_bench.py` · `net.py` · `parse_log.py` · `bench_out*.json` · `py_out*.json`) | + +- 주의 — `localhost` 이름은 IPv6 먼저라 파이썬 클라이언트가 2 s 헛기다림(서버가 IPv4 만 들음) · 브라우저는 영향 없음 · 잴 때는 `127.0.0.1`. +- `/api/health` 는 개발 모드에서 소스 파일을 훑어 130 ms — 회선 값은 401 창구로. + +## 2. 시간 표 + +### 2.1 B05 · B06 조작 — 브라우저 셈(TS · Node 근사 · ms) + +| 단계(등록부 id) | 처음 열기(차가움) | 처음 열기(데워짐) | 노선 점 놓기 | 계획고 ▲ | +|---|---|---|---|---| +| route(R1 · R3) | 0.2 | 0.06 | 0.25 | — | +| follow(P5 · P6 · F1 · F2) | 0.1 | 0 | 2.1 | — | +| stations(R5~R7 · F3) | 2.4 | 1.9 | 1.3 | — | +| ground(G1) | 8.5 | 2.1 | 1.2 | — | +| planline(P1) | 2.8 | 0.4 | 2.3 | — | +| profile(P2~P4 · P8) | 7.0 | 1.9 | 0.9 | 0.8(+ ▲ 셈 `adjustStation` 4.4) | +| cross(C1~C6 · G2 · G4 · F4) | 64 | 31 | 24~27 | 2.1(앞뒤 꼭짓점 범위만) | +| footprint(D4 · 그림 자료) | 72 | 38 | 31~36 | 24~37 | +| **합(벽시계)** | **159~188** | **83~96** | **70~82**(p90 105) | **36~43**(p90 58) | + +| 따로 잰 셈 | ms | +|---|---| +| 횡단 설계선 57 측점(`computeCrossDesign`) | 18~19(처음 45) · 측점당 0.33 | +| 구조물 면적 · 관 길이(F7) | 0.5 | +| 누가토량(E1) | 0.06 | +| 유토 배분(E2 · 서버 정본) | 1.4~1.7 | +| 3D 길 모형(D3) | 168~202 | +| 상세 맞춤(`draftSectionDetail`) | 0.7 | +| B09 총괄 · 원가계산서(`computeTotal` · 시험 엑셀 견본) | 0.02~0.03 | +| 묶음 읽기 · 격자 풀기 | 47 · 0.5 | + +### 2.2 같은 셈을 서버에서 + +| 셈 | 브라우저(TS) | 서버 Node(새 프로세스 · 처음 / 이어서) | 서버 파이썬 짝 | 배수 | +|---|---|---|---|---| +| node 기동만 | — | 52 / 52 ms | — | — | +| 묶음 읽기까지(빈 셈) | — | 93~138 / 90~111 ms | — | — | +| 면적 + 누가토량 + 배분(상세 1.45 MB) | 2.3 ms | 217~228 / 234~268 ms | — | 약 100 배 | +| [저장] 끝 묶음(server-calc · 면적 · 누가토량) | 0.6 ms | 170~209 / 154~165 ms | — | 약 250 배 | +| 횡단 설계선 57 측점 | 18~19 ms | 130~202 / 129~286 ms | 100~173 ms | Node 7~15 · 파이썬 5~9 | +| 노선 · 측점 · 지반 · 첫 계획선 | 4.5~5 ms | — | 0.51~0.60 s(`run_section_generation` · 파일 쓰기 포함) | 약 100 | +| 계획고 편집 적용 · 경고 | 1~2 ms | — | 0.10~0.11 s(파일 읽기 쓰기 포함) · 경고 다시 37~43 ms | 약 50~100 | +| 포장 · 세월교 보정(C3) | (cross 안) | — | 0.23~0.31 s | — | +| 기본 횡단 설계(노선 바뀜) | (cross 안) | — | 0.55~0.68 s | — | +| 3D 길 모형 | 0.17~0.20 s | 0.88~1.1 s(출력 14.6 MB) | — | 약 5 | +| B09 총괄 | 0.03 ms | — | 0.03 ms | 같음 | +| 묶음 낡음 검사(30 s 마다) | — | 35~41 ms | — | — | +| 낡으면 다시 짓기 | — | 0.4~0.5 s + npm 기동 0.74 s | — | — | + +- 서버 Node 한 번 ≈ **고정 0.1 s + 자료 넘김 0.1~0.15 s(1.45 MB · 파이썬 dumps 36 ms · Node 파싱 15 ms · 파일 쓰기 읽기)** + 셈. B05 · B06 셈(2~30 ms)보다 배관이 큼. +- 고정 자료 [저장] 서버 재계산 한 바퀴(DB · 저장 없음) = 0.52~0.80 s · 노선 저장 체인 한 바퀴 = 2.2~3.0 s(브라우저 같은 셈 0.07~0.08 s 의 30~40 배). + +### 2.3 회선 왕복(중앙값) + +| 길 | TCP 연결 | 빈 API(이어 쓴 연결) | 비고 | +|---|---|---|---| +| 랩탑 안(127.0.0.1:8000) | 0.4 ms | 0.9 ms | | +| 랩탑 안 5173 프록시 | — | 2.9 ms | 화면이 쓰는 길 | +| 랩탑 → 데스크탑 임시 배포 5173 프록시(Tailscale) | — | **23 ms**(최소 19) | 화면이 쓰는 길 · ping 10 ms | +| 랩탑 → 데스크탑 8000 바로 | 10.6 ms | 76 ms(최소 61) | 응답 머리 · 몸 따로 보냄 + 지연 응답(추정) · 화면은 이 길 안 씀 | +| 요청마다 세션 확인(DB 왕복) | — | 13.6 ms | 09-07 지난 값 | +| 바깥 회선(사용자 사무실 · 4G) | — | 30~80 ms | 추정 · 안 잼 | + +### 2.4 [저장] · [확정] 실제(서버 로그 `[계측]` · 아홉 로그) + +| 창구 | n | 중앙 | p90 | 단계 중앙 | +|---|---|---|---|---| +| [저장] 서버 재계산 내부 | 661 | 1.6 s | 3.1 s | 정본 저장 0.7 · Node 묶음(면적 · 유토곡선) 0.2 · 포장 · 세월교 보정 0.2 · 상세 + DB 조회 0.2 · 종단 선형 0.1 | +| B06 [확정] | 227 | 4.0 s | 6.3 s | 서버 재계산 1.8 · 3D 서버 짓기 1.2 · 확정 저장 0.7 · 조회 0.2 · 측구 방향 역반영 0.2 | +| 노선 바뀐 [저장](재확정 체인) | 148 | 10.5 s | 16.4 s | B06 확정 · 재계산 · 3D 4.2 · 노선 풀기 · 구조물 따라감 1.9 · 종횡단 1.6 · 횡단 이월 1.2 · 계획고 옮김 0.6 · 관 따라감 0.6 | +| 노선 [확인] 재계산 | 190 | 14.2 s | 89.7 s | 배수유역 다시 셀 때 큼 | +| 배수유역 분석 내부 | 55 | 58 s | 101 s | 유역 산정 54 s | + +- 셈보다 **정본 저장 · DB · 3D · 배수유역**이 큼 — [저장]을 서버 정본으로 두는 값(1~4 s)은 이미 치르는 중 · 셈 자리를 바꿔도 [저장] 시간은 거의 그대로. + +### 2.5 서버로 옮기면 조작 한 번(추정 = 위 값 더함) + +| 조작 | 목표(09-07) | 지금 브라우저 | 서버 파이썬 | 서버 Node 새 프로세스 | 상주 Node(추정) | +|---|---|---|---|---|---| +| 노선 점 끌기 한 걸음 | 0.1 s | 3~5 ms(340) | 불가 | 불가 | 회선 + 1 ms(노선 선만) | +| 노선 점 놓기 → 종단 · 횡단 | 0.3 s | 0.07~0.08 s | 2.2~3.0 s | 0.4~0.6 s | 0.05~0.13 s | +| 계획고 ▲ 한 번 | 0.1 s(반응) · 0.3 s | 0.04 s | 0.15~0.3 s + 회선 | 0.25~0.4 s | 0.03~0.09 s | +| 횡단 카드 칸 고침 | 0.3 s | 0.07 s(340) | 0.05~0.1 s + 회선 | 0.2~0.3 s | 0.03~0.09 s | +| B08 · B09 · M02 칸 고침 | 1 s | < 1 ms | 회선 + 세션 14 ms + 자료 읽기(못 잼) | — | — | + +- B09 전체 셈(GET 한 바퀴) = 못 잼 — B09 자료가 있는 프로젝트가 storage 에 없음 · 로그인 POST 금지. + +## 3. 보안 등급 표 + +- 등급 — **A** 영업 핵심(원가 · 단가 · 마스터 · 노하우 엔진) · **B** 설계 기술 규칙(사용자: B05 · B06 에도 있음) · **C** 일반 기하 · 공개 기준 · 그림 · 입력 도구. 등급은 제안 · 정함은 사용자. +- 위조 = [저장] 때 서버가 다시 세는지. + +| 묶음 · id | 등급(제안) | 지금 브라우저 묶음 | [저장] 서버 다시 셈 | 이어지는 F 빈틈 | +|---|---|---|---|---| +| B09 바탕단가 · 일위대가 · 내역 · 원가 요율(Calc_Base · Labor · Bill · Total) | A | 식 + 요율 압축표 실림 | 예(사용자 값만 저장) · **인쇄물은 아니오** | S5 · S6 | +| M01 단가 로직 · M02 일위대가 · 실무호표 | A | 결과만 | 예 | **S2(로그인만 통째 읽음)** · **S3(오라클)** | +| M02 흐름도 · 면적 시트 · 표 수식 엔진 | A | 엔진 실림 | 흐름 · 면적 · 표 예 · 프로젝트 층 양식 셋 받은 그대로 | S5 · S6 | +| 유토 배분 · 운반거리(E2) | A | 안 실림(`import type`) | 서버 단독 | — | +| 노선 추천(N1) · 배수유역 · 관 자리(D1 · D2) · 넓힘(G3) | A | 결과만 | 서버 단독 | — | +| B08 자재 3표 · 배합 · 할증 · 운반 사이클 | B~A | 실림 | 예 | S5 | +| 구조물 수량 규칙 — 관 세트 · 벽 · 면적 · 터파기(F5~F8) | B | 실림 | 예 · 세월교 높이(F9)는 **입력 그대로** | S6 | +| 종단 규칙 — 첫 계획선 · 곡선 법칙 · 직선 · 옮김 · 세움 · 경고(P1~P6 · P8) | B | 실림 | 예 · **P5 계획고 옮김은 두 곳이 씀(D2 흠)** | — | +| 횡단 규칙 — 설계선 · 면적 · 보정 · 소단 · 맹암거 · 미교차 넓힘 · 상단측(C1~C6 · G2 · G4 · F4) | B | 실림 | 예 · 면적 = 서버 셈만 | — | +| 노선 곡선 · 노드 규칙 · 측점 · 열쇠 · 지반 표본 · 따라감(R1 · R3 · R5~R7 · G1 · F1~F3 · F10 · R9) | C | 실림 | 예 | — | +| 누가토량(E1 · 평균단면법 + 환산계수) | C | 실림 | 예 | — | +| 3D(D3) · 발자국(D4) · 입력 도구(R2 · R4 · R8 · P7 · C7) | C | 실림 | 3D 서버 지음 · 발자국 서버 정본 없음(B07 파이썬 따로) · 도구 해당 없음 | — | + +- 바탕 빈틈(계산 자리와 무관 · 먼저 막아야 위 표가 뜻을 가짐): + - **S1** — 랩탑 메인 5173 `/../B09_Estimation/B09_Estimation_Calc_Total.ts` · `/../common_util/common_util_cross_design.ts` 둘 다 200 · 원본 TS · 한글 주석 · 인라인 소스맵(이번 확인 · 내 서버만). 임시 배포(데스크탑 5173)는 같은 설정이라 같을 것(추정 · 안 잼). storage 가 같은 길로 열리는지는 안 잼(F 결정 4 허락 뒤). + - **S2 · S4** — 로그인만으로 A 등급 마스터 읽음 · 남의 프로젝트 표제란. 서버로 옮긴 A 등급도 이 길로 새면 소용 없음. + - **S3** — 단가 오라클(입력 바꿔 결과 긁기) — A 를 서버 단독으로 해도 남음 · 호출 상한(F 결정 8)이 짝. + +## 4. 스위치 설계 + +### 4.1 꼴 — 스위치판 한 곳 · 값 셋 + +| 값 | 뜻 | 브라우저 묶음 | 조작 중 | [저장] 정본 | +|---|---|---|---|---| +| `both` | 브라우저 미리보기 + 서버 정본 | 실림 | 브라우저 즉시 | 서버 다시 셈 | +| `server` | 서버만 | **안 실림**(빌드에서 빠짐) | 서버에 물음(「계산 중」 · 최신만 · 옛 요청 끊기) | 서버 | +| `browser` | 브라우저만 | 실림 | 브라우저 | 없음(입력 도구 · 그림) | + +- 자리 = 등록부 `site` 칸(`design_calc_registry.ts` · `_facility.ts` 45 id) — 지금은 기록 · 시험용 4 값 → 위 3 값 + `fixed`(못 옮김: GIS · 래스터 · 추천 · 입력 도구) 표. +- 파이썬도 같은 판을 읽게 — 등록부에서 `id → site · runner` 만 뽑은 JSON 한 벌(빌드 때 생성 · 시험이 등록부와 같은지 봄) · 화면 · 서버가 그 한 벌만 봄. +- **두 겹**: + - 빌드 스위치(보안) — `server` 인 id 의 TS 를 브라우저 묶음에서 뺌. vite `define` 상수로 단계 공장이 가지를 고르고 로컬 쪽은 dynamic import → 죽은 가지 걷힘. 실행 중 값으로만 고르면 코드가 묶음에 남아 보안 이득 0. 바꾸면 다시 지어 배포. + - 실행 자리(속도 · 검산) — `both` 안에서 미리보기 끄기 · 켜기는 실행 중 값으로도 됨(개발 · 측정용). +- 시험 — 운영 묶음(`config/node_modules/.build`)에 `server` id 의 함수 · 속성 이름 · 상수가 없음 · 등록부 = JSON 판 같음 · `both` id 는 거울 시험 있음. + +### 4.2 지금 코드에서 바꿀 자리 + +| 자리 | 지금 | 바꿈 | +|---|---|---| +| 화면 단계 묶음 `A00_Common/design/design_pipeline_page.ts`(route~footprint 8 단계) | 단계 함수를 바로 import | 단계 공장마다 `local` · `remote` 둘을 받고 판 값으로 고름 — 선례 = ground `remote`(`B05_Profile/logic/B05_Profile_Pipeline_RouteGround.ts:100`) · cross `savedCross`(`design_pipeline_page.ts:354`) · 배분 `B05_Profile_Api_HaulPlan.ts`(`import type` 로 묶음 밖) | +| 스위치 단위 | — | **단계**(한 단계가 여러 id 를 한 번에 셈 — cross = C1 C2 C3 C5 C6 G2 G4 F4) · 단계 밖 id(E1 · E2 · F5~F8 · D3 · B08 · B09 · M02 칸)는 부르는 자리마다 | +| 서버 실행기 `common_util/common_util_calc_runner.py` | `NODE_IDS` 박음 · 파이썬 짝은 부르는 곳이 직접 import | 판의 `runner` 를 보고 node · py 고름 — 부르는 곳은 `run_calc(id)` 하나로 | +| 서버 창구 | 배분 `/haul-plan` 하나 | `server` 단계용 `/api/projects/{id}/calc/{stage}` — 본문 = 사용자 입력 + 초안 · 정본 자료는 서버가 붙임 | +| Node 배관 `common_util_node_bundle.py` | 부를 때마다 새 프로세스 | 조작 중 `server` 가 생기면 상주 Node 필요(고정 0.1 s + 자료 0.1~0.15 s 가 셈보다 큼) · 9-07 「안 함」 다시 판단 | +| 저장 본문 `design_save.ts` · `B06_Section_Router_DesignSave.py` | 계획고 초안 = follow 가 옮긴 값 통째 | 4.4 | + +### 4.3 파이썬으로만 있는 계산 · 짝 + +| 갈래 | id | 스위치로 고를 수 있나 | +|---|---|---| +| ② TS 한 벌 · 서버 Node | R9 · P6 · C1 · C2 · C4 · C5 · F1 · F2 · F7 · F8 · F10 · E1 · E2 · D3(14) | 예 — 지금도 고를 수 있는 꼴 | +| ① 짝 · 472-4 동안 서버 = 파이썬 | R1 · R3 · R5 · R6 · R7 · G1 · G2 · G4 · P1~P5 · P8 · C3 · C6 · F3 · F4(18) | **아니오** — 서버가 다른 코드를 돎 · TS 한 벌로 옮긴 뒤(472-4)에만 참 | +| ① 짝 유지(파이썬 소비자 B04 · B07 · B08) | F5 · F6 · F9(3) | 아니오 — 서버 정본은 파이썬 · TS 는 미리보기 | +| ③ 서버 단독 | D1 · D2 · G3 · N1 · B07 도면 · B08 토적 · B09 산근 · 집계 · M01 · M02 셈 | 고정 `server` — GIS · 래스터 라이브러리 · 값어치 · 브라우저로 안 옮김 | +| ① 짝 · B08 · B09 · M02 칸 셈 | B09 Calc_* · B08 Material_Calc · Haul_Cycle · M02 DF_Eval | `server` 로 고르면 **파이썬 한 벌로 충분**(TS 걷음 · 옮길 필요 없음) | + +### 4.4 「[저장] 정본은 늘 서버 한 곳」 — 구조로 막기 + +- 규칙 — `browser` 아닌 모든 id 의 정본 = 서버 · 저장 본문 = **사용자 입력(`input.*`)과 초안 동안 사용자가 손댄 것만** · 단계 출력 · 따라감이 고친 값은 안 보냄 · 서버 꼴(Pydantic)도 파생 칸을 안 받음. +- 지금 흠(D2) — follow 단계가 옮긴 계획고를 입력 칸(`input.alignment`)에 되씀(`FOLLOW_KEYS` · `design_pipeline.ts`) → 저장 본문에 실림 → 서버 노선 저장이 이미 옮긴 계획고(`_carry_profile` · 파이썬 `carry_edits`) 위를 덮음 → 서버 측점과 어긋난 키 버림. 브라우저 TS `carryEdits` · 서버 파이썬 `carry_edits` = 코드도 두 벌. +- 막는 꼴: + 1. follow 출력은 출력 칸에만 · 입력 칸은 사용자 값만(뒤 단계는 `follow ?? input` 을 읽음). + 2. 노선 바뀐 저장 = 관 · 구조물처럼(`rebasePipeDraft` · F10) 계획고도 「서버 옮김 위에 사용자 손댐만 다시 얹기」 — D 보고 고칠 자리 6 과 같은 뜻. + 3. 시험 — 저장 본문 칸마다 등록부 `input.*` 하나에 닿음 · 출력 id 가 본문에 들어가면 실패. + +### 4.5 서버로 옮기면 「조작 응답 — 네트워크 왕복 금지 · 즉시」(CLAUDE.md 5장)와 부딪히는 것 + +| 부딪힘 | id | 까닭 | +|---|---|---| +| 끌기 중(0.1 s) | R1 · R3 · F1 · F2 · P5 · P6 | 끄는 걸음마다 | +| 놓기 · ▲ · 횡단 고침(0.3 s) | R5~R7 · F3 · G1 · P1~P4 · P8 · C1~C6 · G2 · G4 · F4 · F5 · F6 · F7 · E1 | 종단 · 횡단 · 유토곡선 즉시 다시 그림 | +| 그림 · 도구 | D4 · R2 · R4 · R8 · P7 · C7 | 화면 자체 | +| 안 부딪힘 | E2 · D1 · D2 · G3 · N1 · D3(뒤 · 워커) · R9 · F10(저장 때) · F8 · F9 · B08 · B09 · M02 칸(목표 1 s · 왕복 허용 · 선례 M01 쉬운단가 0.3 s) | | + +- B 등급(B05 · B06 규칙)을 `server` 로 하려면 5장 「조작 중 브라우저 즉시」를 「상주 Node 로 놓고 0.1 s」로 바꿔야 함 — 지침 고침 + 상주 Node 공사. + +## 5. 계산마다 추천 자리 + +| 묶음 · id | 브라우저 셈 | 서버 길(지금) | 등급 | 지금 | 추천 | 비고 | +|---|---|---|---|---|---|---| +| 노선 R1 · R3 | 0.1~0.3 ms | 파이썬 0.5~0.6 s(측점 · 지반 함께) | C | both | **both** | 472-4 로 Node | +| 측점 R5~R7 · F3 | 1.3~1.9 ms | 위에 포함 | C | both | **both** | 472-4 | +| 지반 G1 | 1.2~2.1 ms | 표본기 22 ms + 위 | C | both | **both** | 격자 받음 2.1 MB | +| 첫 계획선 P1 | 0.4~2.3 ms | 위에 포함 | B | both | **both**(결정 1) | | +| 계획선 · 법칙 · 직선 · 경고 P2~P4 · P8 | 0.8~1.9 ms(+ ▲ 4.4) | 파이썬 0.10~0.11 s · 경고 37~43 ms | B | both | **both**(결정 1) | X5 기준표 두 벌 정리 | +| 따라감 · 옮김 · 세움 P5 · P6 · F1 · F2 | 0~2.1 ms | P5 파이썬 · 나머지 Node 0.1 s+ | B · C | both | **both + 정본 한 곳(4.4)** | D2 흠 먼저 | +| 횡단 C1~C6 · G2 · G4 · F4 | 전 측점 24~31 · 범위 2 ms | Node 0.13~0.29 s · 파이썬 0.10~0.17 s | B | both | **both**(결정 1) | 472-4 ② 계속 | +| 구조물 F5~F8 | 0.5 ms | server-calc 0.15 s | B | both | **both**(결정 2 면 server) | F9 세월교 = 서버 다시 셈으로 | +| 누가토량 E1 | 0.06 ms | Node 포함 | C | both | **both** | | +| 유토 배분 E2 | 1.4~1.7 ms | Node 0.22~0.27 s | A | server | **server** | 그대로 | +| 3D D3 | 0.17~0.20 s | Node 0.9~1.1 s | C | both | **both**(뒤 · 워커) | | +| 발자국 D4 | 25~36 ms | 없음 | C | browser | **browser** | 조작마다 가장 큰 몫 — 속도 따로(350-1) | +| 이월 · 다시 얹기 R9 · F10 | 저장 때 | Node | C | both | **both** | | +| 입력 도구 R2 · R4 · R8 · P7 · C7 | — | — | C | browser | **browser** | | +| 배수 · 넓힘 · 추천 D1 · D2 · G3 · N1 | — | 파이썬 3~110 s | A | server | **server(고정)** | | +| B08 자재 3표 · 할증 · 운반 사이클 | < 1 ms(추정) | 파이썬(GET · PUT 셈) | B~A | both | **server**(결정 2) | TS 걷음 | +| B09 바탕단가 · 일위대가 · 내역 · 요율 | 0.03 ms(총괄) | 파이썬 0.03 ms(총괄) | A | both | **server** | TS · 요율 압축표 걷음 · 인쇄 = 서버 정본 | +| M02 흐름도 · 면적 시트 · 표 수식 | 못 잼 | Node · 파이썬 | A | both | **server** | 관리자 화면 반응 1 s 확인 | + +## 6. 방향 · 차례 + +- 한 줄 — **「B05 · B06 조작 = both · 값어치 A = server · 그림 · 도구 = browser」를 등록부 한 칸(빌드 스위치)으로 고르고, 그 앞에 원본이 새는 길(S1 · S2 · S4)부터 막음.** + +| 차례 | 할 일 | 고칠 양 | 이득 | +|---|---|---|---| +| 1 | S1 — 임시 배포 = 운영 묶음 · 5173 바깥 안 엶(전역 깃 싱크 때) | 작음(설정) | 원본 · 주석 · 소스맵 노출 닫힘 · 이것 없이 2~5 는 뜻 없음 | +| 2 | S2 · S4 — 마스터 길 · 쿼리 project_id 길 권한 | 작음(창구 몇) | A 등급 마스터 · 남의 표제란 | +| 3 | D2 정본 한 곳(4.4) — follow 출력 분리 · 계획고 다시 얹기 · 본문 시험 | 작음~중간 | 계획고 버림 흠 · 같은 꼴 흠을 구조로 막음 | +| 4 | 스위치판 — `site` 3 값 + JSON 한 벌 + vite 상수 + 단계 공장 local · remote + 운영 묶음 검사 시험 | 중간 | 요구 273 · 304 「한 곳에서 고름」 | +| 5 | B09 → B08 → M02 = server(TS 걷음 · 칸 고침 = 요청 · 「계산 중」) | 중간 | A 등급 식 · 요율 걷힘 · 속도 손해 = 칸마다 회선 + 서버 셈(목표 1 s 안 · 추정) | +| 6 | 472-4 짝 모으기(18 id) 계속 | 큼(진행 중) | 서버 · 화면 같은 코드 → 스위치가 참 | +| 7 | (결정 1 이 「숨김」 일 때만) B 등급 server + 상주 Node + 5장 지침 고침 | 큼 | B05 · B06 규칙 숨김 · 놓고 0.05~0.13 s(추정) · 끌기 중엔 노선 선만 | + +## 사용자 결정 필요 + +1. **B05 · B06 설계 기술 규칙(B 등급 — 종단 규칙 · 횡단 규칙 · 구조물 수량 규칙)** — (가) 지금처럼 브라우저 즉시 + 서버 정본(빠름 · 운영 묶음 안에서 읽힘) (나) 서버 숨김(상주 Node 공사 · 놓고 0.05~0.13 s 추정 · 회선 나쁘면 0.1~0.3 s · 끌기 중 미리보기는 노선 선만). +2. **구조물 수량 규칙(F5~F8) · B08 자재**를 A 로 볼지 — A 면 B08 과 함께 server(B05 · B06 조작 중 구조물 면적 · 관 길이 미리보기가 회선 뒤로). +3. **스위치 바꾸는 때** — 빌드 스위치만(보안 · 바꾸면 다시 지어 배포) · 실행 중 바꾸기도 둘지(측정 · 개발용 · 보안 이득 없음).