242 lines
26 KiB
Markdown
242 lines
26 KiB
Markdown
# 소유자 피드백·지시 로그 (KINTEX AI 전시·행사시스템)
|
||
|
||
> 이번 세션에서 소유자가 지시한 모든 항목을 전수 기록한다. 상태: ✅완료(배포) · 🚚배포중 · ⏳작업중 · 📋대기.
|
||
> 이 파일을 기준으로 누락 없이 처리한다. 새 지시는 여기에 추가한다.
|
||
> 최종 갱신: 2026-07-14 (AI 우선 세션 — 플로어플랜 자연어 AI·ReRoomAI·G-02 티켓·V51 링크오류·시연 PPT. 하단 "처리 로그 (2026-07-14 세션)" 참조)
|
||
|
||
---
|
||
|
||
## 1. 디자인 시스템 (Nifty / WISE) — 최우선 반복 지시
|
||
|
||
| # | 지시 | 상태 | 비고 |
|
||
|---|------|------|------|
|
||
| 1.1 | **Nifty 카드 타입** 적용 (https://preview.themeon.net/nifty/ui-elements/cards/) — 라운딩·그림자·헤더/바디/푸터 구조·보더 톤 | ✅완료 | 276293e `.kx-card` Nifty 구조 정렬, 2026-07-13 배포 |
|
||
| 1.2 | **그리드는 Nifty Advanced table headers**로 통일 (tables/static-tables) | ✅완료 | 276293e `.kx-table` 6화면 수렴, 배포됨 |
|
||
| 1.3 | **Tabulator 기능** 추가 (tables/tabulator — 정렬·필터·페이지·CSV) | ✅완료 | task #32 — KxDataTable 자체구현(정렬/필터/페이지/CSV BOM), 참가업체·리드스코어·등록자 3화면 적용. 배포됨(2026-07-13 05:17) |
|
||
| 1.4 | **상세페이지 = Nifty blog** 스타일 (blog-apps/blog) | ✅완료 | a5a78f1 Nifty detail views, 배포됨 |
|
||
| 1.5 | **버튼 = Nifty buttons**, **Dropdowns**, **컴포넌트**, **List Group**, **Typography/Modals/Offcanvas** = ui-elements 전체 채택 | ⏳부분 | Offcanvas 완료, 나머지 정렬 진행 |
|
||
| 1.6 | **Nifty 스타일 학습 md 생성** | ✅완료 | `docs/DESIGN_SYSTEM_NIFTY.md`·`docs/analysis/nifty-design-refs.md` |
|
||
| 1.7 | **아이콘은 선(line/stroke) SVG**로 직접 (이모지 금지) | ✅원칙 | 전 신규화면 준수 |
|
||
| 1.8 | **UI는 WISE(UIWS) 문자 그대로** — 셸·메뉴·캘린더 자체 재해석 금지 | ✅원칙 | 메모리 [[ui-follow-wise-strictly]] |
|
||
| 1.9 | **폰트를 페이지마다 안 맞춤** — 전 화면 타이포 일관화 | ✅완료 | 276293e font 179+weight 415 토큰화(`--fs-micro`·공용 제목클래스), 배포됨 |
|
||
| 1.10 | **모든 경계선 엷은 회색** | ⏳부분 | 구조 보더는 neutral-200(#e4e7ec) 사용 중. 의미색·hover는 유지, 지정화면 정렬 |
|
||
| 1.11 | **좌우 2단 폭 50:50**, 전 화면 **공백 없는 반응형**(풀블리드) | ✅완료 | task #39 스윕 — 루트 fill/scroll 결함 13화면 + 브레이크포인트 부재 2화면 수정. 배포됨(2026-07-13 05:32). 감사기록 `src/frontend/_workspace/responsive_sweep_audit.md` |
|
||
| 1.12 | **top 설정 아이콘** 추가 + **설정 레이아웃 커스터마이저**(offcanvas 테마/레이아웃/색상) | ✅완료 | a5a78f1 settings customizer(customizerStore), 배포됨 |
|
||
|
||
## 2. 캘린더
|
||
|
||
| # | 지시 | 상태 |
|
||
|---|------|------|
|
||
| 2.1 | 캘린더를 **Nifty app-views/calendar**처럼 (옅은 회색 격자·연한 today·가벼운 이벤트 칩) | ✅완료 | 배포됨(2026-07-13 라이브) |
|
||
| 2.2 | **공휴일 붉은색 + 일자 옆 공휴일명** (2050년까지 데이터) | ✅완료 | c77cba7 홈 캘린더 공휴일 마커 포함, 배포됨 |
|
||
| 2.3 | **달력 경계선 모두 회색** | ✅완료 | 배포됨 |
|
||
| 2.4 | 일정 **월/주/일** 뷰 (WISE CalendarView) | ✅완료 |
|
||
| 2.5 | 전시 일정 50:50 비율·달력 날짜 위로(하단 공백 제거) | ✅완료 |
|
||
|
||
## 3. 공개사이트 / 메인 / visitor
|
||
|
||
| # | 지시 | 상태 |
|
||
|---|------|------|
|
||
| 3.1 | **첫 화면 = 제품 소개** (미인증 루트는 히어로 랜딩, 로그인 폼만 노출 금지) | ✅완료 | 메모리 [[product-identity-first]] |
|
||
| 3.2 | 제품명 **'KINTEX AI 전시·행사시스템'** | ✅완료 |
|
||
| 3.3 | **visitor 메인 = 세련된 홈페이지** (AI 관람 도우미 중심) | ✅완료 | AiAssistant·기능타일·연월 브리핑·쇼케이스, 배포됨 |
|
||
| 3.4 | 메인에 **AI 기능 전면 노출** (AI가 뭘 하는지 한눈에) | ✅완료 | AI 기능 쇼케이스 6타일, 배포됨 |
|
||
| 3.5 | AI가 답하는 정보는 **크롤링해서 DB 저장** (실시간 외부호출 X) | ✅완료 | V43 visitor_guide·transport, 공개 AI API 근거응답 |
|
||
| 3.6 | **AI는 전시·행사정보 학습** (근거 기반) | ✅완료 | grounding + 인용, 환각 차단 |
|
||
| 3.7 | **AI가 연간·월간 전시·행사 기획정보 제시** | ✅완료 | AiPlanningBriefing(연/월 토글), 배포됨 |
|
||
| 3.8 | 비지터가 **가장 알고 싶은 정보를 AI로 쉽게** | ✅설계 | 관람 도우미 예시칩·구조화 카드 |
|
||
| 3.9 | 코엑스 분석 → **visitor/business/agency 3-트랙** 분리 | ✅완료 | 관문 + 3 서브홈 + TrackSwitcher |
|
||
| 3.10 | **"코엑스처럼" 전면 리뉴얼** (히어로 배경·애니메이션·비주얼) | ✅완료 | design.md v2.4 §3C-V 구현, 배포됨 |
|
||
| 3.11 | 메인 카드가 **밋밋한 파란 placeholder** (포스터 이미지 없음) | ✅완료 | V46 실제 포스터 이미지로 교체(배포됨) |
|
||
| 3.12 | **메인 카드 이미지 크기 안 맞음**(세로 포스터가 16:11 가로 프레임에 늘어남/잘림) | ✅완료 | 3:4 프레임 + `object-fit:cover`, 배포됨 |
|
||
| 3.13 | **메인 히어로 이미지 5장 회전(슬라이드)** | ✅완료 | 7316cd9 실사진 5장 회전 히어로, 배포됨 |
|
||
|
||
## 4. 역할 · 네비게이션
|
||
|
||
| # | 지시 | 상태 |
|
||
|---|------|------|
|
||
| 4.1 | **로그인 사용자 구분으로 메인페이지 + 메뉴 그룹 결정** (디폴트 visitor, 로그인 후 business/admin/agency) | ✅완료 | plan_role_routing(roleTrack.ts) + 역할별 메뉴 게이트, 배포됨 |
|
||
| 4.2 | **각 트랙 메인페이지 Stitch 디자인 의뢰** | ✅부분 | Stitch 2회 실패 → design.md 스펙 직접 구현(문서화 폴백) |
|
||
| 4.3 | **모바일 앱도 동일 로직** | ✅완료 | 기구현 확인 + 결함 수정(roleCode 타입 누락 → 워크스페이스 없는 ADMIN이 티켓으로 오랜딩). 소스 반영 — APK 반영은 다음 EAS 빌드에 포함(2026-07-13) |
|
||
| 4.4 | **상세→메인 복귀·브레드크럼·404** 내비게이션 | ✅완료 | Breadcrumb(셸 콘텐츠 상단, 메뉴 IA 정합) + NotFound catch-all(역할별 홈 복귀). 배포됨(2026-07-13 05:17) |
|
||
|
||
## 5. 데이터 / 시드
|
||
|
||
| # | 지시 | 상태 |
|
||
|---|------|------|
|
||
| 5.1 | **모든 테이블에 데이터** (50~100건) | ✅완료 | V42 대량시드(40테이블 2,535행) |
|
||
| 5.2 | **정산·결제 데이터 없음** — 행사스코프 정렬 | ✅완료 | V47 `e-2026-live` 정산 폐루프, 배포됨 |
|
||
| 5.3 | 테스트 데이터 **더 현실적으로** | ✅완료 | V39·V42 실감형 |
|
||
| 5.4 | 행사정보 **크롤링해서 데이터 넣기** | ✅완료 | 크롤 시드 |
|
||
| 5.5 | **연간·월간 전시 기획정보**도 적재 | ✅완료 | V43 event 생성열·v_event_calendar 뷰 |
|
||
| 5.6 | 포스터 이미지 **다 다운받아 빌드 내장** | ✅완료 | V46 `/media/posters/`, 배포됨 |
|
||
|
||
## 6. 정산·도메인 화면
|
||
|
||
| # | 지시 | 상태 |
|
||
|---|------|------|
|
||
| 6.1 | **정산·결제 패딩 없음** | ✅완료 | `.kx-settle` 패딩, 배포됨 |
|
||
| 6.2 | **참가업체 관리가 홈으로 감** — 전용 화면 신설 | ✅완료 | a5a78f1 ExhibitorsPage(screens/exhibitors), 배포됨 |
|
||
| 6.3 | 부서 관리 = **WISE 조직도** | ✅완료 |
|
||
| 6.4 | 결재관리 **반려·재상신·결재선** (WISE) | ✅완료 |
|
||
| 6.5 | 통합검색에 **행사·전시 포함** | ✅완료 |
|
||
| 6.6 | 시스템관리 **메시지 관리**({} 플레이스홀더+샘플) | ✅완료 | 백엔드 ✅(276293e V48) + 프론트 MessageAdminPage(/admin/messages — 필터·검색·upsert·렌더 미리보기, i18n×4). 배포됨(2026-07-13 05:17) |
|
||
| 6.7 | 물류허브·서류/마일스톤·CMS·일정 = WISE | ✅완료 |
|
||
| 6.8 | **그룹권한(역할↔메뉴) 메뉴** 존재 확인 | ✅확인 | RoleAdminPage + RoleMenuAdminPage |
|
||
|
||
## 7. 버튼 · 색상 · 대비
|
||
|
||
| # | 지시 | 상태 |
|
||
|---|------|------|
|
||
| 7.1 | **파란 배경 버튼 = 흰 글자** | ✅완료 | `--color-on-accent`(다크에서도 흰색). 라이브 반영(캐시 새로고침 필요) |
|
||
| 7.2 | 다크모드 색상배경 위 **흰 글자 어두워지는 버그** 전수 수정 | ✅완료 | 77곳 on-accent + 통계밴드 2곳, 배포됨 |
|
||
| 7.3 | 회색 버튼은 옅은 ghost — 흰 글자 아님(솔리드 진회색만 흰글자) | ✅확인 |
|
||
|
||
## 8. 파비콘 · 브랜드
|
||
|
||
| # | 지시 | 상태 |
|
||
|---|------|------|
|
||
| 8.1 | **KINTEX favicon** 추가 (홈페이지 크롤) | ✅완료 | 리포 favicon.ico가 톰캣 아이콘이던 것 규명→KINTEX .ico 재생성(v3) |
|
||
| 8.2 | **브랜드 밑에 영어 병기** | ✅완료 | "AI Exhibition & Event System" |
|
||
|
||
## 9. 모바일
|
||
|
||
| # | 지시 | 상태 |
|
||
|---|------|------|
|
||
| 9.1 | **내정보 (WISE 참조) + 생체인식 + 사진등록** | ✅완료 | app/profile, expo-local-authentication, expo-image-picker. 아바타 API(백엔드) 완료 |
|
||
| 9.2 | **전시·공연 앱 벤치마킹** (다운로드·좋아요 상위순) | ✅완료 | docs/analysis/mobile-benchmark-exhibition-performance.md + 백로그 12항목 |
|
||
| 9.3 | **앱 위변조 방지 + 시큐어 코딩 + 보안 체크리스트 통과** | ✅완료 | 루트/탈옥·무결성·Hermes+R8·화면캡처·cleartext·권한최소. 체크리스트/감사 문서 |
|
||
| 9.4 | **다국어** — 웹 4개국어 완비, 모바일도 4개국어 | ✅완료 | 웹 ✅ + 모바일 ✅(mobile/lib/i18n ko/en/zh/ja + LanguageSelector, react-i18next) |
|
||
|
||
## 10. AI
|
||
|
||
| # | 지시 | 상태 |
|
||
|---|------|------|
|
||
| 10.1 | **AI 기능 쉽게 사용 + 토큰 최소화** | ✅완료 | PLANNING v3.4 §8A(결정론 라우팅·소형모델 우선·RAG축소·캐싱·집계는 SQL·측정지표) |
|
||
| 10.2 | AI 기능이 **하나도 구현 안 된 것 같다 → 구현** | ✅완료 | 공개 AI 관람 도우미 라이브(grounded=true, Claude) |
|
||
| 10.3 | 나노바나나 유료? | ✅답변 | Google Gemini 유료 |
|
||
|
||
## 11. 데이터 아키텍처 (표준)
|
||
|
||
| # | 지시 | 상태 |
|
||
|---|------|------|
|
||
| 11.1 | **FK 최소화, 공통코드로 관리** | ✅표준 | docs/architecture/data.md §10 (소프트참조·공통코드) |
|
||
| 11.2 | **필요한 인덱스 생성** | ✅완료 | V44 성능 인덱스 8건, 배포됨 |
|
||
| 11.3 | **view/mview/function 고려** | ✅표준 | data.md §11 |
|
||
| 11.4 | **자동화 배치·프로시저 고려** | ✅표준 | data.md §13 배치 카탈로그 |
|
||
| 11.5 | **ten_id/tenant_id PK 맨 앞 복합키** | ✅원칙 | 메모리 [[tenant-id-pk-standard]] |
|
||
|
||
## 12. 인증 / SSO / HR
|
||
|
||
| # | 지시 | 상태 |
|
||
|---|------|------|
|
||
| 12.1 | **직원 인사(조직) 정보는 API 방식** | ✅설계 | docs/architecture/sso-hr-integration.md (HrDirectoryClient 어댑터+스냅샷) |
|
||
| 12.2 | **Open SSO 도입** | ✅설계 | Keycloak OIDC(PKCE)+SAML, 기존 JWT+2FA 공존(브로커) |
|
||
|
||
## 13. 평면도 / 기타
|
||
|
||
| # | 지시 | 상태 |
|
||
|---|------|------|
|
||
| 13.1 | 도면 안 열림 / AI 시각화 어디감 | ✅원인 | 403(행사 미가입) → 데모계정 멤버십 해소. DWG는 SVG캔버스+JPG 렌더(DWG 바이너리는 좌표소스) |
|
||
| 13.2 | ReRoomAI 기능 (나노바나나 image-to-image) | ⏳ | visualizer 트랙 |
|
||
|
||
---
|
||
|
||
## 미해결·대기 요약 (다음 우선 처리 — 2026-07-14 갱신)
|
||
|
||
**소유자 조치 대기:**
|
||
1. **Gemini API 유료 키 교체**(시연 블로커) — 무료 티어 쿼터 0(429)으로 S7 조감·ReRoom 실렌더 불가. 텍스트 AI(Claude)는 정상.
|
||
2. **PTR(역방향 DNS) 신청** — `101.79.17.164`의 PTR이 없음(NXDOMAIN). Gmail 스팸 분류의 주 원인 후보. **IP 제공 호스팅/회선사에 "101.79.17.164 → mail.zioinfo.co.kr" 역방향 DNS 등록 신청** 필요(가비아 DNS 아님 — IP 소유 ISP만 설정 가능). 이것만 해소되면 메일 인증 체계는 완성.
|
||
|
||
**EDM 운영 실발송 개방 완료(2026-07-14 소유자 지시):** 서버 `EDM_TEST_MODE=false` 전환 + EDM 화면에 운영 실발송 버튼 신설 — 기존 버튼은 '테스트 발송'(secondary, live=false 안전 기본)으로 유지, '운영 실발송'(primary)은 **이중 확인**(대상 인원 경고 confirm → 'LIVE' 타이핑) 후에만 live=true 호출. i18n 4개국어. ~~참고: 현 데모 수신자 5명은 `@kintex.test` 시드 주소라 실발송해도 반송됨~~ → **해소(V56, 소유자 지시 "수신자 데이터 실제 이메일로 정비")**: 시드 주소 114행 전량을 소유자 Gmail plus-addressing(`ythong86+<등록ID>@gmail.com`)으로 치환 — 주소별 구분 가능·전부 소유자 수신함으로 실전달·타인 주소 미도입. 운영 실발송 E2E 검증 가능 상태.
|
||
|
||
~~완료 처리(2026-07-13 배포 확인): Tabulator/KxDataTable(1.3), 브레드크럼·404(4.4), 모바일 역할랜딩(4.3), 메시지 관리 화면(6.6), 반응형 스윕(1.11), Nifty 카드·그리드·폰트(1.1·1.2·1.9), 참가업체 관리(6.2), 상세 Nifty blog(1.4), 설정 커스터마이저(1.12), 히어로 5장 회전(3.13), 카드 3:4(3.12), 모바일 다국어(9.4)~~
|
||
~~완료 처리(2026-07-14 배포 확인): ReRoomAI image-to-image(13.2), Nifty 잔여 컴포넌트 버튼/드롭다운/List Group(1.5), 경계선 회색 정렬(1.10), 좌측메뉴 검색+아코디언, 그리드 짤림, 세션 재수화~~
|
||
|
||
---
|
||
|
||
## 처리 로그 (2026-07-13 세션)
|
||
|
||
**배포 검증 (04:33 KST):** push(e67db2e 병합) → Gitea webhook 자동배포 → 프론트 번들(/var/www/kintex)·백엔드 jar 모두 04:33 갱신, HTTPS 200. ★원격 main이 배포 파이프라인에 의해 force-rewrite(58aa844)되어 로컬과 분기 → `-s ours` 병합으로 로컬 정본 유지+원격 이력 보존 후 push. ★외부에서 :8021/:9001 직접 접근은 방화벽 차단 — health 게이트는 SSH(키 `~/.ssh/guardia_server`) 경유 localhost 확인이 정본.
|
||
|
||
**배포 완료 (라이브):** ecf60aa(Tabulator KxDataTable 3화면 + 브레드크럼/404 + 메시지 관리 화면 /admin/messages + i18n×4) · 7a117a0(모바일 roleCode 랜딩 결함) · 3966077(반응형 스윕 15화면) · d19b742(KxDataTable 4번째=공통코드) — API·웹·번들 게이트 통과. 이번 세션으로 **미해결 요약 1~5번 전부 해소**. 잔여: Nifty 컴포넌트 잔여 정렬(1.5)·경계선 지정화면(1.10)·ReRoomAI(13.2).
|
||
|
||
**모바일 APK 빌드·QR 배포 (2026-07-13, G3 승인 하):** EAS preview APK v0.2.0(versionCode 2, roleCode 랜딩 수정 포함, 빌드 c0d9332f) → 서버 `/opt/kintex/downloads/kintex.apk`(64MB) → `https://kintex.zioinfo.co.kr/downloads/kintex.apk` 200 (외부 검증) · `/app-qr` 랜딩 200. **영속화**: 웹루트 원자교체 시 APK가 지워지는 문제를 deploy_kintex.sh 스테이징 재주입(1162dd0)으로 해결 — 실배포로 E2E 검증 완료. ★교훈: 배포 게이트는 git HEAD(pull 시점 갱신)가 아니라 **산출물 mtime(index.html·jar)** 로 확인해야 함 — HEAD 갱신≠빌드 완료. APK 교체 절차: 새 아티팩트를 `/opt/kintex/downloads/kintex.apk`에 놓으면 다음 배포부터 자동 유지(즉시 반영은 웹루트 수동 복사 1회).
|
||
|
||
---
|
||
|
||
## 처리 로그 (내가 처리·배포한 것 — 2026-07-12 세션)
|
||
|
||
**배포 완료 (라이브):** 커밋 214b6df → 6e95ac6 → 87f310f/55e27b3 → 3077cb0
|
||
- V42 대량시드(40테이블 2,535행) · V43 관람객 가이드/연월 캘린더 뷰 · V44 성능 인덱스 8건 · V45 아바타 컬럼 · V46 포스터 로컬화(73건) · V47 e-2026-live 정산 폐루프
|
||
- 공개 AI 관람 도우미 API(grounded·Claude) · 연월 캘린더 API · 3-트랙 관문/서브홈 · 역할별 랜딩+메뉴 게이트
|
||
- 미니/큰 캘린더 공휴일 표시·회색 테두리·Nifty 톤 · 코엑스풍 공개사이트 비주얼(히어로·모션·통계밴드) · 실제 포스터 이미지
|
||
- 파란버튼 흰글자(`--color-on-accent`) · 다크모드 흰글자 77곳 · favicon(톰캣→KINTEX v3) · 2FA 방패 아이콘 · 브랜드 영문병기 · 정산 패딩
|
||
|
||
**구현 완료 (미배포 — 다음 배포 대기):**
|
||
- **Nifty 디자인 시스템 정렬**(카드 `.kx-card` Nifty 구조·`--fs-micro`/`--fw-*` 토큰·공용 제목클래스·테이블 `.kx-table` 6화면 수렴, font 179+weight 415 토큰화)
|
||
- **카드 이미지 3:4 프레임 + object-fit cover**(왜곡/잘림 제거)
|
||
- **메시지 관리 백엔드**(V48 sys_message + 렌더 API + 36샘플)
|
||
- **통계밴드 흰글자 2곳** · **푸터 "2026 © KINTEX..."** 4개국어
|
||
|
||
**병렬 진행 중:** 모바일 다국어+역할랜딩 · 잔여 데이터 보강(V49) · 산출물 문서
|
||
|
||
**설계·표준 문서 산출:** PLANNING v3.4(AI 토큰최소화 §8A) · design.md v2.4(공개 비주얼·모션) · docs/architecture/data.md(FK최소화·공통코드·view/mview·배치) · sso-hr-integration.md(Open SSO+HR) · DESIGN_SYSTEM_NIFTY.md · mobile-security-*.md · mobile-benchmark-*.md
|
||
|
||
## 산출물(문서) 상태
|
||
|
||
| 산출물 | 타이밍 | 상태 |
|
||
|--------|--------|------|
|
||
| 개발계획서 | 개발 전/중 | 📋 생성 착수(PLANNING v3.4 기반) |
|
||
| 설계서(아키텍처·ERD·화면·API) | 개발 중 | 📋 생성 착수(design.md v2.4·architecture·backend 계약 기반) |
|
||
| 사용자 지침서 | **완성+QA 후**(최종 메뉴 반영) | ⏳ UI 정렬 안정화 후 — 지금 생성 시 재작업(정책: 최종 1회) |
|
||
| 운영자 지침서 | **완성+QA 후** | ⏳ 동일 |
|
||
|
||
> 정책([[deliverables-update-policy]]): deliverables는 최초 1회 + 최종 1회. 개발계획서·설계서는 지금 생성 가능(내용 안정), 지침서는 현재 UI 정렬 파동이 끝난 뒤 최종 메뉴 기준으로 1회 생성.
|
||
|
||
---
|
||
|
||
## 처리 로그 (2026-07-14 세션 — AI 기능 우선 + 시연 준비)
|
||
|
||
**소유자 지시:** ① "AI 있는 기능부터, 특히 플로어플랜스튜디오" ② "ReRoomAI image-to-image도 같이" ③ "AI 시연 해야돼" ④ "시연 절차를 PPT로(입력 예시 포함, 샘플 데이터 등록)" ⑤ 플로어플랜 링크오류 제보 ⑥ graphify.EXE 경로 '/' 누락 제보 ⑦ "배포는 CI/CD로"
|
||
|
||
**구현·배포 (커밋 ba34aba·0f91dcf·8943c80·1e349aa·5b76557):**
|
||
- **플로어플랜 AI(M2)**: 자연어 조건 해석 `POST .../auto-generate/interpret`(AiTextRouter Claude, JSON 강제·주입 방어·서버 클램핑·degraded 폴백) + `auto-generate?ai=true` 배치안별 지표 근거 AI 요약(WISE AI 라벨). AutoLayoutDialog 자연어 입력바.
|
||
- **ReRoomAI 사진 시안(M5 확장)**: 참조사진 업로드(매직바이트·10MB·경로방어)→R1 렌더잡(기존 큐/콜백/WS 재사용)→보존잠금+교체지정 4단 프롬프트(스타일 6종 JSON 단일출처)→Before/After 슬라이더+워터마크. 부스설계 스튜디오 "사진 시안 (AI)" 섹션.
|
||
- **G-02 티켓 도메인**(GAP P1 해소): V50 스키마+시드, 공개 API 3종(잔여 서버권위·조건부 재고차감 oversell 차단·Mock PG·조회 PII 마스킹+해시 대조), PublicTicketPage 실배선, i18n 15키×4.
|
||
- **링크오류 근본원인**: admin 계정 event_member 0건 → 스코프 메뉴가 /home 폴백. V51로 admin을 e-2026-live·smf ORGANIZER 멱등 등록.
|
||
- **graphify 훅**: `.claude/settings.json` 훅 경로 백슬래시가 sh에서 소모 → 슬래시 표기로 수정(파이프 테스트 통과).
|
||
- **시연 산출물**: `docs/demo/AI_DEMO_SCRIPT.pptx`(10슬라이드 — 4개 데모 흐름·단계별 입력 예시·체크리스트·트러블슈팅). 샘플 데이터 등록: 데모행사 admin 멤버십(V51)·티켓 시드(V50, 조회예시 KTX-2026-500001/010-1234-5678)·ReRoom 샘플사진 `/downloads/demo/sample_booth.jpg`(+alt, Wikimedia CC 출처표기).
|
||
|
||
**⚠ 시연 블로커(소유자 조치 필요):** Gemini API 키가 무료 티어 → 이미지 모델(`gemini-3.1-flash-image`·2.5 모두) 쿼터 0(429) — **S7 조감·ReRoom 실렌더 불가**. Google AI 유료 결제 활성화 또는 유료 키 교체 필요. 텍스트 AI(Claude)는 정상.
|
||
|
||
**★CI/CD 교훈(확정):** 00:26·00:52 배포가 연속으로 스테일 jar(신규 클래스·V50/V51 누락)를 내보낸 진짜 원인 = **포트 9999를 점유한 deploy_server.py 프로세스가 7/11 19:44에 뜬 구버전**(메모리에 옛 kintex 블록). 디스크 파일은 최신이었으나 재시작이 누락돼 옛 로직이 계속 실행, 새 인스턴스는 "Address already in use"로 기동 실패. → `systemctl restart zioinfo-deploy`(01:15, PID 1123130)로 해소. **재발방지 수칙: deploy_server.py 갱신 시 서버 반영+재시작은 원자 1세트**(기존 교훈의 재발) + 배포 게이트에 **jar 내용물 검증**(`unzip -l app.jar | grep 최신마이그레이션`) 추가. `/opt/kintex/deploy_kintex.sh`는 미사용 구사본(파이프라인은 repo `deploy/deploy_kintex.sh` 실행).
|
||
|
||
---
|
||
|
||
## 처리 로그 (2026-07-14 세션 2 — 라이브 장애 연쇄 해소 + UI 지시 + 기능 배치 완성)
|
||
|
||
**소유자 제보·지시:** ① "도면 안나옴"(플로어플랜 → /home) ② 서류·마일스톤/물류 허브 응답대기 ③ 옥션 업체 포털 "대시보드를 불러오지 못했습니다" ④ "위 오류 모두 수정해" ⑤ "그리드도 짤린다" ⑥ 부스 판매 등 9개 화면 "행사를 선택해 주세요"(선택기 비어 선택 불가) ⑦ "좌측메뉴 아코디언 + 메뉴검색 추가, 선택 시 이미 펼쳐진 메뉴는 접기" ⑧ "플로어플랜 스튜디오는 언제?" ⑨ "이어서 작업"(끊긴 배치 마무리)
|
||
|
||
**근본원인 1 — 연쇄 장애(①~③ 공통):** 01:17 배포된 새 jar가 `TicketMapper.xml`의 **미이스케이프 `<=`** 로 SqlSessionFactory 파싱 실패 → 8회 crash-loop → 파이프라인이 구 jar(7/13 빌드)로 롤백 → **새 프론트 + 구 백엔드 불일치** + V50/V51 미적용(admin 멤버십 소실 재발). 수정 `1d46da8`(이스케이프, 전 매퍼 10개 XML 정형성 검사 통과) → 새 jar 라이브(01:52), V50/V51 적용·admin ORGANIZER 멤버십(e-2026-live·smf) 확인. ★교훈: 매퍼 XML raw `<=`는 빌드/테스트 통과 후 **부팅 시점**에만 터짐 — 배포 게이트에 매퍼 XML well-formed 검사 추가.
|
||
|
||
**근본원인 2 — "행사를 선택해 주세요" 전 화면(⑥):** 토큰은 sessionStorage 지속인데 user/workspaces는 메모리 zustand뿐 → **새로고침 시 workspaces=[] 박제**(세션 재수화 부재). `3860e7e`로 RequireAuth에 /api/auth/me + /api/auth/workspaces 자동 복원(401 시 로그아웃) 추가.
|
||
|
||
**개별 버그:** `/api/admin/messages` 500 = SysMessageMapper `(#{p} IS NULL OR …)` PG 파라미터 타입 추론 실패 → `::text` 캐스트(`ecc00f8`). 그리드 짤림(⑤) = flex/grid 자식 `min-width:auto` 블로우아웃 + `.kx-dash__table-wrap overflow:hidden` 직접 클립 → 공용 래퍼(`.kx-table-scroll`·`.kx-dt`) `min-width:0` 수렴 + 4화면 보정(`3c80585`).
|
||
|
||
**UI(⑦):** 메뉴 검색 신규 이식(UIWS NavSearch 패턴 — 전 대분류 횡단·매칭 하이라이트·Escape 클리어·역할 게이트 유지, i18n 4개국어) `a3fdb62`. 아코디언 단일확장은 기존 구조가 이미 충족(라우트 기준 활성 그룹 자동 펼침) — 회귀 없이 유지.
|
||
|
||
**기능 배치 완성(⑨ — 끊긴 세션 미커밋분, 커밋 ef74006~c664743 8건):** 회의 녹음→STT(whisper env 설정형, 미설정=degraded)→AI 회의록+액션아이템(V52 transcript) · EDM 실발송(수신동의 필터·**테스트모드 기본 ON**·캠페인 상한·분당 레이트·불투명 수신거부 토큰·발송이력 V53) · 마이페이지 프로필/비번변경/알림설정(V55) · CMS AI 번역 · 보고서 PDF(openhtmltopdf+NanumGothic 임베드) · AI 검색(grounded) · 렌더 이력 갤러리(V54 인덱스). 검증: gradle test 통과·tsc 0·V52~V55 라이브 dry-run(BEGIN/ROLLBACK) 후 배포 — jar 내용물 게이트(V52~55 4건)·flyway 52~55 성공·신규 엔드포인트(알림설정/캠페인/스폰서십/회의/검색) 전부 200·error_log 신규 유입 0(프로브 오타 2건 제외).
|
||
|
||
**답변(⑧):** 플로어플랜 스튜디오는 재로그인(또는 새 번들에서 새로고침) 후 좌측 메뉴 행사 스코프로 진입 — H1 배치안 v1 API 200 확인.
|
||
|
||
**EDM 테스트 발송(소유자 지시 "EDM 테스트 발송 해봐"):** 1차 시도 2건 전부 `MailAuthenticationException` — 원인은 `mail.smtp.auth` 기본 true + SMTP 계정 공란(빈 자격증명 AUTH 시도, 로컬 Postfix 127.0.0.1:25는 무인증 릴레이). 서버 env에 `SMTP_AUTH=false`·`SMTP_STARTTLS=false`·`EDM_TEST_RECIPIENTS=(소유자 2주소)` 추가 후 재발송 → **Gmail 250 OK·사내 maildir 배달 확인**, 실대상 5명 안전 스킵·`[TEST]` 접두어·mail_log 마스킹 기록. ★교훈: 응답 `sentCount`는 비동기 큐 적재 건수라 SMTP 실패를 못 봄 — **발송 결과 정본은 mail_log**. meta 문구를 "발송 요청 N건 큐 적재(결과는 발송 이력 참조)"로 정직화(코드 반영).
|
||
|
||
**마감 배치(소유자: "이어서 모든 작업 완성하고 git push"):** Nifty 잔여 컴포넌트(버튼/드롭다운/List Group, 1.5)·경계선 회색 정렬(1.10) 완료, EDM meta 정직화, 본 로그 갱신 — 커밋·배포·게이트 검증 후 마감.
|
||
|
||
**EDM 운영 실발송 실검증(소유자: "운영 실발송 해봐", 07:18):** cp-live-003(관람객 만족도 설문)을 live=true로 실발송 — 수신동의 5명(V56 plus-주소) 전원에게 발송, **Gmail 250 OK 5통 전달 확인**, 미동의 2명 제외, 캠페인 done 전이(중복 발송 봉인), mail_log 5건 sent(마스킹). 실패 0.
|
||
|
||
**SPF/DKIM 정비 감사(소유자: "SPF/DKIM 정비해줘"):** 실측 결과 **인증 체계 대부분 이미 건강** — ①SPF `v=spf1 ip4:101.79.17.164 -all`(정확·하드페일) ②DKIM opendkim 가동·`s=mail` 셀렉터 서명, DNS `mail._domainkey` 키 일치(`opendkim-testkey: key OK`), 오늘 EDM 5통 전부 서명 확인 ③DMARC `p=quarantine` 게시·정렬(d=From 도메인 일치) ④발신 TLS opportunistic(may) — 관측성 위해 `smtp_tls_loglevel=1` 적용. **유일 결함 = PTR 부재(NXDOMAIN)** → 소유자 조치 대기 2번 등재(ISP 신청 사안, 서버/가비아에서 불가). 참고: `default._domainkey` 부재는 무해(모든 서명이 s=mail).
|
||
|
||
**수신거부 링크 E2E(소유자: "수신거부 링크도 테스트해봐"):** vr-live-101 실토큰으로 HTTPS 풀스택 클릭 시뮬레이션 — ①정상 클릭: 완료 안내 HTML + DB 즉시 반영(발송 대상 5→4) ②재클릭: 멱등 완료 안내 ③무효 토큰/토큰 미지정: 안전 실패 안내(정보 미노출). 전 시나리오 통과. 테스트 후 vr-live-101 동의 상태 복구(대상 5명 원복). **EDM 전 구간(동의 필터→테스트→운영 실발송→이력→수신거부) 실검증 완료.** 다음 개선 후보: zioinfo.co.kr SPF/DKIM 정비(스팸함 회피).
|