36 KiB
소유자 피드백·지시 로그 (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·가벼운 이벤트 칩) | ✅완료 |
| 2.2 | 공휴일 붉은색 + 일자 옆 공휴일명 (2050년까지 데이터) | ✅완료 |
| 2.3 | 달력 경계선 모두 회색 | ✅완료 |
| 2.4 | 일정 월/주/일 뷰 (WISE CalendarView) | ✅완료 |
| 2.5 | 전시 일정 50:50 비율·달력 날짜 위로(하단 공백 제거) | ✅완료 |
3. 공개사이트 / 메인 / visitor
| # | 지시 | 상태 |
|---|---|---|
| 3.1 | 첫 화면 = 제품 소개 (미인증 루트는 히어로 랜딩, 로그인 폼만 노출 금지) | ✅완료 |
| 3.2 | 제품명 'KINTEX AI 전시·행사시스템' | ✅완료 |
| 3.3 | visitor 메인 = 세련된 홈페이지 (AI 관람 도우미 중심) | ✅완료 |
| 3.4 | 메인에 AI 기능 전면 노출 (AI가 뭘 하는지 한눈에) | ✅완료 |
| 3.5 | AI가 답하는 정보는 크롤링해서 DB 저장 (실시간 외부호출 X) | ✅완료 |
| 3.6 | AI는 전시·행사정보 학습 (근거 기반) | ✅완료 |
| 3.7 | AI가 연간·월간 전시·행사 기획정보 제시 | ✅완료 |
| 3.8 | 비지터가 가장 알고 싶은 정보를 AI로 쉽게 | ✅설계 |
| 3.9 | 코엑스 분석 → visitor/business/agency 3-트랙 분리 | ✅완료 |
| 3.10 | "코엑스처럼" 전면 리뉴얼 (히어로 배경·애니메이션·비주얼) | ✅완료 |
| 3.11 | 메인 카드가 밋밋한 파란 placeholder (포스터 이미지 없음) | ✅완료 |
| 3.12 | 메인 카드 이미지 크기 안 맞음(세로 포스터가 16:11 가로 프레임에 늘어남/잘림) | ✅완료 |
| 3.13 | 메인 히어로 이미지 5장 회전(슬라이드) | ✅완료 |
4. 역할 · 네비게이션
| # | 지시 | 상태 |
|---|---|---|
| 4.1 | 로그인 사용자 구분으로 메인페이지 + 메뉴 그룹 결정 (디폴트 visitor, 로그인 후 business/admin/agency) | ✅완료 |
| 4.2 | 각 트랙 메인페이지 Stitch 디자인 의뢰 | ✅부분 |
| 4.3 | 모바일 앱도 동일 로직 | ✅완료 |
| 4.4 | 상세→메인 복귀·브레드크럼·404 내비게이션 | ✅완료 |
5. 데이터 / 시드
| # | 지시 | 상태 |
|---|---|---|
| 5.1 | 모든 테이블에 데이터 (50~100건) | ✅완료 |
| 5.2 | 정산·결제 데이터 없음 — 행사스코프 정렬 | ✅완료 |
| 5.3 | 테스트 데이터 더 현실적으로 | ✅완료 |
| 5.4 | 행사정보 크롤링해서 데이터 넣기 | ✅완료 |
| 5.5 | 연간·월간 전시 기획정보도 적재 | ✅완료 |
| 5.6 | 포스터 이미지 다 다운받아 빌드 내장 | ✅완료 |
6. 정산·도메인 화면
| # | 지시 | 상태 |
|---|---|---|
| 6.1 | 정산·결제 패딩 없음 | ✅완료 |
| 6.2 | 참가업체 관리가 홈으로 감 — 전용 화면 신설 | ✅완료 |
| 6.3 | 부서 관리 = WISE 조직도 | ✅완료 |
| 6.4 | 결재관리 반려·재상신·결재선 (WISE) | ✅완료 |
| 6.5 | 통합검색에 행사·전시 포함 | ✅완료 |
| 6.6 | 시스템관리 메시지 관리({} 플레이스홀더+샘플) | ✅완료 |
| 6.7 | 물류허브·서류/마일스톤·CMS·일정 = WISE | ✅완료 |
| 6.8 | 그룹권한(역할↔메뉴) 메뉴 존재 확인 | ✅확인 |
7. 버튼 · 색상 · 대비
| # | 지시 | 상태 |
|---|---|---|
| 7.1 | 파란 배경 버튼 = 흰 글자 | ✅완료 |
| 7.2 | 다크모드 색상배경 위 흰 글자 어두워지는 버그 전수 수정 | ✅완료 |
| 7.3 | 회색 버튼은 옅은 ghost — 흰 글자 아님(솔리드 진회색만 흰글자) | ✅확인 |
8. 파비콘 · 브랜드
| # | 지시 | 상태 |
|---|---|---|
| 8.1 | KINTEX favicon 추가 (홈페이지 크롤) | ✅완료 |
| 8.2 | 브랜드 밑에 영어 병기 | ✅완료 |
9. 모바일
| # | 지시 | 상태 |
|---|---|---|
| 9.1 | 내정보 (WISE 참조) + 생체인식 + 사진등록 | ✅완료 |
| 9.2 | 전시·공연 앱 벤치마킹 (다운로드·좋아요 상위순) | ✅완료 |
| 9.3 | 앱 위변조 방지 + 시큐어 코딩 + 보안 체크리스트 통과 | ✅완료 |
| 9.4 | 다국어 — 웹 4개국어 완비, 모바일도 4개국어 | ✅완료 |
10. AI
| # | 지시 | 상태 |
|---|---|---|
| 10.1 | AI 기능 쉽게 사용 + 토큰 최소화 | ✅완료 |
| 10.2 | AI 기능이 하나도 구현 안 된 것 같다 → 구현 | ✅완료 |
| 10.3 | 나노바나나 유료? | ✅답변 |
11. 데이터 아키텍처 (표준)
| # | 지시 | 상태 |
|---|---|---|
| 11.1 | FK 최소화, 공통코드로 관리 | ✅표준 |
| 11.2 | 필요한 인덱스 생성 | ✅완료 |
| 11.3 | view/mview/function 고려 | ✅표준 |
| 11.4 | 자동화 배치·프로시저 고려 | ✅표준 |
| 11.5 | ten_id/tenant_id PK 맨 앞 복합키 | ✅원칙 |
12. 인증 / SSO / HR
| # | 지시 | 상태 |
|---|---|---|
| 12.1 | 직원 인사(조직) 정보는 API 방식 | ✅설계 |
| 12.2 | Open SSO 도입 | ✅설계 |
13. 평면도 / 기타
| # | 지시 | 상태 |
|---|---|---|
| 13.1 | 도면 안 열림 / AI 시각화 어디감 | ✅원인 |
| 13.2 | ReRoomAI 기능 (나노바나나 image-to-image) | ⏳ |
미해결·대기 요약 (다음 우선 처리 — 2026-07-14 갱신)
소유자 조치 대기:
Gemini API 유료 키 교체(시연 블로커)→ 해소(2026-07-14, 소유자 "Gemini API 지출 처리"): 유료 전환 확인 — S7 조감·ReRoom 실렌더 라이브 E2E 성공(아래 세션 3 로그).- 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명은 → 해소(V56, 소유자 지시 "수신자 데이터 실제 이메일로 정비"): 시드 주소 114행 전량을 소유자 Gmail plus-addressing(@kintex.test 시드 주소라 실발송해도 반송됨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-cardNifty 구조·--fs-micro/--fw-*토큰·공용 제목클래스·테이블.kx-table6화면 수렴, 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 정비(스팸함 회피).
처리 로그 (2026-07-14 세션 3 — Gemini 유료 전환 후 렌더 파이프라인 완결)
소유자 지시: ① "이어서 작업 — Gemini API 지출 처리했어" ② "오른쪽 스크롤이 없는 그리드 다수" (후속 처리)
Gemini 라이브 검증: 유료 전환 즉시 gemini-3.1-flash-image-preview 직접 호출 성공(385KB). 이어 실제 파이프라인 E2E(OTP 로그인→S7 조감 발행→ReRoom 참조사진 업로드→R1 발행)에서 이미지는 생성되는데 상태가 영원히 QUEUED인 결함 발견 — 429 시절 가려져 있던 완결 루프 갭 2중:
- 워커→백엔드 콜백 부재: 워커는 Redis pub/sub 발행만 하고 백엔드가 기다리는
POST /api/internal/render/callback을 호출하지 않음 → DB/조회 상태 미갱신. 수정(b5d29e6): worker.py_callback_backend()(X-Worker-Token, imageUrl/schemaHash/modelVersion/errorMessage, 실패 비치명). - RENDER_WORKER_TOKEN 불일치: nanobanana.env와 kintex.env의 토큰이 서로 다름 → 콜백 401. 수정(서버): kintex.env 값으로 동기화+워커 재시작.
- 산출 이미지 서빙 부재: /renders 정적 서빙이 백엔드·nginx 어디에도 없음. 수정: WebMvcConfig
/renders/**→RENDER_OUTPUT_DIR+ SecurityConfig permit + nginx/uploads/·/renders/프록시(기존 /uploads도 SPA 폴백으로 깨져 있던 것 함께 해소). - 워커 로그 유실: stdout 블록버퍼링으로 worker.log에 이벤트/콜백 로그가 안 남음 → 유닛에
PYTHONUNBUFFERED=1.
최종 E2E(라이브): S7 조감·R1 ReRoom 모두 발행→워커 라이브 렌더(live=true·degraded=false)→콜백 200→status DONE + imageUrl→HTTPS 200(image/png) 완전 자율 완결. 렌더 품질 포토리얼(S7 파란 KINTEX DEMO 부스 조감 / R1 참조사진 기반 목재톤 시안). 스테일 QUEUED 잡 3건 콜백 백필로 DONE 처리. nginx sites-enabled의 .bak 사본 로드(중복 vhost 경고) 정리.
시연 블로커 전부 해소 — AI_DEMO_SCRIPT.pptx 4개 데모 흐름 모두 실동작 가능 상태.
처리 로그 (2026-07-14 세션 4 — 백로그 잔여 일괄 소진)
소유자 지시: "이어서 작업" (세션 3에서 진행 중이던 백로그 스윕 마무리)
designer 백로그 전량 해소 (design.md v2.5, 커밋 d548044): B-01 SCR-06 조립부스 모드 신설(간판·가구·조명 옵션 패널 + 전용 Stitch 프롬프트, SCR-05 분기) · B-04 화면 집계 정정(P0 코어 15 · 총 89화면, SCR-T0~T3 편입) · B-05 정산 메뉴 IA 정합(SCR-21) · B-06 이메일 인증 로그인 프롬프트 · B-07 공유 버튼 + 위반 핀 1:1 정렬 · B-08 판매면적 산술 정정(4,590㎡) · B-10 Phase 2/3 라벨. BACKLOG.md designer open 항목 0.
reviewer 백로그 전량 해소 (커밋 3f479a9): R13-01 SCR-13 매출 추세에 AI 수요예측 점선 실렌더(클라이언트 최소제곱 선형회귀, 향후 2개월, 점 3개 미만 graceful 생략) · R15-02 카테고리 기본값 "기본값" 배지 표기 · R17-01 스타일가이드 §8 시스템 아이콘 라이브러리(icons.tsx 자동 열거) · R17-02 CHART.warning→violationWarn 개명(잔여 사용처 0) · 위생: MeetingPage·MultilingualCmsPage stale 헤더 주석 정정. BACKLOG.md 검증 백로그 open 항목 0.
플로어플랜 뷰어 조작 (소유자 지시, 커밋 1c4edb0): 캔버스 마우스휠 확대/축소(0.3~4x, non-passive) + 왼쪽 드래그 이동(pointer capture, 3px 임계, 드래그 직후 click 캡처 차단으로 부스 선택 오발 방지). ★끊긴 세션의 미배선 1건 발견·해소 — onZoomChange가 부모(BoothLayoutEditorPage)에 전달되지 않아 휠 줌이 죽어 있던 것을 배선.
GAP_AUDIT 재판정 (커밋 41503f7): G-01~G-09 전량 해소를 코드/엔드포인트/V50~V56 기준 재확인 — 코드 미개발 잔여 0건. 로드맵 잔여는 서류 HWP 렌더·AppQr iOS(EAS G3) 2건뿐.
검증: tsc 0 · vite build 통과 · push 후 배포 게이트(번들 마커 + public API) 통과.
처리 로그 (2026-07-14 세션 5 — LIVE 데모 배치 완성 + 부스 자동 배치 "평면도 안" 정렬)
소유자 지시: ① "LIVE 데모 배치(진행중) → 완성 할 것!" ② "부스 자동 배치" ③ "평면도 안에 배치 해 줘야 하는 것 아닌가? 평면도 안에 자동 배치 해 줘야 한다."
근본원인 — 부스가 평면도 밖에 보이던 이유(2중):
- 도면 정렬 부재: 홀 도면 JPG는 여백·범례·미니맵을 포함한 전체 도면인데, 캔버스가 이미지를 홀 사각형(0,0~W,H m)에 통째로 스트레치(
preserveAspectRatio=none) → 부스 그리드가 노란 전시 바닥면 밖(여백·범례 위)까지 덮임. - 하드코딩 홀 치수: BoothLayoutEditorPage가
hallDims=[126,90]고정 — 백엔드는 실측 홀 치수로 배치를 생성하므로 축척 불일치.
수정 (커밋 0cc7f26):
hallFloorplan.ts: 홀 1~10 도면 JPG의 전시 바닥면(1전시장 연노랑·2전시장 라임그린) bbox를 **색상 블롭 자동 측정(최대 연결 성분, Pillow)**으로 산출한 캘리브레이션FLOOR_REGIONS추가.FloorplanCanvas: 캘리브레이션 영역이 홀 사각형에 오도록 도면을 역산 배치 → 부스 좌표가 도면의 채색 바닥면 "안"에 정확히 놓임. 언더레이 가시성 0.3→0.55.BoothLayoutEditorPage:layout.hall.dimsM실측 치수 사용(126×90 하드코딩 제거), 프론트LayoutDto에 누락됐던hall(HallInfoDto) 타입 추가.FloorplanServiceImpl.packBooths: 무시되던 주출입구·무대·라운지 수를 예약 영역으로 반영 — 중앙 교차 주통로(40m 이상 변), 출입구 전면 클리어존(9×6m), 무대(12×9m+버퍼, 후면), 라운지(9×9m+버퍼, 중앙). 배치안이 실제 전시 평면도처럼 구획됨.
세션4 미커밋 WIP 완성 (커밋 c686365): admin 실집계 통계 API(/api/admin/stats, SCR-16)·옥션 실시간 순위 WebSocket 푸시(/topic/auctions/{id}/ranking, afterCommit·봉인입찰 마스킹 유지·폴링 폴백)·CMS 예약 게시(30초 DB 폴러+V58 부분 인덱스). 컴파일은 됐으나 CmsServiceTest가 신규 AuditLogService 생성자 미반영으로 테스트 컴파일 실패 → 수정.
검증: gradle test 통과 · tsc 0 · vite build 통과 · 매퍼 XML well-formed 0건 · push→자동배포 → 번들 스왑 확인(D_hzGGkv→Cmx0ZsFU, 캘리브레이션 값 번들 포함 확인) · health UP · HTTP 스모크 13/13 통과. ★V58 라이브 dry-run은 이 세션에 SSH 자격증명(KINTEX_SSH_PASSWORD env) 부재로 생략 — V19 기존 컬럼 대상 CREATE INDEX IF NOT EXISTS 멱등이라 저위험, 배포 스크립트 health 게이트+롤백이 커버.
잔여: 도면 교체 시 캘리브레이션 재측정 필요(스크립트 패턴은 색상 블롭 최대 연결 성분). 배치안 내 무대/라운지 시각 표기(예약 공간만 비움, 오브젝트 미표시)는 후속 후보.
세션 5 추가 지시 처리 (같은 날 연속 — 실 운영 전환)
소유자 지시(순차): ① "전시장 선택하여 실 운영" ② "평면도 목록 보여라 / 홀 기준인가" ③ "대분류>중분류>소분류" ④ "데이터는 트리구조" ⑤ "이미지 생성은 버튼 클릭할 때만" ⑥ "이미지 클릭 시 확대 팝업" ⑦ "나노바나나 이미지 저장 기능(조회 재열람·입찰 참고용)" ⑧ "자동 배치를 사용자가 쉽게 기획하여 재구성"
처리(커밋 6c0d364, 배포 검증 완료):
- V59: 홀 치수 전 홀(10) 도면 방향 정렬(예: H1 63×171→171×63, H7 126×90→90×126) + 가정 비상구·트렌치 재유도. 근거: 도면 JPG 10장 전수 실측 — 전 홀이 DB와 90° 뒤집혀 있었음.
- V60 hall_zone(트리): 대분류(전시장)>중분류(홀)>소분류(구역) — 도면 실측 구획(1A/1B·6A/6B/6C·7A/7B·8A/8B·9B/9A·10B/10A, 9·10홀은 A가 아래).
GET /api/halls/tree. - 자동배치 3단계 위저드(AutoLayoutDialog 재구성): ①어디에(트리 캐스케이드) ②조건(자연어+AI 해석) ③3안 비교. 구역 선택 시
zoneId경계 안에서만 패킹. - 이미지 버튼 전용 생성: autoGenerate의 S7 자동 발행 제거(Gemini 쿼터 보호),
POST …/auto-generate/preview신설 — 카드별 "조감 이미지 생성" 버튼 클릭 시에만 발행. - 확대 팝업+저장: 생성 이미지 클릭 → 라이트박스(워터마크 고지 유지) + "이미지 저장"(다운로드). 렌더는 render_job 영속 → 갤러리(boothRef=HALL-{hallId}) 재열람·옥션 MaterialPackage.aiImageUrl 참고 재사용.
- P0 결함 발견·해소: 프론트가 apply-option을 호출하지 않아 "이 안으로 편집 시작"이 배치를 저장하지 않았음 → 실저장 배선.
- 캘리브레이션 교정: H8·H10 도면은 중앙 통로가 색 영역을 갈라 최대 블롭 측정이 하부 절반만 잡았음 → 유의미 블롭 합집합으로 재측정.
- 문서: PLANNING v3.5(M2-1 이지 플로우, planner)·design.md v2.6(SCR-03/04 위저드·라이트박스, designer).
검증: gradle test·tsc·vite build·매퍼 XML 전부 통과 → push→자동배포(번들 CYBPm4tX)→health UP→스모크 13/13. V59/V60은 배포 health 게이트로 검증(SSH 자격증명 이 세션 부재로 사전 dry-run 생략 — 멱등 설계).
미사용 CAD(DWG) 질의 답변 기록: JPG는 시각 언더레이용, DWG(1전시장 층별 평면 3장+전기·설비 트렌치 / 2전시장 평면·전력간선·철골기둥 주심도)는 실측 데이터원. DWG는 사유 바이너리라 즉시 파싱 불가 — ODA 변환→DXF→ezdxf 레이어 추출 파이프라인으로 트렌치 실좌표(현 6m 가정 그리드)·기둥(현 미반영)·비상구 실좌표(현 변 중앙 가정) 대체가 후속 과제(PLANNING R4 정합).