kintex/_workspace/02_frontend_progress.md
zio eccbeb1337 feat(v2.0): Phase A 아키텍처 + WISE 개발문서 + PM/PMO + DB 계층 + 프론트 착수
- 거버넌스: kintex-pm·dev-pm·pmo 에이전트
- Phase A 아키텍처 5종: docs/architecture/{app,system,tech,data,network}.md (성문화·NFR·SRID0 공간표준·M16 스타스키마·보안영역)
- WISE(UIWS) 참조 개발문서 6종: README·DEVELOPMENT_GUIDE·ENV_SETUP·COMMON_CODES·API_GUIDE·BUILD_DEPLOY
- DB 계층: PostGIS 스키마 V1~V6(홀·트렌치 가정그리드·GiST) + MyBatis 매퍼 5종(ST_* 공간쿼리) + Flyway. gradlew build SUCCESS
- 프론트 착수: React/Vite 스캐폴드 + design.md 토큰 + SCR-01 로그인·SCR-03 부스 에디터. tsc/vite build EXIT 0
- R-T1 수정: 나노바나나 워커 큐키 kintex:renderjob:queue 통일(백엔드 정합, silent no-op 방지)
- 도메인/게이트: G2 해소(dev kintex.zioinfo.kr·prod kintex.wise.ai.kr), CLAUDE.md 로스터 20종

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-11 18:10:01 +09:00

33 lines
4.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 킨텍스 프론트엔드 — 진행 기록 (kintex-frontend-dev)
> 작성: kintex-frontend-dev · 2026-07-11 · 근거: `docs/design.md` v1.1 · `_workspace/01_backend_contracts.md` v0.1 · Stitch(SCR-01·SCR-03)
> 범위: IMPLEMENTATION_BACKLOG B-0(프론트 스캐폴드) + C-C 일부(SCR-01) + C-M2 일부(SCR-03)
## 완료
- **스캐폴드**: `src/frontend` (React 18 + Vite 5 + TS). 디자인 토큰(design.md §1) → `src/styles/tokens.css` CSS 변수 단일 출처. 라우팅(react-router, 인증 가드), API 클라이언트(JWT 헤더·ApiResponse 봉투·오류코드), WebSocket(STOMP/SockJS, `/topic/render/{jobId}` 구독) 골격.
- **SCR-01** 로그인/워크스페이스 선택: 좌 55% 브랜드 패널 + 우 45% 로그인 카드 → 로그인 후 워크스페이스 카드 그리드. `login`·`workspaces`·`accept-invite` 배선. **미등록 장치업체 초대 차단**(`NOT_REGISTERED_COMPANY` → 차단 모달).
- **SCR-03** 부스 배치 에디터: 3열(좌 도구·중앙 SVG 다크캔버스·우 속성/검증) + 상단 툴바. **SVG 캔버스**(부스 폴리곤·트렌치 그리드·축척·선택·줌). `GET/validate/auto-generate` 배선. **AI 자동배치 1·2·3안 생성→선택/병합** 다이얼로그(S7 조감 RenderJob WebSocket 구독).
- **검증**: `tsc -b` EXIT 0, `vite build` EXIT 0(238 modules, rollup win32 크래시 없음). WCAG AA — 포커스 링·role/aria·switch·reduced-motion.
## 경계면 이슈 (백엔드/계약 대조 — kintex-qa/backend 확인 요청)
1. **[중] 위반 오버레이 좌표 부재** — `ComplianceReport.violations[]``pin`·`label`·`measured`는 있으나 **도면 하이라이트 위치(좌표/boothId)가 없다**. design.md §1-4·SCR-03은 "도면 위 같은 색 하이라이트 + 번호 핀으로 목록과 1:1 연결"을 요구. 현재 위반 목록의 "위치 보기"는 캔버스 하이라이트로 연결 불가. **요청: Violation에 `polygon`/`boothId`/`anchor[x,y]` 중 하나 추가**(pin 번호와 캔버스 오버레이 매핑용).
2. **[중] 홀 치수·트렌치 좌표 계약 부재** — 캔버스가 홀 크기(126×90m)와 트렌치 그리드를 하드코딩/가정 중. `LayoutDto`에 홀 dims·트렌치 좌표가 없다. 계약 §6 render의 `scene.hall.dims_m`엔 있음. **요청: `GET .../layout` 응답에 `hall:{dims_m, trenches?}` 포함** 또는 별도 `GET .../halls/{hallId}` 홀 마스터 엔드포인트(트렌치·기둥·비상구 포함).
3. **[하] auto-generate → 편집 반영 경로 불명** — `AutoLayoutOption``summary`+`s7RenderJobId`만 반환, **선택 안의 부스 배열이 없다**. "이 안으로 편집 시작"이 선택 안을 layout에 병합하려면 옵션의 booths 또는 서버측 확정 엔드포인트가 필요. 현재는 재조회(refetch)로 임시 처리. **요청: auto-generate 옵션에 booths 포함 또는 `POST .../layout/apply-option {optionId}`**.
4. **[하] 홀 매니저 SSO·이메일 인증 로그인** — SCR-01의 "킨텍스 내부 계정 로그인" 버튼은 계약에 대응 엔드포인트 없음(login 단일). 현재 UI만 배치, 미배선. Phase B-1(2FA/SSO) 시 배선 예정.
5. **[정보] degraded 폴백** — `GET layout`·`login`·`accept-invite`가 현재 **501(NOT_IMPLEMENTED)**. 프론트는 501을 감지해 로그인은 안내 메시지, 에디터는 **샘플 배치(`sampleLayout.ts`, 계약 shape 동일)** 로 캔버스 시연. 매퍼 구현 시 코드 변경 없이 실데이터로 대체됨.
## 계약 준수 확인
- 응답 봉투 `ApiResponse<T>`·`PageResponse<T>`·오류코드→분기(FORBIDDEN·COMPLIANCE_BLOCKED·NOT_REGISTERED_COMPANY·NOT_IMPLEMENTED) 그대로 구현.
- AI 생성 이미지는 `watermarkRequired`/`watermarkText`/`notice`를 **항상 노출**(제거 불가 `AiImage` 컴포넌트). 계약 §0-3 준수.
- 민감정보(IP·SSH·해시) 미표시. 사용자/업체는 이름·역할만.
## 남은 화면 (미착수)
- 웹: SCR-02 주최자 대시보드 · SCR-04 배치안 비교(S7) · SCR-05 참가업체 홈 · SCR-06 설계 스튜디오(4샷+Before/After) · SCR-07 배선 뷰 · SCR-08 신청 요약 · SCR-09 규정 리포트 · SCR-10 승인 큐 · SCR-11 검수 상세 · SCR-12 갤러리
- 모바일(390px): SCR-M1 현장 체크리스트 · SCR-M2 현장 검수
- 공통 후속: 재사용 컴포넌트(Before/After CompareSlider — reroomai 패턴, 배선 오버레이 렌더러, 데이터 테이블/지브라), 실 캔버스 인터랙션(부스 드래그·리사이즈·병합), WebGL 대규모 렌더 검토.