mirror of
https://github.com/ktds-dg0501/kt-event-marketing-fe.git
synced 2025-12-06 08:16:23 +00:00
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
14 KiB
14 KiB
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 설계:
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)
- 신규 고객 유치
- 재방문 유도
- 매출 증대
- 인지도 향상
- 선택 후 다음 버튼 활성화
- 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 이미지 스타일 선택
- 심플
- 모던
- 귀여움
- 고급스러움
- 트렌디
- 각 스타일 미리보기 이미지
- "크게보기" 버튼 → 전체화면 모달
- 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 |
반응형 컴포넌트:
Boxwithsxprop (MUI)Gridwithxs/md/lgpropsuseMediaQueryhookContainerwithmaxWidthprop
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 선택
- 반응형 디자인 전략 수립
- 접근성 및 성능 최적화 방안 수립
문서 끝