kintex/docs/OWNER_FEEDBACK.md
2026-07-15 00:36:57 +09:00

38 KiB
Raw Blame History

소유자 피드백·지시 로그 (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 갱신)

소유자 조치 대기:

  1. Gemini API 유료 키 교체(시연 블로커)해소(2026-07-14, 소유자 "Gemini API 지출 처리"): 유료 전환 확인 — S7 조감·ReRoom 실렌더 라이브 E2E 성공(아래 세션 3 로그).
  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 세션)

배포 완료 (라이브): 커밋 214b6df6e95ac6 → 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 정비(스팸함 회피).


처리 로그 (2026-07-14 세션 3 — Gemini 유료 전환 후 렌더 파이프라인 완결)

소유자 지시: ① "이어서 작업 — Gemini API 지출 처리했어" ② "오른쪽 스크롤이 없는 그리드 다수" (후속 처리)

Gemini 라이브 검증: 유료 전환 즉시 gemini-3.1-flash-image-preview 직접 호출 성공(385KB). 이어 실제 파이프라인 E2E(OTP 로그인→S7 조감 발행→ReRoom 참조사진 업로드→R1 발행)에서 이미지는 생성되는데 상태가 영원히 QUEUED인 결함 발견 — 429 시절 가려져 있던 완결 루프 갭 2중:

  1. 워커→백엔드 콜백 부재: 워커는 Redis pub/sub 발행만 하고 백엔드가 기다리는 POST /api/internal/render/callback을 호출하지 않음 → DB/조회 상태 미갱신. 수정(b5d29e6): worker.py _callback_backend()(X-Worker-Token, imageUrl/schemaHash/modelVersion/errorMessage, 실패 비치명).
  2. RENDER_WORKER_TOKEN 불일치: nanobanana.env와 kintex.env의 토큰이 서로 다름 → 콜백 401. 수정(서버): kintex.env 값으로 동기화+워커 재시작.
  3. 산출 이미지 서빙 부재: /renders 정적 서빙이 백엔드·nginx 어디에도 없음. 수정: WebMvcConfig /renders/**RENDER_OUTPUT_DIR + SecurityConfig permit + nginx /uploads/·/renders/ 프록시(기존 /uploads도 SPA 폴백으로 깨져 있던 것 함께 해소).
  4. 워커 로그 유실: 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.warningviolationWarn 개명(잔여 사용처 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중):

  1. 도면 정렬 부재: 홀 도면 JPG는 여백·범례·미니맵을 포함한 전체 도면인데, 캔버스가 이미지를 홀 사각형(0,0~W,H m)에 통째로 스트레치(preserveAspectRatio=none) → 부스 그리드가 노란 전시 바닥면 밖(여백·범례 위)까지 덮임.
  2. 하드코딩 홀 치수: 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 정합).

세션 5 추가 — DWG 파이프라인 + 평면도 DWG/JPG 탭 (2026-07-15 새벽, 커밋 d8ef5c5)

소유자 지시: ① "dwg 파이프라인 진행해" ② "평면도는 DWG, JPG 탭으로 구분" (+온프레미스 모델 추천 질의 2건)

처리:

  • 파이프라인 구축: LibreDWG 0.14(win64 dwg2dxf·dwg2SVG) + ezdxf(+recover 폴백) + matplotlib 렌더. 도구 영속: tools/cad/dwg_extract.py(inventory/extract/anchors) · tools/cad/render_hall_png.py(1회 로드→다중 밴드 crop).
  • 좌표 앵커 확정(제1전시장): 구조 그리드 Y 라벨 63m 피치(80.1m 시작)=홀 밴드, 홀 바닥 X원점 293.5m·폭 171m — 렌더 시각 검증 2회로 캘리브레이션. 트렌치 실배치 = 가로 7열(~9m 피치)+중앙 피더 확인(현행 V5 가정 6m 격자와 상이 → V61 실측 시드는 후속).
  • DWG 탭: 홀1~5 바닥면 crop PNG(margin 3m, 각 ~210KB) 빌드 내장(/media/floorplans/dwg/), 에디터 좌측 "도면" 툴그룹 JPG/DWG 탭(미보유 홀 비활성), 캘리브레이션은 렌더 파라미터 결정적.
  • 한계 기록: 밴드↔홀 번호 방향 미확증(구조 동일해 표시 유효)·A3002 평면도 DWG LibreDWG 크래시·제2전시장 렌더 후속. 상세: docs/analysis/cad-extraction.md.