# KT AI 기반 소상공인 이벤트 자동 생성 서비스 - 프론트엔드 UI/UX 설계서 ## 문서 정보 - **작성일**: 2025-10-24 - **버전**: 1.0 - **기술 스택**: Next.js 14 + React 18 + TypeScript 5 - **기반 문서**: design/uiux/uiux-design.md, 프로토타입 분석 - **프로토타입**: design/uiux/prototype/\*.html --- ## 1. UI/UX 설계 ### 1.1 UI 프레임워크 선택 **선택한 프레임워크**: Material-UI (MUI) v6 **선택 이유**: - React 18과 Next.js 14와의 완벽한 호환성 - TypeScript 기본 지원 - 모바일 우선 반응형 디자인 (Mobile First) - 접근성 (WCAG 2.1 AA) 기본 준수 - 풍부한 컴포넌트 라이브러리 - KT 브랜드 컬러 커스터마이징 용이 **대안 고려**: - Ant Design: 한국어 지원 우수하나 파일 크기가 큼 - Chakra UI: 경량이나 기업 디자인 시스템에 부적합 - Tailwind CSS + HeadlessUI: 커스터마이징은 우수하나 개발 속도 느림 **최종 결정**: MUI의 컴포넌트 완성도와 기업용 UI 패턴 지원으로 선택 --- ### 1.2 화면 목록 정의 #### 인증 영역 (4개) | 화면 ID | 화면명 | URL | 설명 | |---------|--------|-----|------| | AUTH-01 | 로그인 | `/login` | 전화번호/비밀번호 로그인 | | AUTH-02 | 회원가입 | `/register` | 소상공인 회원가입 (매장 정보 포함) | | AUTH-03 | 프로필 | `/profile` | 사용자 및 매장 정보 관리 | | AUTH-04 | 로그아웃 확인 | Modal | 로그아웃 확인 다이얼로그 | #### 대시보드 영역 (2개) | 화면 ID | 화면명 | URL | 설명 | |---------|--------|-----|------| | DASH-01 | 대시보드 | `/` | KPI 요약, 빠른 시작, 진행 중 이벤트 | | DASH-02 | 이벤트 목록 | `/events` | 전체 이벤트 목록 (필터, 검색, 페이징) | #### 이벤트 생성 플로우 (6개) | 화면 ID | 화면명 | URL | 설명 | Funnel Step | |---------|--------|-----|------|-------------| | EVENT-01 | 이벤트 목적 선택 | `/events/create/objective` | 4가지 목적 선택 | Step 1 | | EVENT-02 | AI 이벤트 추천 | `/events/create/recommendation` | AI 트렌드 분석 및 추천 | Step 2 | | EVENT-03 | 콘텐츠 미리보기 | `/events/create/content` | SNS 이미지 스타일 선택 | Step 3 | | EVENT-04 | 콘텐츠 편집 | `/events/create/edit` | 텍스트 및 이미지 편집 | Step 4 | | EVENT-05 | 배포 채널 선택 | `/events/create/channels` | 배포 채널 선택 | Step 5 | | EVENT-06 | 최종 승인 | `/events/create/publish` | 최종 검토 및 배포 | Step 6 | #### 이벤트 관리 및 모니터링 (5개) | 화면 ID | 화면명 | URL | 설명 | |---------|--------|-----|------| | MANAGE-01 | 이벤트 상세 | `/events/[id]` | 이벤트 상세 정보 및 실시간 KPI | | MANAGE-02 | 참여자 목록 | `/events/[id]/participants` | 참여자 관리 및 필터링 | | MANAGE-03 | 이벤트 참여 (고객용) | `/participate/[id]` | 고객 이벤트 참여 화면 | | MANAGE-04 | 당첨자 추첨 | `/events/[id]/draw` | 당첨자 추첨 및 관리 | | MANAGE-05 | 성과 분석 | `/analytics` | 실시간 대시보드 및 성과 분석 | **총 17개 화면 (모달 포함)** --- ### 1.3 화면 간 사용자 플로우 ``` [로그인] → [대시보드] ←→ [Bottom Navigation] ↓ ┌──────┴──────┐ ↓ ↓ [이벤트 목록] [성과 분석] ↓ ↓ [이벤트 상세] → [참여자 목록] → [당첨자 추첨] [대시보드] → [FAB: 새 이벤트] → [이벤트 생성 Funnel] ↓ (Objective → AI추천 → 콘텐츠 → 편집 → 채널 → 승인) ↓ [이벤트 상세] [Bottom Navigation] - 홈: 대시보드 - 이벤트: 이벤트 목록 - 분석: 성과 분석 - 프로필: 프로필 ``` --- ### 1.4 화면별 상세 설계 #### 1.4.1 AUTH-01: 로그인 **상세 기능**: - 전화번호 (010XXXXXXXX) 입력 - 비밀번호 입력 - "로그인 유지" 체크박스 - 로그인 버튼 (API: POST /users/login) - 회원가입 링크 - 비밀번호 찾기 링크 (향후 구현) **UI 구성요소**: - Logo (KT 로고) - TextField: phoneNumber (pattern 검증) - TextField: password (type="password") - Checkbox: "로그인 유지" - Button: "로그인" (variant="contained", color="primary") - Link: "회원가입", "비밀번호 찾기" **인터랙션**: - 전화번호 입력 시 자동 하이픈 제거 - 비밀번호 8자 이상 검증 - Enter 키로 로그인 - 로그인 성공 시 "/" 리다이렉트 - 로그인 실패 시 에러 Toast 표시 --- #### 1.4.2 EVENT-01 ~ EVENT-06: 이벤트 생성 Funnel **Funnel 구현**: `@use-funnel/next` 사용 **Funnel 설계**: ```typescript const steps = [ 'objective', // 목적 선택 'recommendation', // AI 추천 'content', // 콘텐츠 미리보기 'edit', // 콘텐츠 편집 'channels', // 배포 채널 'publish' // 최종 승인 ] as const; // useFunnel 사용 const [Funnel, state, setStep] = useFunnel({ id: 'event-creation', initial: 'objective' }); ``` **Step 1: Objective (목적 선택)** *상세 기능*: - 4개 목적 중 1개 선택 (Radio) 1. 신규 고객 유치 2. 재방문 유도 3. 매출 증대 4. 인지도 향상 - 선택 후 다음 버튼 활성화 - API: POST /events/objectives *UI 구성요소*: - Stepper: 1/6 진행 표시 - OptionCard: 4개 (아이콘 + 제목 + 설명) - Button: "다음" (하단 고정) *인터랙션*: - 카드 클릭 시 Radio 선택 - 선택 시 카드 강조 (border: KT Red) - 다음 버튼 클릭 → API 호출 → eventId 저장 → Step 2 이동 --- **Step 2: AI Recommendation (AI 추천)** *상세 기능*: - AI 트렌드 분석 결과 표시 (업종, 지역, 시즌) - 예산별 추천 이벤트 (저/중/고) - 각 예산당 온라인/오프라인 2가지 방식 제공 - 총 6개 옵션 중 1개 선택 - 이벤트명, 경품 인라인 편집 가능 - 예산 네비게이션 (Sticky) - API: POST /events/{eventId}/ai-recommendations - Job 발행 → 폴링 (GET /jobs/{jobId}) *UI 구성요소*: - TrendAnalysis Card: 3개 (업종/지역/시즌) - BudgetNavigation: 3개 버튼 (Sticky) - RecommendationCard: 6개 (온라인/오프라인 배지, 편집 가능 제목/경품) - LoadingIndicator: AI 처리 중 (5초 예상) - Button: "다음" *인터랙션*: - 예산 네비게이션 클릭 → smooth scroll - 이벤트명/경품 hover → 점선 테두리 (편집 가능 표시) - 클릭 → 인라인 편집 (TextField 전환) - Enter/Blur → 저장 - AI Job 폴링 (5초 간격) - 완료 시 추천 결과 표시 - 1개 선택 → PUT /events/{eventId}/recommendations → Step 3 이동 --- **Step 3: Content (콘텐츠 미리보기)** *상세 기능*: - 5가지 SNS 이미지 스타일 선택 1. 심플 2. 모던 3. 귀여움 4. 고급스러움 5. 트렌디 - 각 스타일 미리보기 이미지 - "크게보기" 버튼 → 전체화면 모달 - API: POST /events/{eventId}/images - Job 발행 → 폴링 (GET /jobs/{jobId}) *UI 구성요소*: - StyleCard: 5개 (이미지 + 제목 + 설명 + "크게보기") - SelectBadge: 우측 상단 (선택 시만 표시) - FullscreenModal: 이미지 확대 - LoadingIndicator: 이미지 생성 중 (5초 예상) - Button: "다음" *인터랙션*: - 카드 클릭 → Radio 선택 (숨김) - 선택 시 테두리 강조 + 체크 배지 - "크게보기" → 전체화면 모달 (이벤트 버블링 방지) - Job 폴링 (3초 간격) - 완료 시 이미지 URL 표시 - 1개 선택 → PUT /events/{eventId}/images/{imageId}/select → Step 4 이동 --- **Step 4: Edit (콘텐츠 편집)** *상세 기능*: - 텍스트 편집 (제목, 경품, 참여 안내) - 실시간 미리보기 - API: PUT /events/{eventId}/images/{imageId}/edit *UI 구성요소*: - TextField: 제목 - TextField: 경품 - TextField: 참여 안내 (multiline) - PreviewCard: 실시간 미리보기 (우측/하단) - Button: "다음", "저장" *인터랙션*: - 입력 시 debounce (300ms) 후 미리보기 업데이트 - 저장 버튼 → 임시 저장 - 다음 버튼 → API 호출 → Step 5 이동 --- **Step 5: Channels (배포 채널 선택)** *상세 기능*: - 복수 채널 선택 (Checkbox) - 우리동네TV - 링고비즈 - SNS (Instagram, Naver, Kakao) - QR코드 - 채널별 옵션 (조건부 표시) - API: PUT /events/{eventId}/channels *UI 구성요소*: - Checkbox: 각 채널 - ConditionalOptions: 각 채널 (펼침/접힘) - Button: "다음" *인터랙션*: - 체크박스 선택 → 해당 옵션 펼침 - 최소 1개 선택 필수 - 다음 버튼 → API 호출 → Step 6 이동 --- **Step 6: Publish (최종 승인)** *상세 기능*: - 이벤트 요약 표시 - 이미지 미리보기 - 배포 채널 목록 - 일정 설정 (시작일, 종료일) - 최종 승인 및 배포 - API: POST /events/{eventId}/publish *UI 구성요소*: - SummaryCard: 이벤트 정보 - ImagePreview: 최종 이미지 - ChannelBadges: 선택된 채널 - DatePicker: 시작일, 종료일 - Button: "수정" (이전 단계), "승인 및 배포" *인터랙션*: - 수정 버튼 → Funnel 이전 단계 이동 - 승인 버튼 → Confirm 다이얼로그 → API 호출 → 배포 완료 Toast → `/events/[id]` 이동 --- #### 1.4.3 MANAGE-01: 이벤트 상세 **상세 기능**: - 이벤트 헤더 (이미지, 제목, 상태, 기간) - 실시간 KPI (4개) - 참여자 수 - 조회수 - ROI - 전환율 - 빠른 액션 (4개 버튼) - 참여자 목록 - 당첨자 관리 - 성과 분석 - 이벤트 수정 - 참여 추이 차트 (Line Chart) - API: GET /events/{eventId} **UI 구성요소**: - EventHeader: 이미지 + 정보 - KPICard: 4개 (Grid) - ActionButton: 4개 (Grid) - LineChart: 참여 추이 (Chart.js) **인터랙션**: - 실시간 업데이트 (5분마다 자동 갱신) - Pull to Refresh (모바일) - 액션 버튼 클릭 → 해당 페이지 이동 --- #### 1.4.4 MANAGE-03: 이벤트 참여 (고객용) **상세 기능**: - 이벤트 이미지 - 이벤트 정보 (제목, 경품, 참여 방법) - 참여 폼 (이름, 전화번호) - 개인정보 동의 (필수) - 마케팅 수신 동의 (선택) - API: POST /events/{eventId}/participate **UI 구성요소**: - EventBanner: 이미지 - InfoCard: 이벤트 정보 - TextField: 이름, 전화번호 - Checkbox: 개인정보 동의, 마케팅 동의 - Button: "참여하기" **인터랙션**: - 전화번호 검증 (010-XXXX-XXXX) - 중복 참여 방지 - 개인정보 동의 필수 - 참여 성공 시 응모 번호 모달 표시 --- ### 1.5 화면 간 전환 및 네비게이션 **Bottom Navigation** (4개 탭): - 홈 (`/`): DASH-01 대시보드 - 이벤트 (`/events`): DASH-02 이벤트 목록 - 분석 (`/analytics`): MANAGE-05 성과 분석 - 프로필 (`/profile`): AUTH-03 프로필 **Header Navigation**: - 로고 (클릭 시 홈 이동) - 뒤로가기 버튼 (조건부 표시) - 프로필 아이콘 (로그인 시만 표시) **FAB (Floating Action Button)**: - 위치: 우측 하단 고정 - 기능: 새 이벤트 생성 (`/events/create/objective`) - 표시 조건: 대시보드, 이벤트 목록 화면에서만 --- ### 1.6 반응형 설계 전략 **Breakpoints**: - Mobile: 320px ~ 767px (기본) - Tablet: 768px ~ 1023px - Desktop: 1024px 이상 **레이아웃 변화**: | 화면 | Mobile | Tablet | Desktop | |------|--------|--------|---------| | 대시보드 | KPI 세로 스택 | KPI 2x2 Grid | KPI 4열 + 사이드바 | | 이벤트 목록 | 1열 | 2열 | 3열 | | 이벤트 생성 | 세로 스택 | 세로 스택 | 편집 \| 미리보기 (Split) | | 성과 분석 | 차트 세로 스택 | 차트 2x1 Grid | 차트 2x2 Grid | **반응형 컴포넌트**: - `Box` with `sx` prop (MUI) - `Grid` with `xs/md/lg` props - `useMediaQuery` hook - `Container` with `maxWidth` prop --- ### 1.7 접근성 보장 방안 **WCAG 2.1 AA 준수**: - 색상 대비: 4.5:1 (텍스트), 3:1 (UI 요소) - 터치 영역: 최소 44x44px - 키보드 네비게이션: Tab, Enter, Escape 지원 - Focus Indicator: 명확한 포커스 표시 **스크린 리더 지원**: - ARIA Labels: 모든 버튼, 링크, 폼 필드 - ARIA Roles: 적절한 역할 지정 - Live Regions: 동적 콘텐츠 업데이트 알림 **대안 제공**: - 색상 외 표현: 아이콘 + 텍스트 조합 - 이미지 alt 텍스트 - 폼 검증 에러 메시지 --- ### 1.8 성능 최적화 방안 **Next.js 최적화**: - App Router 사용 (Next.js 14) - Server Components (기본) - Client Components (인터랙션 필요 시만) - Image 컴포넌트 (자동 최적화) - Font 최적화 (next/font) **Code Splitting**: - 페이지별 자동 코드 분할 - Dynamic Import (Chart.js, 큰 라이브러리) - Lazy Loading (이미지, 컴포넌트) **캐싱 전략**: - React Query (서버 상태 관리) - staleTime: 5분 (대시보드) - cacheTime: 30분 - refetchOnWindowFocus: true - SWR (대안) - Redux (클라이언트 상태 관리, 필요 시) **이미지 최적화**: - WebP 포맷 (fallback: JPG) - 압축: Quality 80-85% - Lazy Loading - Responsive Images (srcset) **폰트 최적화**: - next/font 사용 - Font Display: swap - Preload: 주요 폰트 - Subset: 한글 + 영문 + 숫자 **애니메이션 최적화**: - GPU 가속: transform, opacity - Framer Motion (선택적 사용) - CSS Transitions (기본) --- ## 2. 참조 문서 - **프로토타입**: design/uiux/prototype/*.html - **UI/UX 설계서**: design/uiux/uiux-design.md - **스타일 가이드**: design/uiux/style-guide.md (→ design/frontend/style-guide.md) - **정보 아키텍처**: design/frontend/ia.md - **API 매핑 설계서**: design/frontend/api-mapping.md --- ## 3. 기술 스택 요약 | 항목 | 기술 | |------|------| | 프레임워크 | Next.js 14 (App Router) | | 라이브러리 | React 18 | | 언어 | TypeScript 5 | | UI 프레임워크 | Material-UI (MUI) v6 | | Funnel 관리 | @use-funnel/next | | 상태 관리 | React Query v5 (서버 상태), Zustand (클라이언트 상태) | | 폼 관리 | React Hook Form v7 + Zod (검증) | | 차트 | Chart.js v4 + react-chartjs-2 | | 날짜 | dayjs | | HTTP 클라이언트 | Axios | | 스타일링 | MUI sx prop, Emotion (CSS-in-JS) | --- ## 4. 변경 이력 ### Version 1.0 (2025-10-24) - 초안 작성 - Next.js 14 기반 설계 - @use-funnel/next 검토 및 적용 - MUI v6 선택 - 반응형 디자인 전략 수립 - 접근성 및 성능 최적화 방안 수립 --- **문서 끝**