mirror of
https://github.com/hwanny1128/HGZero.git
synced 2025-12-06 19:36:23 +00:00
1450 lines
46 KiB
Markdown
1450 lines
46 KiB
Markdown
# 회의록 작성 및 공유 개선 서비스 - UI/UX 설계서
|
|
|
|
버전: 1.0
|
|
작성일: 2025-10-15
|
|
작성자: 유진 (Frontend Developer)
|
|
|
|
---
|
|
|
|
## 목차
|
|
1. [프로토타입 화면 목록](#1-프로토타입-화면-목록)
|
|
2. [화면 간 사용자 플로우](#2-화면-간-사용자-플로우)
|
|
3. [화면별 상세 설계](#3-화면별-상세-설계)
|
|
4. [화면간 전환 및 네비게이션](#4-화면간-전환-및-네비게이션)
|
|
5. [반응형 설계 전략](#5-반응형-설계-전략)
|
|
6. [접근성 보장 방안](#6-접근성-보장-방안)
|
|
7. [성능 최적화 방안](#7-성능-최적화-방안)
|
|
8. [변경 이력](#8-변경-이력)
|
|
|
|
---
|
|
|
|
## 1. 프로토타입 화면 목록
|
|
|
|
### 1.1 회의 전 (Pre-Meeting)
|
|
|
|
| 화면명 | 서비스 | 목적 | 관련 유저스토리 | 중요도 |
|
|
|--------|--------|------|-----------------|--------|
|
|
| 01-로그인 | User | 사용자 인증 및 시스템 접근 | UFR-USER-010 | 필수 |
|
|
| 02-대시보드 | Meeting | 전체 현황 파악 및 빠른 액션 | - | 필수 |
|
|
| 03-회의예약 | Meeting | 회의 정보 입력 및 참석자 초대 | UFR-MEET-010 | 필수 |
|
|
| 04-템플릿선택 | Meeting | 회의 유형에 맞는 템플릿 선택 | UFR-MEET-020 | 필수 |
|
|
|
|
### 1.2 회의 중 (During-Meeting)
|
|
|
|
| 화면명 | 서비스 | 목적 | 관련 유저스토리 | 중요도 |
|
|
|--------|--------|------|-----------------|--------|
|
|
| 05-회의진행 | Meeting + STT + AI + Collaboration + RAG | 실시간 회의록 작성 및 협업 | UFR-MEET-030, UFR-STT-010, UFR-STT-020, UFR-AI-010, UFR-COLLAB-010, UFR-RAG-010, UFR-RAG-020 | 핵심 |
|
|
| 06-검증완료 | Collaboration | 참석자별 회의록 섹션 검증 | UFR-COLLAB-030 | 필수 |
|
|
|
|
### 1.3 회의 후 (Post-Meeting)
|
|
|
|
| 화면명 | 서비스 | 목적 | 관련 유저스토리 | 중요도 |
|
|
|--------|--------|------|-----------------|--------|
|
|
| 07-회의종료 | Meeting + AI | 회의 통계 및 최종 확정 | UFR-MEET-040, UFR-MEET-050, UFR-AI-020 | 필수 |
|
|
| 08-회의록공유 | Meeting + Notification | 회의록 공유 및 배포 | UFR-MEET-060, UFR-NOTI-010 | 필수 |
|
|
| 09-Todo관리 | Todo + Calendar | Todo 할당 및 진행 상황 추적 | UFR-TODO-010, UFR-TODO-020, UFR-TODO-030, UFR-CAL-010 | 필수 |
|
|
|
|
---
|
|
|
|
## 2. 화면 간 사용자 플로우
|
|
|
|
### 2.1 메인 플로우 다이어그램
|
|
|
|
```
|
|
[회의 전]
|
|
01-로그인 → 02-대시보드 → 03-회의예약 → 04-템플릿선택
|
|
|
|
[회의 중]
|
|
02-대시보드 → 05-회의진행 (실시간 작성/동기화/용어 설명) → 06-검증완료
|
|
|
|
[회의 후]
|
|
06-검증완료 → 07-회의종료 (통계 확인) → 08-회의록공유 → 09-Todo관리
|
|
```
|
|
|
|
### 2.2 주요 사용자 시나리오
|
|
|
|
#### 시나리오 1: 신규 회의 진행 (Full Flow)
|
|
```
|
|
01-로그인
|
|
↓ (인증 성공)
|
|
02-대시보드
|
|
↓ (새 회의 예약 버튼 클릭)
|
|
03-회의예약
|
|
↓ (회의 정보 입력 완료)
|
|
04-템플릿선택
|
|
↓ (템플릿 선택 완료, 회의 시작 시간 도래)
|
|
05-회의진행
|
|
↓ (AI 자동 작성, 참석자 실시간 편집)
|
|
06-검증완료
|
|
↓ (모든 섹션 검증 완료)
|
|
07-회의종료
|
|
↓ (최종 확정 버튼 클릭)
|
|
08-회의록공유
|
|
↓ (공유 대상 설정 및 배포)
|
|
09-Todo관리
|
|
↓ (Todo 확인 및 상태 업데이트)
|
|
02-대시보드 (완료)
|
|
```
|
|
|
|
#### 시나리오 2: 과거 회의록 조회 및 수정
|
|
```
|
|
02-대시보드
|
|
↓ (최근 회의록 카드 클릭)
|
|
05-회의진행 (읽기/편집 모드)
|
|
↓ (수정 사항 저장)
|
|
02-대시보드 (돌아가기)
|
|
```
|
|
|
|
#### 시나리오 3: Todo 관리
|
|
```
|
|
02-대시보드
|
|
↓ (대기 중인 Todo 위젯 클릭)
|
|
09-Todo관리
|
|
↓ (진행률 업데이트, 완료 처리)
|
|
02-대시보드 (돌아가기)
|
|
```
|
|
|
|
#### 시나리오 4: 알림을 통한 회의록 접근
|
|
```
|
|
알림 수신 (이메일/슬랙/인앱)
|
|
↓ (회의록 링크 클릭)
|
|
01-로그인 (미로그인 시)
|
|
↓
|
|
05-회의진행 (검토 모드)
|
|
↓ (댓글 작성, 수정 제안)
|
|
06-검증완료 (검증 버튼 클릭)
|
|
```
|
|
|
|
### 2.3 서브 플로우
|
|
|
|
- **빠른 회의 시작**: 02-대시보드 → 05-회의진행 (예약 없이 즉시 시작)
|
|
- **템플릿 재선택**: 05-회의진행 → 04-템플릿선택 → 05-회의진행
|
|
- **Todo 즉시 생성**: 05-회의진행 → 09-Todo관리 (수동 Todo 추가)
|
|
- **알림 설정**: 02-대시보드 → 설정 → 알림 설정
|
|
|
|
---
|
|
|
|
## 3. 화면별 상세 설계
|
|
|
|
### 3.1 01-로그인 화면
|
|
|
|
#### 개요
|
|
- **목적**: 사용자 인증 및 시스템 접근 권한 부여
|
|
- **관련 유저스토리**: UFR-USER-010
|
|
- **비즈니스 중요도**: 필수 (보안 및 권한 관리)
|
|
|
|
#### 주요 기능
|
|
1. 이메일/비밀번호 로그인
|
|
2. JWT 토큰 기반 인증
|
|
3. 소셜 로그인 (Google, Microsoft)
|
|
4. 비밀번호 찾기
|
|
5. Remember Me (자동 로그인)
|
|
|
|
#### UI 구성요소
|
|
|
|
**레이아웃**
|
|
- 중앙 정렬 카드 형식 (최대 너비 400px)
|
|
- 좌측/상단: 서비스 로고 및 캐치프레이즈
|
|
- 배경: 그라디언트 또는 일러스트레이션
|
|
|
|
**컴포넌트**
|
|
- 로고 및 서비스명
|
|
- 이메일 입력 필드 (type="email", required)
|
|
- 비밀번호 입력 필드 (type="password", required, 토글 표시/숨김 아이콘)
|
|
- 로그인 버튼 (Primary CTA)
|
|
- 소셜 로그인 버튼 (Google, Microsoft 아이콘 버튼)
|
|
- Remember Me 체크박스
|
|
- 비밀번호 찾기 링크
|
|
- 회원가입 링크 (시스템 관리자만 가능한 경우 숨김)
|
|
|
|
#### 인터랙션
|
|
|
|
| 사용자 액션 | 시스템 반응 |
|
|
|------------|------------|
|
|
| 이메일 입력 | 실시간 이메일 형식 검증 (유효하지 않으면 에러 메시지) |
|
|
| 비밀번호 입력 | 입력 시 마스킹, 토글 아이콘으로 표시/숨김 가능 |
|
|
| 로그인 버튼 클릭 | 로딩 스피너 표시 → JWT 토큰 발급 → 02-대시보드로 이동 |
|
|
| 소셜 로그인 버튼 클릭 | OAuth 팝업 또는 리다이렉트 → 인증 성공 시 02-대시보드로 이동 |
|
|
| 인증 실패 | 에러 메시지 표시 ("이메일 또는 비밀번호가 일치하지 않습니다") |
|
|
| 비밀번호 찾기 클릭 | 비밀번호 재설정 이메일 발송 화면으로 이동 |
|
|
|
|
#### 데이터 요구사항
|
|
|
|
**입력**
|
|
- 이메일 주소 (필수, 최대 100자)
|
|
- 비밀번호 (필수, 최소 8자)
|
|
|
|
**출력**
|
|
- JWT 액세스 토큰
|
|
- JWT 리프레시 토큰
|
|
- 사용자 정보 (ID, 이름, 이메일, 권한)
|
|
|
|
#### 에러 처리
|
|
- 네트워크 오류: "서버에 연결할 수 없습니다. 잠시 후 다시 시도해주세요."
|
|
- 인증 실패: "이메일 또는 비밀번호가 일치하지 않습니다."
|
|
- 계정 잠김: "계정이 잠겼습니다. 관리자에게 문의하세요."
|
|
|
|
---
|
|
|
|
### 3.2 02-대시보드 화면
|
|
|
|
#### 개요
|
|
- **목적**: 전체 현황 파악 및 빠른 액션 제공
|
|
- **관련 유저스토리**: 전체 서비스의 진입점
|
|
- **비즈니스 중요도**: 필수 (사용자 경험의 출발점)
|
|
|
|
#### 주요 기능
|
|
1. 예정된 회의 목록 표시
|
|
2. 최근 회의록 목록 표시
|
|
3. 대기 중인 Todo 목록 표시
|
|
4. 통계 위젯 (이번 주 회의 수, 완료된 Todo 수)
|
|
5. 빠른 액션 버튼 (새 회의 예약, 회의 시작)
|
|
6. 검색 및 필터 기능
|
|
|
|
#### UI 구성요소
|
|
|
|
**레이아웃**
|
|
- 전역 헤더 (로고, 검색, 알림, 프로필)
|
|
- 좌측 사이드바 (네비게이션 메뉴)
|
|
- 메인 영역: 그리드 레이아웃 (2x2 또는 3x2)
|
|
|
|
**위젯 구성**
|
|
1. **예정된 회의 위젯**
|
|
- 타이틀: "예정된 회의"
|
|
- 리스트: 회의 제목, 날짜/시간, 참석자 수 (최대 5개)
|
|
- 빠른 액션: "회의 시작" 버튼 (회의 시간 도래 시 활성화)
|
|
- 더보기: "모든 예정된 회의 보기"
|
|
|
|
2. **최근 회의록 위젯**
|
|
- 타이틀: "최근 회의록"
|
|
- 카드 그리드: 썸네일, 제목, 날짜, 참석자 아바타 (최대 6개)
|
|
- 상태 배지: "작성 중", "검증 중", "확정됨"
|
|
- 클릭 시: 05-회의진행 화면으로 이동
|
|
|
|
3. **대기 중인 Todo 위젯**
|
|
- 타이틀: "내가 할 일"
|
|
- 리스트: Todo 내용, 마감일, 우선순위 (최대 5개)
|
|
- 빠른 액션: 체크박스로 완료 처리
|
|
- 더보기: "모든 Todo 보기"
|
|
|
|
4. **통계 위젯**
|
|
- 이번 주 회의 수
|
|
- 완료된 Todo 비율
|
|
- 평균 회의 시간
|
|
- 차트: 주간 회의 트렌드
|
|
|
|
**빠른 액션 버튼 (FAB)**
|
|
- 우측 하단 고정 위치
|
|
- 주 버튼: "+" 아이콘 (클릭 시 확장)
|
|
- 확장 메뉴: "새 회의 예약", "즉시 회의 시작", "새 Todo 추가"
|
|
|
|
#### 인터랙션
|
|
|
|
| 사용자 액션 | 시스템 반응 |
|
|
|------------|------------|
|
|
| 검색 바에 키워드 입력 | 실시간 자동완성 (회의록 제목, 참석자, 키워드) |
|
|
| 예정된 회의 "회의 시작" 클릭 | 05-회의진행 화면으로 이동 (회의 ID 전달) |
|
|
| 최근 회의록 카드 클릭 | 05-회의진행 화면으로 이동 (읽기/편집 모드) |
|
|
| Todo 체크박스 클릭 | 즉시 완료 처리 (확인 토스트 메시지) |
|
|
| 빠른 액션 "새 회의 예약" 클릭 | 03-회의예약 화면으로 이동 |
|
|
| 빠른 액션 "즉시 회의 시작" 클릭 | 04-템플릿선택 화면으로 이동 |
|
|
| 알림 아이콘 클릭 | 알림 드롭다운 표시 (최근 알림 5개) |
|
|
| 프로필 아이콘 클릭 | 프로필 메뉴 표시 (설정, 로그아웃) |
|
|
|
|
#### 데이터 표시 요구사항
|
|
|
|
**예정된 회의**
|
|
- 회의 제목, 날짜/시간, 장소, 참석자 수
|
|
- 회의 시작 시간까지 남은 시간 표시 (예: "30분 후")
|
|
|
|
**최근 회의록**
|
|
- 회의 제목, 작성일, 참석자 아바타 (최대 3명, 초과 시 "+N")
|
|
- 상태 배지 (색상: 작성 중=노란색, 검증 중=파란색, 확정됨=초록색)
|
|
|
|
**대기 중인 Todo**
|
|
- Todo 내용 (최대 50자, 초과 시 "...")
|
|
- 마감일 (예: "D-3", "오늘", "지남" - 색상 구분)
|
|
- 우선순위 아이콘 (높음=빨간색 느낌표, 보통=회색, 낮음=숨김)
|
|
|
|
---
|
|
|
|
### 3.3 03-회의예약 화면
|
|
|
|
#### 개요
|
|
- **목적**: 회의 정보 입력 및 참석자 초대
|
|
- **관련 유저스토리**: UFR-MEET-010
|
|
- **비즈니스 중요도**: 필수 (회의 프로세스의 시작)
|
|
|
|
#### 주요 기능
|
|
1. 회의 기본 정보 입력 (제목, 날짜/시간, 장소)
|
|
2. 참석자 초대 (이메일 자동완성)
|
|
3. 회의 설명 입력 (선택)
|
|
4. 알림 설정 (30분 전, 1시간 전)
|
|
5. 외부 캘린더 연동 (Google Calendar, Outlook)
|
|
6. 반복 회의 설정 (선택)
|
|
|
|
#### UI 구성요소
|
|
|
|
**레이아웃**
|
|
- 중앙 정렬 폼 (최대 너비 800px)
|
|
- 좌측: 입력 폼
|
|
- 우측: 미리보기 카드 (입력 내용 실시간 반영)
|
|
|
|
**폼 컴포넌트**
|
|
1. **회의 제목**
|
|
- 텍스트 입력 (최대 100자, 필수)
|
|
- 플레이스홀더: "예: 2025년 1분기 전략 회의"
|
|
|
|
2. **날짜 및 시간**
|
|
- 날짜 피커 (캘린더 UI)
|
|
- 시작 시간/종료 시간 (드롭다운, 15분 단위)
|
|
- 종료 시간 자동 계산 (시작 시간 + 1시간)
|
|
|
|
3. **장소**
|
|
- 텍스트 입력 (최대 200자, 선택)
|
|
- 또는 "온라인 회의" 체크박스 (Zoom, Teams 링크 입력)
|
|
|
|
4. **참석자**
|
|
- 이메일 입력 필드 (자동완성)
|
|
- 태그 형태로 추가된 참석자 표시
|
|
- 삭제 아이콘 (X)
|
|
- 최소 1명 필수
|
|
|
|
5. **회의 설명**
|
|
- 텍스트 에리어 (최대 1000자, 선택)
|
|
- 플레이스홀더: "회의 목적 및 안건을 입력하세요"
|
|
|
|
6. **알림 설정**
|
|
- 체크박스: "회의 30분 전 알림", "회의 1시간 전 알림"
|
|
|
|
7. **반복 설정**
|
|
- 드롭다운: "반복 안 함", "매일", "매주", "매월"
|
|
- 반복 종료 날짜 선택 (반복 설정 시 표시)
|
|
|
|
8. **캘린더 연동**
|
|
- 체크박스: "Google Calendar에 추가", "Outlook에 추가"
|
|
|
|
**액션 버튼**
|
|
- 취소 (Secondary)
|
|
- 저장 후 나중에 계속 (Secondary)
|
|
- 다음: 템플릿 선택 (Primary CTA)
|
|
|
|
#### 인터랙션
|
|
|
|
| 사용자 액션 | 시스템 반응 |
|
|
|------------|------------|
|
|
| 회의 제목 입력 | 우측 미리보기 카드에 실시간 반영 |
|
|
| 날짜/시간 선택 | 종료 시간 자동 계산 (시작 + 1시간) |
|
|
| 참석자 이메일 입력 | 조직 내 사용자 자동완성 제안 |
|
|
| 참석자 선택 | 태그로 추가, 아바타 및 이름 표시 |
|
|
| 온라인 회의 체크 | 장소 입력 비활성화, 링크 입력 필드 표시 |
|
|
| 반복 설정 선택 | 반복 종료 날짜 선택 필드 표시 |
|
|
| 다음 버튼 클릭 | 필수 항목 검증 → 04-템플릿선택 화면으로 이동 |
|
|
| 필수 항목 미입력 시 | 해당 필드에 에러 메시지 및 포커스 이동 |
|
|
| 저장 버튼 클릭 | 회의 정보 저장 → 02-대시보드로 이동 (토스트 메시지) |
|
|
|
|
#### 데이터 요구사항
|
|
|
|
**입력**
|
|
- 회의 제목 (필수, 최대 100자)
|
|
- 날짜 (필수, YYYY-MM-DD)
|
|
- 시작 시간 (필수, HH:MM)
|
|
- 종료 시간 (필수, HH:MM)
|
|
- 장소 (선택, 최대 200자)
|
|
- 참석자 이메일 (필수, 최소 1명, 배열)
|
|
- 회의 설명 (선택, 최대 1000자)
|
|
- 알림 설정 (불리언 배열)
|
|
- 반복 설정 (선택, 열거형)
|
|
- 캘린더 연동 (불리언 배열)
|
|
|
|
**출력**
|
|
- 회의 ID (생성된 UUID)
|
|
- 초대 이메일 발송 상태
|
|
|
|
#### 에러 처리
|
|
- 과거 날짜 선택: "과거 날짜는 선택할 수 없습니다."
|
|
- 종료 시간 < 시작 시간: "종료 시간은 시작 시간보다 늦어야 합니다."
|
|
- 잘못된 이메일 형식: "올바른 이메일 주소를 입력하세요."
|
|
- 참석자 미입력: "최소 1명의 참석자를 추가하세요."
|
|
|
|
---
|
|
|
|
### 3.4 04-템플릿선택 화면
|
|
|
|
#### 개요
|
|
- **목적**: 회의 유형에 맞는 템플릿 선택 및 커스터마이징
|
|
- **관련 유저스토리**: UFR-MEET-020
|
|
- **비즈니스 중요도**: 필수 (회의록 구조 표준화)
|
|
|
|
#### 주요 기능
|
|
1. 회의 유형별 템플릿 표시 (일반, 스크럼, 킥오프, 주간)
|
|
2. 템플릿 미리보기
|
|
3. 템플릿 커스터마이징 (섹션 추가/삭제/순서 변경)
|
|
4. 커스텀 템플릿 저장 (나만의 템플릿)
|
|
5. 커뮤니티 템플릿 다운로드 (옵션)
|
|
|
|
#### UI 구성요소
|
|
|
|
**레이아웃**
|
|
- 상단: 진행 표시 바 (회의 예약 → **템플릿 선택** → 회의 진행)
|
|
- 좌측: 템플릿 카테고리 필터
|
|
- 중앙: 템플릿 그리드 (카드 레이아웃)
|
|
- 우측: 선택된 템플릿 미리보기 및 커스터마이징 패널
|
|
|
|
**템플릿 카드**
|
|
- 템플릿 이름
|
|
- 간단한 설명
|
|
- 사용 횟수 또는 인기도 표시
|
|
- "선택" 버튼
|
|
- "미리보기" 버튼
|
|
|
|
**기본 제공 템플릿**
|
|
1. **일반 회의**
|
|
- 참석자, 회의 목적, 안건, 논의 내용, 결정 사항, Todo
|
|
|
|
2. **스크럼 회의**
|
|
- 참석자, 어제 한 일, 오늘 할 일, 이슈/블로커
|
|
|
|
3. **프로젝트 킥오프**
|
|
- 참석자, 프로젝트 개요, 목표, 일정, 역할 분담, 리스크
|
|
|
|
4. **주간 회의**
|
|
- 참석자, 주간 실적, 주요 이슈, 다음 주 계획, 지원 필요 사항
|
|
|
|
**커스터마이징 패널**
|
|
- 섹션 리스트 (드래그 앤 드롭으로 순서 변경)
|
|
- 각 섹션:
|
|
- 섹션명 편집
|
|
- 삭제 아이콘
|
|
- 드래그 핸들
|
|
- "섹션 추가" 버튼
|
|
- "템플릿 저장" 버튼 (나만의 템플릿으로 저장)
|
|
|
|
**액션 버튼**
|
|
- 뒤로 (03-회의예약으로 이동)
|
|
- 템플릿 없이 시작 (빈 회의록)
|
|
- 선택 완료 (Primary CTA)
|
|
|
|
#### 인터랙션
|
|
|
|
| 사용자 액션 | 시스템 반응 |
|
|
|------------|------------|
|
|
| 템플릿 카드 클릭 | 우측 미리보기 패널에 템플릿 구조 표시 |
|
|
| 미리보기 버튼 클릭 | 모달로 전체 템플릿 내용 표시 |
|
|
| 섹션 드래그 앤 드롭 | 순서 변경 (시각적 피드백) |
|
|
| 섹션 삭제 아이콘 클릭 | 확인 다이얼로그 → 섹션 삭제 |
|
|
| 섹션 추가 버튼 클릭 | 섹션명 입력 다이얼로그 → 리스트 하단에 추가 |
|
|
| 템플릿 저장 버튼 클릭 | 템플릿명 입력 다이얼로그 → "나만의 템플릿"에 저장 |
|
|
| 선택 완료 버튼 클릭 | 템플릿 정보 저장 → 05-회의진행 화면으로 이동 |
|
|
| 템플릿 없이 시작 클릭 | 빈 회의록으로 05-회의진행 화면으로 이동 |
|
|
|
|
#### 데이터 요구사항
|
|
|
|
**템플릿 데이터 구조**
|
|
```json
|
|
{
|
|
"id": "template_uuid",
|
|
"name": "일반 회의",
|
|
"description": "기본 회의 구조",
|
|
"sections": [
|
|
{
|
|
"id": "section_uuid",
|
|
"name": "참석자",
|
|
"order": 1,
|
|
"required": true
|
|
},
|
|
{
|
|
"id": "section_uuid",
|
|
"name": "논의 내용",
|
|
"order": 2,
|
|
"required": false
|
|
}
|
|
],
|
|
"usage_count": 123,
|
|
"created_by": "system" // or user_id
|
|
}
|
|
```
|
|
|
|
**출력**
|
|
- 선택된 템플릿 ID
|
|
- 커스터마이징된 섹션 리스트
|
|
|
|
---
|
|
|
|
### 3.5 05-회의진행 화면 (핵심)
|
|
|
|
#### 개요
|
|
- **목적**: 실시간 회의록 작성 및 협업의 중심 화면
|
|
- **관련 유저스토리**: UFR-MEET-030, UFR-STT-010, UFR-STT-020, UFR-AI-010, UFR-COLLAB-010, UFR-RAG-010, UFR-RAG-020
|
|
- **비즈니스 중요도**: 핵심 (서비스의 가장 중요한 화면)
|
|
|
|
#### 주요 기능
|
|
1. 실시간 음성 인식 및 텍스트 변환
|
|
2. AI 회의록 자동 작성 및 실시간 업데이트
|
|
3. 실시간 협업 편집 (Google Docs 스타일)
|
|
4. 전문용어 자동 감지 및 설명 제공
|
|
5. 리치 텍스트 편집 (서식, 목록, 링크 등)
|
|
6. 버전 관리 및 변경 이력 추적
|
|
7. 댓글 및 제안 기능
|
|
8. 섹션별 검증 완료 표시
|
|
|
|
#### UI 구성요소
|
|
|
|
**레이아웃 (3단 구조)**
|
|
|
|
**좌측 패널 (250px)**
|
|
- **회의 정보**
|
|
- 회의 제목
|
|
- 날짜/시간
|
|
- 경과 시간 (실시간 타이머)
|
|
- 녹음 상태 (녹음 중/일시정지/중지)
|
|
|
|
- **참석자 목록**
|
|
- 아바타 및 이름
|
|
- 온라인 상태 (활성/비활성)
|
|
- 현재 편집 중인 위치 표시 (색상 코딩)
|
|
- 발언 횟수 표시 (옵션)
|
|
|
|
- **타임라인**
|
|
- 시간별 주요 이벤트 표시
|
|
- 클릭 시 해당 위치로 스크롤
|
|
|
|
**중앙 패널 (가변, 최소 600px)**
|
|
- **툴바**
|
|
- 서식: 볼드, 이탤릭, 밑줄, 취소선
|
|
- 목록: 번호 매기기, 글머리 기호
|
|
- 삽입: 링크, 이미지, 표
|
|
- 기타: 실행 취소, 다시 실행
|
|
|
|
- **리치 텍스트 에디터**
|
|
- 템플릿 섹션 구조 표시
|
|
- 실시간 커서 및 선택 영역 표시 (다른 사용자)
|
|
- 전문용어 하이라이트 (파란색 점선 밑줄)
|
|
- AI 자동 작성 내용 표시 (연한 회색 배경)
|
|
- 변경 사항 하이라이트 (3초간 노란색 배경)
|
|
|
|
- **섹션 헤더**
|
|
- 섹션명 (템플릿에서 정의)
|
|
- 검증 완료 체크박스
|
|
- 접기/펼치기 아이콘
|
|
|
|
**우측 패널 (350px, 토글 가능)**
|
|
- **탭 전환**
|
|
- AI 제안
|
|
- 용어 설명
|
|
- 댓글
|
|
- 버전 이력
|
|
|
|
- **AI 제안 탭**
|
|
- AI가 자동 생성한 회의록 초안
|
|
- "적용" 버튼 (클릭 시 에디터에 삽입)
|
|
- "무시" 버튼
|
|
- 실시간 업데이트 (3-5초 간격)
|
|
|
|
- **용어 설명 탭**
|
|
- 감지된 전문용어 리스트
|
|
- 각 용어 클릭 시 설명 표시
|
|
- 설명 출처 (과거 회의록, 사내 문서)
|
|
- 피드백 버튼 (도움됨/도움안됨)
|
|
|
|
- **댓글 탭**
|
|
- 댓글 리스트 (시간순)
|
|
- 댓글 작성 입력 필드
|
|
- 멘션 기능 (@참석자명)
|
|
|
|
- **버전 이력 탭**
|
|
- 버전 리스트 (시간, 작성자)
|
|
- 비교 보기
|
|
- 특정 버전으로 복원
|
|
|
|
**하단 바 (고정)**
|
|
- 좌측: 저장 상태 ("저장됨", "저장 중...", "오류")
|
|
- 중앙: 음성 인식 상태 ("음성 인식 중...", "일시정지")
|
|
- 우측: 액션 버튼
|
|
- 녹음 시작/일시정지/중지
|
|
- 회의 종료 (Primary CTA)
|
|
|
|
#### 인터랙션
|
|
|
|
| 사용자 액션 | 시스템 반응 |
|
|
|------------|------------|
|
|
| 회의 시작 버튼 클릭 | 녹음 시작 → 음성 인식 활성화 → 타이머 시작 |
|
|
| 텍스트 입력 | 실시간 저장 (Debounce 500ms) → WebSocket으로 다른 사용자에게 델타 전송 |
|
|
| 전문용어 하이라이트 호버 | 툴팁으로 간단한 설명 표시 |
|
|
| 전문용어 클릭 | 우측 패널 "용어 설명" 탭으로 전환 및 상세 설명 표시 |
|
|
| AI 제안 "적용" 클릭 | AI 제안 내용을 현재 커서 위치에 삽입 (Undo 가능) |
|
|
| 섹션 검증 완료 체크 | 섹션 배경 연한 초록색으로 변경 → 다른 사용자에게 동기화 |
|
|
| 댓글 작성 | 댓글 저장 → 관련 참석자에게 알림 발송 |
|
|
| 음성 인식 일시정지 | 녹음 중지 → 음성 인식 중지 |
|
|
| 회의 종료 버튼 클릭 | 확인 다이얼로그 → 07-회의종료 화면으로 이동 |
|
|
| 다른 사용자 편집 | 해당 사용자의 커서 및 선택 영역 표시 (색상으로 구분) → 변경 영역 하이라이트 (3초) |
|
|
| 충돌 감지 (동시 수정) | 충돌 알림 다이얼로그 → Last Write Wins 또는 수동 병합 선택 |
|
|
|
|
#### 데이터 표시 및 입력 요구사항
|
|
|
|
**실시간 동기화 데이터**
|
|
```json
|
|
{
|
|
"type": "edit",
|
|
"user_id": "user_uuid",
|
|
"user_name": "홍길동",
|
|
"user_avatar": "url",
|
|
"timestamp": "2025-10-15T14:32:15Z",
|
|
"delta": {
|
|
"ops": [
|
|
{"retain": 10},
|
|
{"insert": "새로운 내용"}
|
|
]
|
|
}
|
|
}
|
|
```
|
|
|
|
**음성 인식 데이터**
|
|
```json
|
|
{
|
|
"speaker": "홍길동",
|
|
"text": "다음 주까지 보고서를 작성하겠습니다.",
|
|
"timestamp": "2025-10-15T14:32:15Z",
|
|
"confidence": 0.95
|
|
}
|
|
```
|
|
|
|
**전문용어 데이터**
|
|
```json
|
|
{
|
|
"term": "ROI",
|
|
"definition": "투자 대비 수익률",
|
|
"detailed_explanation": "투자한 비용 대비 얼마나 많은 수익을 얻었는지...",
|
|
"source": "과거 회의록: 2025년 1분기 전략 회의",
|
|
"confidence": 0.88
|
|
}
|
|
```
|
|
|
|
#### 성능 요구사항
|
|
- 음성 인식 지연 시간: 1초 이내
|
|
- 동기화 지연 시간: 500ms 이내
|
|
- AI 제안 업데이트 주기: 3-5초
|
|
- 에디터 입력 반응 시간: 16ms (60fps)
|
|
|
|
#### 에러 처리
|
|
- 음성 인식 오류: "음성 인식 중 오류가 발생했습니다. 다시 시도해주세요."
|
|
- 동기화 실패: "일시적으로 동기화가 중단되었습니다. 재연결 중..."
|
|
- 충돌 감지: "다른 사용자가 동일한 위치를 수정했습니다. 어떻게 하시겠습니까?"
|
|
|
|
---
|
|
|
|
### 3.6 06-검증완료 화면
|
|
|
|
#### 개요
|
|
- **목적**: 참석자별 회의록 섹션 검증 및 완료 표시
|
|
- **관련 유저스토리**: UFR-COLLAB-030
|
|
- **비즈니스 중요도**: 필수 (회의록 품질 보장)
|
|
|
|
#### 주요 기능
|
|
1. 섹션별 검증 상태 표시
|
|
2. 참석자별 검증 진행률 표시
|
|
3. 검증 완료 표시 및 섹션 잠금
|
|
4. 미검증 섹션 하이라이트
|
|
5. 검증자 정보 표시
|
|
|
|
#### UI 구성요소
|
|
|
|
**레이아웃**
|
|
- 05-회의진행 화면 내부 모달 또는 사이드 패널
|
|
|
|
**컴포넌트**
|
|
1. **검증 진행 상황**
|
|
- 전체 진행률 바 (예: "3/5 섹션 검증 완료")
|
|
- 참석자별 검증 진행률
|
|
|
|
2. **섹션별 검증 리스트**
|
|
- 섹션명
|
|
- 검증 상태: 미검증 / 검증 중 / 검증 완료
|
|
- 검증자 아바타 (검증 완료 시)
|
|
- 검증 시간
|
|
- 잠금 상태 아이콘 (잠김 시)
|
|
|
|
3. **액션 버튼**
|
|
- 섹션별 "검증 완료" 버튼
|
|
- 섹션 잠금 토글 (검증 완료 시 활성화)
|
|
- 모든 섹션 검증 완료 후: "회의 종료" 버튼 (Primary CTA)
|
|
|
|
#### 인터랙션
|
|
|
|
| 사용자 액션 | 시스템 반응 |
|
|
|------------|------------|
|
|
| 섹션 "검증 완료" 클릭 | 검증 상태 업데이트 → 검증자 아바타 표시 → 다른 사용자에게 동기화 |
|
|
| 섹션 잠금 토글 클릭 | 해당 섹션 편집 불가 → 배경색 변경 (연한 회색) → 잠금 아이콘 표시 |
|
|
| 잠긴 섹션 편집 시도 | 에러 메시지: "검증 완료된 섹션은 편집할 수 없습니다. 잠금을 해제하세요." |
|
|
| 모든 섹션 검증 완료 | "회의 종료" 버튼 활성화 → 토스트 메시지: "모든 섹션이 검증되었습니다." |
|
|
| 회의 종료 버튼 클릭 | 07-회의종료 화면으로 이동 |
|
|
|
|
#### 데이터 요구사항
|
|
|
|
**검증 상태 데이터**
|
|
```json
|
|
{
|
|
"section_id": "section_uuid",
|
|
"status": "completed", // pending, in_progress, completed
|
|
"verified_by": "user_uuid",
|
|
"verified_at": "2025-10-15T14:50:00Z",
|
|
"locked": true
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
### 3.7 07-회의종료 화면
|
|
|
|
#### 개요
|
|
- **목적**: 회의 통계 확인 및 최종 회의록 확정
|
|
- **관련 유저스토리**: UFR-MEET-040, UFR-MEET-050, UFR-AI-020
|
|
- **비즈니스 중요도**: 필수 (회의록 완성)
|
|
|
|
#### 주요 기능
|
|
1. 회의 통계 표시 (시간, 참석자 수, 발언 횟수, 키워드)
|
|
2. 필수 항목 자동 검사
|
|
3. AI Todo 추출 결과 미리보기
|
|
4. 최종 회의록 확정 및 버전 생성
|
|
5. 다음 회의 일정 자동 감지 및 캘린더 등록
|
|
|
|
#### UI 구성요소
|
|
|
|
**레이아웃**
|
|
- 중앙 정렬 대시보드 (최대 너비 1200px)
|
|
|
|
**섹션 구성**
|
|
|
|
1. **회의 통계 대시보드**
|
|
- **회의 총 시간**: 1시간 30분
|
|
- **참석자 수**: 5명
|
|
- **발언 횟수 (화자별)**:
|
|
- 홍길동: 25회
|
|
- 김철수: 18회
|
|
- ...
|
|
- **주요 키워드**: 워드 클라우드 또는 태그 클라우드
|
|
- **참여도 차트**: 발언 시간 비율 (파이 차트)
|
|
|
|
2. **필수 항목 검사 결과**
|
|
- 체크리스트 (자동 검사)
|
|
- ✅ 회의 제목 작성됨
|
|
- ✅ 참석자 목록 작성됨
|
|
- ✅ 주요 논의 내용 작성됨
|
|
- ❌ 결정 사항 미작성 (경고 아이콘)
|
|
- 누락된 항목 클릭 시: 해당 섹션으로 이동 (05-회의진행 화면)
|
|
|
|
3. **AI Todo 추출 미리보기**
|
|
- Todo 리스트 (최대 10개)
|
|
- 각 Todo:
|
|
- 내용
|
|
- 담당자 (AI 자동 식별)
|
|
- 마감일 (언급된 경우)
|
|
- 수정 버튼 (Todo 수동 편집 모달)
|
|
|
|
4. **다음 회의 일정 감지**
|
|
- AI가 감지한 다음 회의 일정 표시
|
|
- 예: "다음 회의: 2025년 10월 22일 14:00"
|
|
- "캘린더에 추가" 버튼
|
|
|
|
**액션 버튼**
|
|
- 뒤로 (05-회의진행 화면으로 이동)
|
|
- 나중에 확정 (저장 후 02-대시보드로 이동)
|
|
- 최종 확정 (Primary CTA)
|
|
|
|
#### 인터랙션
|
|
|
|
| 사용자 액션 | 시스템 반응 |
|
|
|------------|------------|
|
|
| 화면 로드 | 회의 통계 자동 생성 → 필수 항목 자동 검사 → AI Todo 자동 추출 |
|
|
| 누락된 필수 항목 클릭 | 05-회의진행 화면으로 이동 (해당 섹션 포커스) |
|
|
| Todo 수정 버튼 클릭 | Todo 편집 모달 표시 (내용, 담당자, 마감일 수정 가능) |
|
|
| "캘린더에 추가" 클릭 | 다음 회의 일정을 캘린더에 자동 등록 (UFR-CAL-010) |
|
|
| 최종 확정 버튼 클릭 | 필수 항목 재검사 → 확정 버전 생성 → 08-회의록공유 화면으로 이동 |
|
|
| 필수 항목 미작성 시 | 에러 다이얼로그: "필수 항목이 누락되었습니다. [섹션명]을 작성해주세요." |
|
|
|
|
#### 데이터 요구사항
|
|
|
|
**회의 통계 데이터**
|
|
```json
|
|
{
|
|
"meeting_id": "meeting_uuid",
|
|
"duration": 5400, // 초 (1.5시간)
|
|
"participants": 5,
|
|
"speaker_stats": [
|
|
{"name": "홍길동", "count": 25, "duration": 1200},
|
|
{"name": "김철수", "count": 18, "duration": 900}
|
|
],
|
|
"keywords": ["ROI", "마케팅", "예산", "분기 목표"]
|
|
}
|
|
```
|
|
|
|
**Todo 추출 데이터**
|
|
```json
|
|
[
|
|
{
|
|
"content": "마케팅 예산안 작성",
|
|
"assignee": "홍길동",
|
|
"due_date": "2025-10-20",
|
|
"priority": "high",
|
|
"related_section": "결정 사항"
|
|
}
|
|
]
|
|
```
|
|
|
|
---
|
|
|
|
### 3.8 08-회의록공유 화면
|
|
|
|
#### 개요
|
|
- **목적**: 회의록 공유 설정 및 참석자 배포
|
|
- **관련 유저스토리**: UFR-MEET-060, UFR-NOTI-010
|
|
- **비즈니스 중요도**: 필수 (회의록 전달)
|
|
|
|
#### 주요 기능
|
|
1. 공유 대상 선택 (참석자 전체/특정 참석자)
|
|
2. 공유 권한 설정 (읽기 전용/댓글 가능/편집 가능)
|
|
3. 공유 방식 선택 (이메일/슬랙/링크 복사)
|
|
4. 공유 링크 생성 및 보안 설정
|
|
5. 공유 이력 표시
|
|
|
|
#### UI 구성요소
|
|
|
|
**레이아웃**
|
|
- 중앙 정렬 폼 (최대 너비 800px)
|
|
|
|
**컴포넌트**
|
|
|
|
1. **공유 대상 선택**
|
|
- 라디오 버튼:
|
|
- 참석자 전체 (기본 선택)
|
|
- 특정 참석자 선택 (멀티 셀렉트 드롭다운)
|
|
- 외부 공유: 이메일 입력 (선택)
|
|
|
|
2. **공유 권한 설정**
|
|
- 드롭다운:
|
|
- 읽기 전용 (기본)
|
|
- 댓글 가능
|
|
- 편집 가능
|
|
|
|
3. **공유 방식 선택**
|
|
- 체크박스:
|
|
- 이메일 (기본 선택)
|
|
- 슬랙 (연동된 경우 표시)
|
|
- 링크 복사
|
|
|
|
4. **공유 링크 설정**
|
|
- 링크 URL 표시 (읽기 전용)
|
|
- "링크 복사" 버튼
|
|
- 고급 설정 (접기/펼치기):
|
|
- 링크 유효 기간 (무제한/7일/30일/커스텀)
|
|
- 비밀번호 설정 (선택)
|
|
|
|
5. **공유 이력**
|
|
- 리스트:
|
|
- 공유 시간
|
|
- 공유 방식 (이메일/슬랙/링크)
|
|
- 수신자
|
|
- 상태 (발송 완료/읽음/미읽음)
|
|
|
|
**액션 버튼**
|
|
- 취소 (02-대시보드로 이동)
|
|
- 공유 (Primary CTA)
|
|
|
|
#### 인터랙션
|
|
|
|
| 사용자 액션 | 시스템 반응 |
|
|
|------------|------------|
|
|
| 특정 참석자 선택 | 멀티 셀렉트 드롭다운 표시 (참석자 목록) |
|
|
| 외부 이메일 입력 | 이메일 형식 검증 |
|
|
| 링크 복사 버튼 클릭 | 클립보드에 복사 → 토스트 메시지: "링크가 복사되었습니다." |
|
|
| 공유 버튼 클릭 | 공유 대상 검증 → 알림 발송 → 09-Todo관리 화면으로 이동 (또는 02-대시보드) |
|
|
| 이메일 발송 완료 | 토스트 메시지: "5명에게 이메일이 발송되었습니다." |
|
|
| 슬랙 발송 완료 | 토스트 메시지: "슬랙으로 알림이 발송되었습니다." |
|
|
|
|
#### 데이터 요구사항
|
|
|
|
**공유 설정 데이터**
|
|
```json
|
|
{
|
|
"meeting_id": "meeting_uuid",
|
|
"recipients": ["user1@example.com", "user2@example.com"],
|
|
"permission": "read_only", // read_only, comment, edit
|
|
"methods": ["email", "slack"],
|
|
"link": {
|
|
"url": "https://meeting.example.com/share/abc123",
|
|
"expiration": "2025-11-15",
|
|
"password": "hashed_password"
|
|
}
|
|
}
|
|
```
|
|
|
|
**알림 데이터**
|
|
```json
|
|
{
|
|
"type": "meeting_shared",
|
|
"meeting_id": "meeting_uuid",
|
|
"meeting_title": "2025년 1분기 전략 회의",
|
|
"sender": "홍길동",
|
|
"link": "https://meeting.example.com/share/abc123",
|
|
"sent_at": "2025-10-15T15:00:00Z"
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
### 3.9 09-Todo관리 화면
|
|
|
|
#### 개요
|
|
- **목적**: Todo 할당, 진행 상황 추적 및 완료 처리
|
|
- **관련 유저스토리**: UFR-TODO-010, UFR-TODO-020, UFR-TODO-030, UFR-CAL-010
|
|
- **비즈니스 중요도**: 필수 (회의 후속 조치 실행)
|
|
|
|
#### 주요 기능
|
|
1. Todo 리스트 표시 (칸반 보드 또는 리스트 뷰)
|
|
2. Todo 필터 및 정렬 (담당자, 마감일, 우선순위)
|
|
3. 진행률 업데이트 (0-100%)
|
|
4. 상태 변경 (시작 전/진행 중/완료)
|
|
5. Todo 완료 처리 및 회의록 자동 반영
|
|
6. 캘린더 연동 (마감일 자동 등록)
|
|
|
|
#### UI 구성요소
|
|
|
|
**레이아웃**
|
|
- 전체 화면 레이아웃
|
|
- 상단: 필터 및 정렬 툴바
|
|
- 메인: 칸반 보드 또는 리스트 뷰 (토글 가능)
|
|
|
|
**칸반 보드 뷰**
|
|
- 3개 컬럼:
|
|
- 시작 전
|
|
- 진행 중
|
|
- 완료
|
|
|
|
- Todo 카드:
|
|
- Todo 내용 (최대 2줄)
|
|
- 담당자 아바타
|
|
- 마감일 (D-3, 오늘, 지남 - 색상 구분)
|
|
- 우선순위 아이콘 (높음=빨간색, 보통=회색, 낮음=숨김)
|
|
- 진행률 바 (0-100%)
|
|
- 관련 회의록 링크 아이콘
|
|
|
|
- 드래그 앤 드롭으로 상태 변경 가능
|
|
|
|
**리스트 뷰**
|
|
- 테이블 형식:
|
|
- 체크박스 (다중 선택)
|
|
- 상태
|
|
- Todo 내용
|
|
- 담당자
|
|
- 마감일
|
|
- 우선순위
|
|
- 진행률
|
|
- 액션 (수정/삭제)
|
|
|
|
**필터 및 정렬 툴바**
|
|
- 필터:
|
|
- 담당자 (멀티 셀렉트)
|
|
- 상태 (전체/시작 전/진행 중/완료)
|
|
- 마감일 (오늘/이번 주/이번 달/전체)
|
|
- 우선순위 (높음/보통/낮음)
|
|
- 정렬:
|
|
- 마감일 순
|
|
- 우선순위 순
|
|
- 생성일 순
|
|
- 뷰 전환: 칸반 보드 / 리스트
|
|
|
|
**Todo 상세 모달**
|
|
- Todo 내용 (텍스트 에리어)
|
|
- 담당자 선택
|
|
- 마감일 선택 (날짜 피커)
|
|
- 우선순위 선택 (드롭다운)
|
|
- 진행률 슬라이더 (0-100%)
|
|
- 메모 (선택)
|
|
- 관련 회의록 링크
|
|
- 액션 버튼: 저장, 완료, 삭제
|
|
|
|
#### 인터랙션
|
|
|
|
| 사용자 액션 | 시스템 반응 |
|
|
|------------|------------|
|
|
| Todo 카드 드래그 앤 드롭 | 상태 자동 변경 → 회의록에 반영 → 담당자에게 알림 |
|
|
| 진행률 슬라이더 조정 | 실시간 저장 → 50%, 100% 도달 시 자동 알림 |
|
|
| 완료 체크박스 클릭 | 확인 다이얼로그 → 완료 상태로 변경 → 회의록에 완료 표시 → 주최자에게 알림 |
|
|
| 필터 선택 | 즉시 Todo 리스트 필터링 |
|
|
| 정렬 선택 | 즉시 Todo 리스트 재정렬 |
|
|
| Todo 카드 클릭 | Todo 상세 모달 표시 |
|
|
| 관련 회의록 링크 클릭 | 05-회의진행 화면으로 이동 (해당 섹션 포커스) |
|
|
| 마감일 도래 (3일 전) | 자동 리마인더 알림 발송 (이메일/슬랙/인앱) |
|
|
| 마감일 경과 (미완료 시) | 긴급 알림 발송 → Todo 카드 빨간색 테두리 |
|
|
|
|
#### 데이터 요구사항
|
|
|
|
**Todo 데이터**
|
|
```json
|
|
{
|
|
"id": "todo_uuid",
|
|
"content": "마케팅 예산안 작성",
|
|
"meeting_id": "meeting_uuid",
|
|
"meeting_title": "2025년 1분기 전략 회의",
|
|
"assignee": "user_uuid",
|
|
"due_date": "2025-10-20",
|
|
"priority": "high", // high, normal, low
|
|
"status": "in_progress", // pending, in_progress, completed
|
|
"progress": 50, // 0-100
|
|
"memo": "CFO 검토 필요",
|
|
"created_at": "2025-10-15T15:00:00Z",
|
|
"updated_at": "2025-10-16T10:30:00Z",
|
|
"completed_at": null
|
|
}
|
|
```
|
|
|
|
**캘린더 연동 데이터**
|
|
```json
|
|
{
|
|
"todo_id": "todo_uuid",
|
|
"calendar_type": "google", // google, outlook, apple
|
|
"event_id": "calendar_event_uuid",
|
|
"reminder": [
|
|
{"time": "3_days_before"},
|
|
{"time": "day_of"}
|
|
]
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## 4. 화면간 전환 및 네비게이션
|
|
|
|
### 4.1 전역 네비게이션 구조
|
|
|
|
#### 헤더 (모든 화면 공통)
|
|
- **좌측**
|
|
- 서비스 로고 (클릭 시 02-대시보드로 이동)
|
|
- 햄버거 메뉴 (모바일에서 사이드바 토글)
|
|
|
|
- **중앙**
|
|
- 전역 검색 바
|
|
- 회의록 제목, 참석자, 키워드 검색
|
|
- 자동완성 제안
|
|
- 최근 검색어 표시
|
|
|
|
- **우측**
|
|
- 알림 아이콘 (Badge로 읽지 않은 알림 수 표시)
|
|
- 드롭다운: 최근 알림 5개
|
|
- "모두 보기" 링크
|
|
- 사용자 프로필 아이콘
|
|
- 드롭다운: 내 프로필, 설정, 로그아웃
|
|
|
|
#### 사이드바 (로그인 후 모든 화면, 01-로그인 제외)
|
|
- **메뉴 항목**
|
|
1. 대시보드 (아이콘: 홈)
|
|
2. 내 회의록 (아이콘: 문서)
|
|
3. 예정된 회의 (아이콘: 캘린더)
|
|
4. Todo 목록 (아이콘: 체크리스트, Badge로 대기 중인 Todo 수)
|
|
5. 템플릿 (아이콘: 레이아웃)
|
|
6. 설정 (아이콘: 톱니바퀴)
|
|
|
|
- **하단**
|
|
- 사이드바 접기/펼치기 버튼
|
|
- 도움말 아이콘 (툴팁 또는 가이드 투어)
|
|
|
|
#### 푸터 (옵션)
|
|
- 저작권 정보
|
|
- 이용약관, 개인정보처리방침 링크
|
|
|
|
### 4.2 화면 전환 패턴
|
|
|
|
#### 선형 플로우 (Linear Flow)
|
|
- 03-회의예약 → 04-템플릿선택 → 05-회의진행
|
|
- 진행 표시 바로 현재 단계 표시
|
|
- "뒤로" 버튼으로 이전 단계 이동 가능
|
|
|
|
#### 허브 앤 스포크 (Hub and Spoke)
|
|
- 02-대시보드가 중심 허브
|
|
- 모든 주요 화면으로 이동 가능
|
|
- 각 화면에서 02-대시보드로 돌아오기 가능
|
|
|
|
#### 모달 및 오버레이
|
|
- 빠른 액션 (Todo 추가, 댓글 작성) → 모달
|
|
- 상세 정보 (알림, 프로필) → 드롭다운
|
|
|
|
### 4.3 브레드크럼과 컨텍스트 유지
|
|
|
|
#### 브레드크럼
|
|
- 복잡한 계층 구조에서 사용
|
|
- 예: 대시보드 > 내 회의록 > [회의 제목]
|
|
- 각 단계 클릭 가능
|
|
|
|
#### 컨텍스트 유지 전략
|
|
- **Session Storage**: 임시 데이터 (폼 입력 중인 내용)
|
|
- **Local Storage**: 사용자 설정 (뷰 모드, 필터 설정)
|
|
- **URL 파라미터**: 공유 가능한 상태 (회의 ID, Todo 필터)
|
|
- **History API**: 뒤로/앞으로 버튼 지원
|
|
|
|
---
|
|
|
|
## 5. 반응형 설계 전략
|
|
|
|
### 5.1 브레이크포인트 정의
|
|
|
|
| 디바이스 | 브레이크포인트 | 레이아웃 | 주요 조정 |
|
|
|---------|--------------|---------|----------|
|
|
| Mobile | 320px ~ 767px | 단일 컬럼 | 햄버거 메뉴, 하단 탭 네비게이션, 스택 레이아웃 |
|
|
| Tablet | 768px ~ 1023px | 2단 레이아웃 | 사이드바 토글, 터치 최적화 |
|
|
| Desktop | 1024px ~ 1439px | 3단 레이아웃 | 전체 사이드바, 키보드 단축키 |
|
|
| Large Desktop | 1440px 이상 | 확장 레이아웃 | 더 넓은 중앙 패널, 4단 레이아웃 가능 |
|
|
|
|
### 5.2 디바이스별 UI 조정
|
|
|
|
#### Mobile (320px ~ 767px)
|
|
- **네비게이션**
|
|
- 햄버거 메뉴로 사이드바 숨김
|
|
- 하단 탭 네비게이션 (대시보드, 회의, Todo, 더보기)
|
|
|
|
- **05-회의진행 화면**
|
|
- 탭으로 패널 전환 (회의록 / 참석자 / AI 제안 / 용어 설명)
|
|
- 툴바를 하단 고정 (터치 용이성)
|
|
|
|
- **02-대시보드 화면**
|
|
- 위젯을 세로로 스택 (1단 레이아웃)
|
|
- 스와이프로 위젯 전환 (옵션)
|
|
|
|
- **09-Todo관리 화면**
|
|
- 칸반 보드 대신 리스트 뷰 권장
|
|
- 상태 변경은 드롭다운으로
|
|
|
|
#### Tablet (768px ~ 1023px)
|
|
- **네비게이션**
|
|
- 사이드바를 토글 가능 (기본 숨김)
|
|
- 상단 헤더에 메뉴 아이콘
|
|
|
|
- **05-회의진행 화면**
|
|
- 2단 레이아웃 (에디터 + AI 제안 패널)
|
|
- 참석자 목록은 드로어로 표시
|
|
|
|
- **02-대시보드 화면**
|
|
- 2단 그리드 레이아웃 (2x2 또는 2x3)
|
|
|
|
- **터치 최적화**
|
|
- 버튼 크기: 최소 44x44px
|
|
- 간격: 최소 8px
|
|
|
|
#### Desktop (1024px 이상)
|
|
- **네비게이션**
|
|
- 전체 사이드바 항상 표시
|
|
- 호버 효과 및 툴팁
|
|
|
|
- **05-회의진행 화면**
|
|
- 3단 레이아웃 (참석자 + 에디터 + AI 제안)
|
|
- 모든 패널 동시 표시
|
|
|
|
- **02-대시보드 화면**
|
|
- 3단 그리드 레이아웃 (3x2)
|
|
- 더 많은 위젯 표시 가능
|
|
|
|
- **키보드 단축키**
|
|
- Ctrl+N: 새 회의
|
|
- Ctrl+S: 저장
|
|
- Ctrl+F: 검색
|
|
- Ctrl+/: 단축키 가이드
|
|
|
|
### 5.3 반응형 이미지 및 아이콘
|
|
- **아이콘**: SVG 사용 (확대/축소 시 품질 유지)
|
|
- **아바타**: srcset으로 디바이스별 해상도 제공
|
|
- **로고**: 모바일에서는 심볼만, 데스크탑에서는 전체 로고
|
|
|
|
### 5.4 터치 및 제스처 지원
|
|
- **스와이프**: 화면 전환, 사이드바 열기/닫기
|
|
- **롱 프레스**: 컨텍스트 메뉴 표시
|
|
- **핀치 줌**: 이미지 확대/축소 (회의록 내 이미지)
|
|
|
|
---
|
|
|
|
## 6. 접근성 보장 방안
|
|
|
|
### 6.1 WCAG 2.1 Level AA 준수
|
|
|
|
#### 인식 가능성 (Perceivable)
|
|
1. **대체 텍스트 제공**
|
|
- 모든 이미지에 alt 속성
|
|
- 아이콘 버튼에 aria-label
|
|
- 로고에 적절한 대체 텍스트
|
|
|
|
2. **색상 대비**
|
|
- 텍스트와 배경 대비율 최소 4.5:1
|
|
- 큰 텍스트(18pt 이상)는 3:1
|
|
- 중요 정보는 색상만으로 구분하지 않음 (아이콘, 텍스트 함께 사용)
|
|
|
|
3. **다크모드 지원**
|
|
- 시스템 설정 자동 감지
|
|
- 수동 전환 가능
|
|
- 다크모드에서도 동일한 대비율 유지
|
|
|
|
#### 운용 가능성 (Operable)
|
|
1. **키보드 네비게이션**
|
|
- Tab 키로 모든 인터랙티브 요소 접근
|
|
- Shift+Tab으로 역순 이동
|
|
- Enter/Space로 버튼 활성화
|
|
- Esc로 모달/드롭다운 닫기
|
|
|
|
2. **포커스 표시**
|
|
- 포커스된 요소에 명확한 아웃라인 (최소 2px)
|
|
- 포커스 순서는 시각적 순서와 일치
|
|
|
|
3. **단축키**
|
|
- Ctrl+N: 새 회의 예약
|
|
- Ctrl+S: 회의록 저장
|
|
- Ctrl+F: 검색
|
|
- Ctrl+/: 단축키 가이드 표시
|
|
|
|
4. **Skip to Content 링크**
|
|
- 페이지 최상단에 "본문으로 건너뛰기" 링크
|
|
- 시각적으로 숨김, 포커스 시 표시
|
|
|
|
#### 이해 가능성 (Understandable)
|
|
1. **명확한 레이블**
|
|
- 모든 폼 필드에 label 요소 연결
|
|
- 플레이스홀더는 보조 정보로만 사용
|
|
|
|
2. **에러 메시지**
|
|
- 에러 위치 명확히 표시
|
|
- 해결 방법 제시
|
|
- 에러 필드에 포커스 자동 이동
|
|
|
|
3. **일관성**
|
|
- 동일한 기능은 동일한 아이콘/레이블 사용
|
|
- 네비게이션 구조 일관성 유지
|
|
|
|
#### 견고성 (Robust)
|
|
1. **ARIA 레이블 및 역할**
|
|
- 시맨틱 HTML 우선 사용
|
|
- 커스텀 컴포넌트에 적절한 role 속성
|
|
- aria-label, aria-describedby 활용
|
|
|
|
2. **실시간 업데이트 알림**
|
|
- aria-live="polite" 또는 "assertive"
|
|
- 회의록 실시간 편집 시 스크린 리더에 알림
|
|
- 알림 빈도 제어 (과도한 알림 방지)
|
|
|
|
### 6.2 스크린 리더 대응
|
|
|
|
#### 구조화된 마크업
|
|
- 적절한 heading 레벨 사용 (h1, h2, h3)
|
|
- 랜드마크 역할 (header, nav, main, aside, footer)
|
|
- 리스트는 ul/ol 사용
|
|
|
|
#### 동적 콘텐츠 알림
|
|
- 회의록 자동 작성: "AI가 회의록을 업데이트했습니다."
|
|
- 다른 사용자 편집: "[사용자명]이(가) 섹션을 수정했습니다."
|
|
- Todo 완료: "Todo가 완료되었습니다."
|
|
|
|
#### 폼 접근성
|
|
- label과 input 명확한 연결
|
|
- 필수 항목에 aria-required="true"
|
|
- 에러 발생 시 aria-invalid="true" 및 aria-describedby로 에러 메시지 연결
|
|
|
|
### 6.3 접근성 테스트 도구
|
|
- **자동 테스트**: axe-core, Lighthouse
|
|
- **수동 테스트**: 키보드 네비게이션, 스크린 리더 (NVDA, JAWS, VoiceOver)
|
|
- **색상 대비 검사**: WebAIM Contrast Checker
|
|
|
|
---
|
|
|
|
## 7. 성능 최적화 방안
|
|
|
|
### 7.1 초기 로딩 최적화
|
|
|
|
#### Code Splitting
|
|
- **라우트 레벨 분리**
|
|
```javascript
|
|
const Dashboard = lazy(() => import('./pages/Dashboard'));
|
|
const MeetingEditor = lazy(() => import('./pages/MeetingEditor'));
|
|
```
|
|
|
|
- **컴포넌트 레벨 분리**
|
|
- 모달, 드로어 등 조건부 렌더링 컴포넌트
|
|
- 큰 라이브러리 (차트, 에디터) 동적 로드
|
|
|
|
#### Critical CSS 인라인
|
|
- First Paint에 필요한 CSS만 <head>에 인라인
|
|
- 나머지 CSS는 비동기 로드
|
|
|
|
#### Skeleton UI
|
|
- 로딩 중 레이아웃 미리 표시
|
|
- 콘텐츠 영역에 Skeleton 컴포넌트
|
|
- 사용자가 기다리는 느낌 최소화
|
|
|
|
#### Progressive Web App (PWA)
|
|
- Service Worker로 오프라인 지원
|
|
- 자주 사용하는 에셋 캐싱
|
|
- 모바일에서 앱처럼 설치 가능
|
|
|
|
### 7.2 이미지 및 에셋 최적화
|
|
|
|
#### 이미지 포맷
|
|
- **WebP 사용** (fallback: JPEG/PNG)
|
|
```html
|
|
<picture>
|
|
<source srcset="image.webp" type="image/webp">
|
|
<img src="image.jpg" alt="설명">
|
|
</picture>
|
|
```
|
|
|
|
#### Lazy Loading
|
|
- Intersection Observer API 활용
|
|
- 뷰포트에 진입할 때 이미지 로드
|
|
```html
|
|
<img src="placeholder.jpg" data-src="real-image.jpg" loading="lazy" alt="설명">
|
|
```
|
|
|
|
#### 아이콘 최적화
|
|
- **SVG 스프라이트**: 여러 아이콘을 하나의 파일로
|
|
- **Icon Font**: 대안으로 사용 가능
|
|
- 인라인 SVG: 중요한 아이콘은 HTML에 직접 삽입
|
|
|
|
#### 이미지 CDN
|
|
- Cloudflare Images, AWS CloudFront 활용
|
|
- 자동 리사이징 및 포맷 변환
|
|
- 전 세계 엣지 서버에서 빠른 전송
|
|
|
|
### 7.3 코드 스플리팅 전략
|
|
|
|
#### 라우트 레벨
|
|
- 각 화면별로 청크 분리
|
|
- 초기 로드 시 01-로그인, 02-대시보드만 로드
|
|
- 다른 화면은 필요 시 동적 로드
|
|
|
|
#### 컴포넌트 레벨
|
|
- **모달/드로어**: 열릴 때 로드
|
|
```javascript
|
|
const TodoModal = lazy(() => import('./components/TodoModal'));
|
|
```
|
|
|
|
- **차트 라이브러리**: 통계 화면에서만 로드
|
|
- **리치 텍스트 에디터**: 회의진행 화면에서만 로드
|
|
|
|
#### 라이브러리 레벨
|
|
- **Lodash**: 필요한 함수만 import
|
|
```javascript
|
|
import debounce from 'lodash/debounce'; // ✅
|
|
// import _ from 'lodash'; // ❌
|
|
```
|
|
|
|
- **Moment.js 대신 Day.js**: 더 가벼운 라이브러리 선택
|
|
|
|
### 7.4 캐싱 전략
|
|
|
|
#### HTTP 캐싱
|
|
- **정적 에셋**: Cache-Control: max-age=31536000 (1년)
|
|
- **API 응답**: Cache-Control: max-age=300 (5분)
|
|
- **HTML**: Cache-Control: no-cache (항상 검증)
|
|
|
|
#### 메모리 캐싱 (Client-Side)
|
|
- **React Query** 또는 **SWR** 사용
|
|
- API 응답 자동 캐싱
|
|
- Stale-While-Revalidate 전략
|
|
- 중복 요청 제거
|
|
|
|
- **예시**:
|
|
```javascript
|
|
const { data, error } = useQuery('meetings', fetchMeetings, {
|
|
staleTime: 5 * 60 * 1000, // 5분
|
|
cacheTime: 10 * 60 * 1000, // 10분
|
|
});
|
|
```
|
|
|
|
#### Local Storage
|
|
- **사용자 설정**: 뷰 모드, 필터 설정
|
|
- **최근 검색어**: 자동완성 제안
|
|
- **임시 저장**: 작성 중인 회의록 (Auto-save)
|
|
|
|
#### Service Worker 캐싱
|
|
- **오프라인 페이지**: 네트워크 오류 시 표시
|
|
- **에셋 캐싱**: JS, CSS, 폰트, 아이콘
|
|
- **API 캐싱**: 읽기 전용 데이터 (회의록 목록 등)
|
|
|
|
### 7.5 실시간 성능 최적화
|
|
|
|
#### WebSocket 최적화
|
|
- **연결 풀링**: 하나의 WebSocket 연결 재사용
|
|
- **압축**: WebSocket 메시지 압축 (gzip)
|
|
- **Heartbeat**: 주기적 ping/pong으로 연결 유지
|
|
|
|
#### 변경 델타만 전송
|
|
- 전체 문서가 아닌 변경된 부분만 전송
|
|
- **Operational Transformation** 또는 **CRDT** 알고리즘
|
|
- 네트워크 대역폭 절약
|
|
|
|
#### Debouncing/Throttling
|
|
- **타이핑 이벤트**: Debounce 500ms
|
|
```javascript
|
|
const debouncedSave = debounce(saveContent, 500);
|
|
```
|
|
|
|
- **스크롤 이벤트**: Throttle 100ms
|
|
```javascript
|
|
const throttledScroll = throttle(onScroll, 100);
|
|
```
|
|
|
|
#### Virtual Scrolling
|
|
- 긴 리스트 (Todo, 회의록 목록) 렌더링 최적화
|
|
- 뷰포트에 보이는 항목만 DOM에 렌더링
|
|
- **라이브러리**: react-window, react-virtualized
|
|
|
|
### 7.6 성능 모니터링
|
|
|
|
#### Core Web Vitals 목표
|
|
- **LCP (Largest Contentful Paint)**: < 2.5초
|
|
- **FID (First Input Delay)**: < 100ms
|
|
- **CLS (Cumulative Layout Shift)**: < 0.1
|
|
|
|
#### 성능 측정 도구
|
|
- **Lighthouse**: 자동화된 성능 감사
|
|
- **WebPageTest**: 실제 네트워크 환경 테스트
|
|
- **Chrome DevTools**: Performance 탭, Network 탭
|
|
|
|
#### 실시간 모니터링
|
|
- **Sentry**: 에러 추적 및 성능 모니터링
|
|
- **Google Analytics**: 사용자 행동 분석
|
|
- **Custom Metrics**: 회의록 로드 시간, 동기화 지연 시간 측정
|
|
|
|
---
|
|
|
|
## 8. 변경 이력
|
|
|
|
| 버전 | 날짜 | 작성자 | 변경 내용 |
|
|
|------|------|--------|----------|
|
|
| 1.0 | 2025-10-15 | 유진 | 초안 작성 - 9개 화면 설계 완료 |
|
|
|
|
---
|
|
|
|
## 부록
|
|
|
|
### A. 디자인 시스템 참조
|
|
- **컬러 팔레트**: Primary, Secondary, Success, Warning, Error, Neutral
|
|
- **타이포그래피**: 폰트 패밀리, 크기, 행간, 자간
|
|
- **스페이싱**: 4px 기반 (4, 8, 12, 16, 24, 32, 48, 64px)
|
|
- **컴포넌트 라이브러리**: Material-UI, Ant Design, 또는 커스텀
|
|
|
|
### B. 기술 스택 권장사항
|
|
- **Frontend Framework**: React 18+ 또는 Vue 3+
|
|
- **State Management**: React Query + Zustand 또는 Pinia
|
|
- **UI Library**: Material-UI, Ant Design, Chakra UI
|
|
- **Rich Text Editor**: Quill, Slate, ProseMirror
|
|
- **Real-time**: Socket.io, WebSocket
|
|
- **Build Tool**: Vite (빠른 빌드) 또는 Webpack
|
|
|
|
### C. 프로토타입 도구
|
|
- **Figma**: 고해상도 프로토타입 및 디자인 시스템
|
|
- **Adobe XD**: 인터랙션 프로토타입
|
|
- **Storybook**: 컴포넌트 카탈로그 및 테스트
|
|
|
|
### D. 참고 자료
|
|
- **WCAG 2.1 가이드라인**: https://www.w3.org/WAI/WCAG21/quickref/
|
|
- **Material Design**: https://material.io/design
|
|
- **Web.dev Performance**: https://web.dev/performance/
|
|
|
|
---
|
|
|
|
**문서 끝**
|