24 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 유료 키 교체(시연 블로커) — 무료 티어 쿼터 0(429)으로 S7 조감·ReRoom 실렌더 불가. 텍스트 AI(Claude)는 정상.
- EDM 운영 실발송 개방 여부 — 현재 이중 잠금(요청 live=true + 서버 EDM_TEST_MODE=false 둘 다 필요). 테스트 발송은 검증 완료.
완료 처리(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 정직화, 본 로그 갱신 — 커밋·배포·게이트 검증 후 마감.