26.8.17(월) 세션 — PNCAD PFS 편입 · 운영배포 + GitHub 보존
논의·대안
직전 세션이 남긴 1순위 = PNCAD(포인캐드)를 PFS 하위 생산 프로그램으로 편입하고 운영 배포. 페페 지시 원문 = "PFS 사이드 메뉴 생산 그룹에 포함시켜. 첫번째 항목으로 링크 생성. 운영 배포 진행."
착수 전 그릴링 1문(화면 구성) = ①PFS 사이드바 유지 iframe ②전체화면 ③새 탭 → 페페 택 = ③ 새 탭. PNCAD는 3열(카탈로그 466px + 3D 뷰포트 + 속성 패널) 전체화면 CAD라 PFS 사이드바와 폭을 나눠 쓰면 작업 공간이 죽는다. 새 탭이면 PFS 탭이 제자리에 남아 현장 목록을 보며 배치하는 실무 흐름에도 맞는다.
자산 배치는 코디 판단(설계 결정 아님, 관례 문제)으로 정했다 — 대안 2개였다.
①PFS 리포로 완전 이전(단일 출처) ②C:\dev\pncad 유지 + 동기화 스크립트.
②를 택했다: convert.mjs·verify.mjs(S7 대조 50.6%)가 schema.js를 import 하며 pncad 리포에서
계속 돈다. 지금 쪼개면 S7 잔여 작업 루프가 끊긴다.
결정
- 경로 =
/production/pncad/(끝 슬래시 필수 —app.html이./schema.js·data/*.json을 상대경로로 불러서, 슬래시가 없으면/production/schema.js로 새어 404 난다). - 자산은
web/pncad/—web/static/밑이면 안 된다. 정적 폴더는 로그인 없이 열려서 현장목록(1,988건)·카탈로그·CP 마스터가 그대로 샌다.send_from_directory+@login_required로 서빙. - Jinja를 태우지 않는다 —
render_template대신 파일 그대로. app.html 안 JS 템플릿 문법 보호. - 현장목록 = PFS 안에서는
/api/field/라이브(같은 오리진·세션 그대로), 단독 실행(8799)이면 스냅샷data/fields.json자동 폴백. 스냅샷 갱신을 사람이 기억할 필요가 없어졌다. - 사이드바
target="_blank"는 base.html 한 줄 조건(url_path == '/production/pncad/'). - 메뉴행은
display_order 445(생산 그룹 450, 스티커 출력 451보다 앞 = 첫 항목). 권한행은 만들지 않는다 — 자사(company_type='1')는 명시 row 없으면 신규 메뉴 자동 허용, 업체 계정은 기본 차단이 맞다(생산 프로그램).
산출물·커밋
pfsmaster1fcc06b→ deploy-liveeda0893(8파일 선별 포워드, 딸려간 미반영 커밋 0 — diff가 정확히 이번 변경분뿐임을 확인). 운영 DB 쓰기 =menu_catalog1행.pncadmasterd2a1cd9— app.html 라이브 현장목록 +tools/sync_to_pfs.py(--check로 어긋남 검사).- GitHub 보존 완료 —
delix0731/PNCAD(Private) 394파일 push. 재발급 PAT(C:\dev\.secrets\.envGITHUB_TOKEN)로 인증 확인. 리포는 페페가 이미 만들어 둬서 생성은 422(이름 중복)로 스킵. pfs/scripts/_pncad_menu_prod.py(gitignorescripts/_*— SSM으로 EC2에서 실행).- devplan
pncad-roadmap.htmlS8 절 갱신 + 허브 카드site를 PFS 운영 URL로 교체.
검증(테스트 8001 → 운영 pfs.poin.co.kr 동일 3건 재실행, 전부 PASS)
- 사이드바 = 생산 그룹 1번 PNCAD /production/pncad/ target=_blank, 2번 스티커 출력.
- 앱 로드 = 카탈로그 165종(그리드 166) · 트리 299노드 · 콘솔 에러 0 · 현장목록 src=live
(테스트 1,973건 / 운영 1,988건, data/fields.json 요청 0 = 스냅샷을 안 탄다).
- 비로그인 = 페이지·schema.js·data/fields.json 전부 로그인 페이지 반환, 데이터 유출 0.
/static/pncad/... 우회 = 404.
- 사이트맵 재빌드 = 그룹 8 · 페이지 53 · 미반영 0 · PNCAD state=same·menu_in_live=true.
- 검증 스크립트 = scratchpad pncad_check.py(로드·현장소스) · pncad_menu_check.py(사이드바 순서·target).
2차 — 작업본 서버 저장 (같은 세션, 페페 지적 후속)
페페 지적 = "기존 작업분 로드에 대한 프로세스가 안 보인다. 상단바에 저장되었음 텍스트가 있으면 좋겠다. JSON 현장저장은 남겨두되 기본은 단순 저장버튼으로 DB 또는 미니PC 저장소에서 자동 관리."
그릴링 2문 → 페페 결정 ①저장소 = PFS DB 1테이블 ②단위 = 현장 + 작업명 여러 벌. ⚠ 미니PC 안은 코디가 배제 근거를 제시했다 — 운영 PFS 는 AWS EC2 라 사내 미니PC(100.108.234.45)로 못 간다(Tailscale 없음). 개발본 8799 에서만 돌아 현업에 못 쓴다.
구성 = api/pfs/pncad/{controller,dao} + pncad_scene 테이블 + 상단바 3버튼·저장 상태 텍스트.
🔑 멱등 ensure_table() 패턴이라 SSM DDL 스크립트가 없다(company_vacation 선례) — 운영 DB 작업이
코드 배포 하나로 끝난다. data 는 통짜 JSON 이라 목록 SELECT 에서 항상 뺀다.
JSON 파일 저장·열기는 백업·외부 전달용으로 유지, 파일에서 연 씬은 STO.no=null 로 끊는다.
검증 = 신설 E2E pncad_store_check.py 12건(초기상태·변경감지·저장·목록·열기·복원·덮어쓰기·
장수갱신·삭제) 테스트·운영 양쪽 ALL PASS, 콘솔 0. 단독 8799 는 안내 후 JSON 폴백 PASS.
커밋 = pfs master 1d626e8 → deploy-live 98a8514 · pncad c0d604b. 사이트맵 공용API 3→4.
🔴 E2E 가 실제로 잡은 버그 = 불러오기 직후 「변경됨」 — loadScene 이 clean 을 찍은 뒤
rebuild() 안의 save() 가 dirty 로 되돌렸다. clean 표시를 재렌더 뒤로 옮겨 해결(회귀 고정).
다음
- S7 잔여 — ①박스형 부자재(멍장) 구성원칙 반전(천/지판 풀폭 + 측판 끼움) = 존별 구성원칙 옵션
②기둥목 축·폭(imos
CSIDE재조회) ③상부장 지판 깊이 −52/−21 갈림 ④텐덤 서랍 산출식 ⑤코너. - 사내 공유(사용 설명)는 S7 잔여 정리 후.
- PNCAD 자산을 고칠 때마다
pncad/tools/sync_to_pfs.py→ pfs 커밋까지가 한 작업.
관계
- 주제 그룹: pncad
- 관련 문서: pncad-handoff, pncad-rules, pfs-rules