kintex/docs/OWNER_FEEDBACK.md
zio 712d71d2cc docs: log AI-first session + stale deploy_server root cause (2026-07-14)
Records the AI feature slices, demo deck/sample-data registration,
Gemini free-tier quota blocker, and the confirmed CI/CD defect: a
3-day-old deploy_server.py process held port 9999 with pre-clean-build
kintex logic, shipping stale jars on two consecutive deploys. Fixed by
restarting zioinfo-deploy; jar-content verification added to the gate
checklist. This push also retriggers the pipeline on fresh code.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 01:16:22 +09:00

219 lines
19 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 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-13 갱신)
**이번 세션 작업 중:**
1. **Tabulator 기능** (1.3 / task #32) — KxDataTable 자체구현(정렬·필터·페이지·CSV)
2. **브레드크럼 + 상세→메인 복귀 + 404** (4.4)
3. **모바일 역할별 랜딩** (4.3)
4. **메시지 관리 프론트 화면** (6.6 / task #35 — 백엔드 V48은 완료, 화면 부재 확인)
5. **전 화면 공백없는 반응형 스윕** (1.11 / task #39)
**잔여 대기:**
6. **Nifty 버튼/드롭다운/List Group 등 잔여 컴포넌트 정렬** (1.5 부분)
7. **경계선 회색 지정화면 정렬** (1.10 부분)
8. **ReRoomAI image-to-image** (13.2 / visualizer 트랙)
~~완료 처리(2026-07-13 배포 확인): 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-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` 실행).