hgzero/design/uiux/uiux.md
Minseo-Jo bd34b40991 프로젝트 구조 정리 및 프로토타입 업데이트
- design-last, design-v1 디렉토리 정리
- UI/UX 프로토타입 개선 및 통합
- 스타일 가이드 및 테스트 결과 업데이트
- 유저스토리 목록 추가
- 불필요한 문서 제거

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-21 10:12:18 +09:00

1559 lines
56 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.

# 회의록 작성 및 공유 개선 서비스 - UI/UX 설계서
## 문서 정보
- **작성일**: 2025-10-20
- **작성자**: 이미준 (서비스 기획자)
- **버전**: 1.0
- **설계 원칙**: Mobile First 디자인 철학
- **접근성 기준**: WCAG 2.1 Level AA
---
## 목차
1. [프로토타입 화면 목록](#1-프로토타입-화면-목록)
2. [화면 간 사용자 플로우](#2-화면-간-사용자-플로우)
3. [화면별 상세 설계](#3-화면별-상세-설계)
4. [화면 간 전환 및 네비게이션](#4-화면-간-전환-및-네비게이션)
5. [반응형 설계 전략](#5-반응형-설계-전략)
6. [접근성 보장 방안](#6-접근성-보장-방안)
7. [성능 최적화 방안](#7-성능-최적화-방안)
8. [변경 이력](#8-변경-이력)
---
## 1. 프로토타입 화면 목록
본 서비스는 Mobile First 설계 원칙에 따라 총 9개의 핵심 화면으로 구성됩니다.
| 번호 | 화면명 | 관련 유저스토리 | 비즈니스 중요도 | 비고 |
|------|--------|-----------------|-----------------|------|
| 01 | 로그인 | UFR-USER-010 | 필수 | 인증 진입점 |
| 02 | 대시보드 | UFR-MEET-045, UFR-MEET-055 | 높음 | 메인 화면 |
| 03 | 회의예약 | UFR-MEET-010 | 높음 | 회의 준비 |
| 04 | 템플릿선택 | UFR-MEET-020 | 중간 | 회의록 템플릿 |
| 05 | 회의진행 | UFR-MEET-030, UFR-AI-010, UFR-RAG-010/020, UFR-COLLAB-010/020 | 매우 높음 | 핵심 차별화 기능 |
| 06 | 검증완료 | UFR-COLLAB-030 | 중간 | 품질 보장 |
| 07 | 회의종료 | UFR-MEET-040, UFR-MEET-050, UFR-AI-020 | 높음 | 회의록 확정 |
| 08 | 회의록공유 | UFR-MEET-060 | 높음 | 공유 및 협업 |
| 09 | Todo관리 | UFR-TODO-010, UFR-TODO-030 | 높음 | 차별화 기능 |
---
## 2. 화면 간 사용자 플로우
### 2.1 주요 사용자 여정
```
[인증 플로우]
01-로그인 → 02-대시보드
[회의 예약 플로우]
02-대시보드 → 03-회의예약 → 02-대시보드
[회의 진행 플로우]
02-대시보드 → 04-템플릿선택 → 05-회의진행 → 06-검증완료 → 07-회의종료 → 08-회의록공유
[회의록 관리 플로우]
02-대시보드 → 회의록 상세 조회 → 수정/공유/다운로드
[Todo 관리 플로우]
09-Todo관리 → Todo 완료/수정 → 회의록 자동 반영
```
### 2.2 플로우 다이어그램
```
┌─────────┐
│01-로그인│
└────┬────┘
┌──────────┐ ┌──────────┐
│02-대시보드│────▶│03-회의예약│
└────┬─────┘ └──────────┘
├─────────▶┌──────────────┐
│ │04-템플릿선택 │
│ └──────┬───────┘
│ │
│ ▼
│ ┌──────────┐
│ │05-회의진행│
│ └────┬─────┘
│ │
│ ▼
│ ┌──────────┐
│ │06-검증완료│
│ └────┬─────┘
│ │
│ ▼
│ ┌──────────┐
│ │07-회의종료│
│ └────┬─────┘
│ │
│ ▼
│ ┌────────────┐
│ │08-회의록공유│
│ └────────────┘
└─────────▶┌──────────┐
│09-Todo관리│
└──────────┘
```
---
## 3. 화면별 상세 설계
### 3.1 01-로그인
#### 개요
- **목적**: 사용자 인증 및 서비스 진입
- **관련 유저스토리**: UFR-USER-010
- **비즈니스 중요도**: 필수
- **화면 타입**: 단일 목적 페이지
#### 주요 기능
1. 사번과 비밀번호를 통한 LDAP 인증
2. 세션 관리 및 보안 유지
3. 인증 실패 시 오류 메시지 표시
#### UI 구성요소
**Mobile (320px ~ 767px)**
```
┌─────────────────────────┐
│ [로고 이미지] │
│ │
│ 회의록 작성 서비스 │
│ │
│ ┌───────────────────┐ │
│ │ 사번 │ │
│ │ [입력 필드] │ │
│ └───────────────────┘ │
│ │
│ ┌───────────────────┐ │
│ │ 비밀번호 │ │
│ │ [입력 필드] │ │
│ └───────────────────┘ │
│ │
│ ┌───────────────────┐ │
│ │ 로그인 버튼 │ │
│ └───────────────────┘ │
│ │
│ LDAP 연동 인증 시스템 │
└─────────────────────────┘
```
**주요 컴포넌트**:
- 로고 이미지 (SVG, 반응형)
- 사번 입력 필드 (type="text", autocomplete="username")
- 비밀번호 입력 필드 (type="password", autocomplete="current-password")
- 로그인 버튼 (primary action, 44x44px 이상)
- 인증 안내 텍스트
#### 인터랙션
1. **입력 검증**:
- 실시간 입력 검증 (사번 형식, 비밀번호 입력 여부)
- 포커스 이동: Tab 키로 필드 간 이동
- Enter 키로 로그인 실행
2. **로그인 처리**:
- 버튼 클릭 → 로딩 인디케이터 표시
- LDAP 인증 진행
- 성공 시: 대시보드로 자동 이동
- 실패 시: 오류 메시지 표시 (3초 후 자동 사라짐)
3. **오류 처리**:
- 인증 실패: "사번 또는 비밀번호가 올바르지 않습니다"
- 네트워크 오류: "연결에 실패했습니다. 다시 시도해주세요"
- 서버 오류: "일시적인 오류가 발생했습니다"
#### 데이터 요구사항
- **입력**: 사번 (문자열), 비밀번호 (문자열)
- **출력**: 인증 토큰, 사용자 정보 (이름, 권한)
- **저장**: 세션 토큰 (로컬 스토리지/세션 스토리지)
#### 에러 처리
| 에러 유형 | 메시지 | 액션 |
|-----------|--------|------|
| 인증 실패 | 사번 또는 비밀번호가 올바르지 않습니다 | 재입력 유도 |
| 네트워크 오류 | 연결에 실패했습니다 | 재시도 버튼 표시 |
| 서버 오류 | 일시적인 오류가 발생했습니다 | 관리자 문의 안내 |
---
### 3.2 02-대시보드
#### 개요
- **목적**: 회의록 목록 조회, 빠른 액세스, 상태 확인
- **관련 유저스토리**: UFR-MEET-045 (상세조회), UFR-MEET-055 (수정)
- **비즈니스 중요도**: 높음
- **화면 타입**: 목록 및 액션 페이지
#### 주요 기능
1. 회의록 목록 조회 (필터링, 정렬, 검색)
2. 빠른 액션 (새 회의 예약, 진행 중인 회의)
3. 회의록 상세 조회 및 수정
4. 알림 확인
#### UI 구성요소
**Mobile (320px ~ 767px)**
```
┌─────────────────────────────┐
│ [프로필] 대시보드 [알림🔔] │
├─────────────────────────────┤
│ │
│ ┌─────────────────────┐ │
│ │ 새 회의 예약 │ │
│ └─────────────────────┘ │
│ │
│ 🔴 진행 중인 회의 (1건) │
│ [회의 제목 - 지금 참여] │
│ │
├─────────────────────────────┤
│ 내 회의록 │
│ │
│ [전체 ▼] [최신순 ▼] [🔍] │
│ │
│ ┌───────────────────────┐ │
│ │ 📝 프로젝트 킥오프 │ │
│ │ 2025-10-20 14:00 │ │
│ │ ✅ 확정완료 │ │
│ │ 3명 참석 │ │
│ └───────────────────────┘ │
│ │
│ ┌───────────────────────┐ │
│ │ 📝 주간 회의 │ │
│ │ 2025-10-19 10:00 │ │
│ │ ⚠️ 작성중 (60%) │ │
│ │ 5명 참석 │ │
│ └───────────────────────┘ │
│ │
│ [더보기...] │
│ │
├─────────────────────────────┤
│ [대시보드] [Todo] [더보기]│
└─────────────────────────────┘
```
**주요 컴포넌트**:
- 상단 헤더: 프로필 아이콘, 타이틀, 알림 아이콘
- 빠른 액션 버튼: 새 회의 예약 (primary), 진행 중인 회의 (secondary)
- 필터 영역: 상태 필터 (전체/작성중/확정완료), 정렬 (최신순/회의일시순/제목순)
- 검색 바: 회의 제목, 참석자, 키워드 검색
- 회의록 카드: 제목, 날짜, 상태, 참석자 수, 진행률 (작성중인 경우)
- 하단 네비게이션: 대시보드, Todo, 더보기
#### 인터랙션
1. **회의록 목록**:
- 무한 스크롤 또는 페이지네이션
- 카드 탭: 상세 화면으로 이동
- 스와이프: 빠른 액션 (공유, 삭제)
2. **필터링 및 검색**:
- 필터 선택: 즉시 목록 갱신
- 검색: 300ms 디바운싱 후 API 요청
- 결과 없을 시: "검색 결과가 없습니다" 메시지
3. **빠른 액션**:
- 새 회의 예약: 03-회의예약 화면으로 이동
- 진행 중인 회의: 05-회의진행 화면으로 복귀
4. **회의록 상세 조회** (UFR-MEET-045):
- 카드 클릭 → 상세 화면 모달 또는 새 페이지
- 표시 정보:
- 회의 기본 정보: 제목, 일시, 장소, 참석자, 템플릿, 상태, 작성자
- 섹션별 내용: 논의사항, 결정사항, Todo, 기타
- 검증 상태: 섹션별 체크 표시
- Todo 항목: 담당자, 마감일, 상태, 우선순위
- 첨부파일: 다운로드 링크
- 부가 기능:
- 수정 버튼 (권한 있는 경우)
- 공유 버튼
- PDF 다운로드
- 이전/다음 회의록 네비게이션
- 뒤로가기
5. **회의록 수정** (UFR-MEET-055):
- 수정 버튼 클릭 → 편집 모드 전환
- 상태별 수정 범위:
- 작성중: 모든 섹션 수정 가능
- 확정완료: 승인 요청 후 수정 가능
- 자동 저장: 30초 간격
- 수정 이력: 누가, 언제, 무엇을 수정했는지
- 저장 버튼 클릭 → 상태 업데이트 → 목록 갱신
#### 데이터 요구사항
- **입력**: 필터 조건, 검색 키워드, 정렬 옵션
- **출력**: 회의록 목록 (제목, 날짜, 상태, 참석자, 진행률)
- **캐싱**: 최근 조회한 목록 (5분)
#### 에러 처리
| 에러 유형 | 메시지 | 액션 |
|-----------|--------|------|
| 조회 실패 | 목록을 불러올 수 없습니다 | 새로고침 버튼 |
| 검색 실패 | 검색 중 오류가 발생했습니다 | 재시도 유도 |
| 수정 권한 없음 | 수정 권한이 없습니다 | 확인 버튼 |
---
### 3.3 03-회의예약
#### 개요
- **목적**: 회의 예약 및 참석자 초대
- **관련 유저스토리**: UFR-MEET-010
- **비즈니스 중요도**: 높음
- **화면 타입**: 폼 입력 페이지
#### 주요 기능
1. 회의 정보 입력 (제목, 날짜/시간, 장소, 참석자)
2. 입력 검증 및 예약 생성
3. 초대 이메일 자동 발송
4. 캘린더 자동 등록
#### UI 구성요소
**Mobile (320px ~ 767px)**
```
┌─────────────────────────────┐
│ [←] 회의 예약 [저장]│
├─────────────────────────────┤
│ │
│ 회의 제목 * │
│ ┌─────────────────────┐ │
│ │ [입력 필드] │ │
│ └─────────────────────┘ │
│ │
│ 날짜 및 시간 * │
│ ┌──────────┬──────────┐ │
│ │ 2025-10-20│ 14:00 │ │
│ └──────────┴──────────┘ │
│ │
│ 장소 (선택) │
│ ┌─────────────────────┐ │
│ │ [입력 필드] │ │
│ └─────────────────────┘ │
│ │
│ 참석자 * │
│ ┌─────────────────────┐ │
│ │ user1@company.com │ │
│ │ user2@company.com │ │
│ │ + 참석자 추가 │ │
│ └─────────────────────┘ │
│ │
│ ☑️ 회의 시작 30분 전 │
│ 리마인더 발송 │
│ │
│ ┌─────────────────────┐ │
│ │ 회의 예약하기 │ │
│ └─────────────────────┘ │
│ │
└─────────────────────────────┘
```
**주요 컴포넌트**:
- 상단 헤더: 뒤로가기, 타이틀, 저장 버튼
- 회의 제목 입력 필드 (최대 100자, 필수)
- 날짜 선택기 (달력 UI, 필수)
- 시간 선택기 (시간 목록, 필수)
- 장소 입력 필드 (최대 200자, 선택)
- 참석자 입력 영역 (이메일 칩, 최소 1명 필수)
- 리마인더 설정 체크박스
- 예약하기 버튼 (primary action)
#### 인터랙션
1. **폼 입력**:
- 실시간 검증: 제목 길이, 이메일 형식, 날짜/시간 유효성
- 참석자 추가: 이메일 입력 후 Enter 또는 버튼 클릭
- 참석자 제거: 칩 클릭 또는 스와이프
2. **날짜/시간 선택**:
- 날짜 선택기: 달력 모달 표시
- 시간 선택기: 드롭다운 또는 스크롤 선택
- 과거 날짜 선택 불가
3. **예약 처리**:
- 버튼 클릭 → 필수 항목 검증
- 성공 시:
- 회의 ID 생성
- 캘린더 자동 등록
- 참석자에게 이메일 발송
- 성공 메시지 표시 (토스트)
- 대시보드로 이동
- 실패 시: 오류 메시지 표시
4. **자동 저장**:
- 입력 중 임시 저장 (30초 간격)
- 뒤로가기 시 저장 확인 다이얼로그
#### 데이터 요구사항
- **입력**: 제목, 날짜, 시간, 장소, 참석자 목록
- **출력**: 회의 ID, 예약 확인
- **저장**: 임시 저장 데이터 (로컬 스토리지)
#### 에러 처리
| 에러 유형 | 메시지 | 액션 |
|-----------|--------|------|
| 필수 항목 누락 | [항목명]을 입력해주세요 | 해당 필드로 포커스 |
| 이메일 형식 오류 | 올바른 이메일을 입력해주세요 | 재입력 유도 |
| 예약 실패 | 예약에 실패했습니다 | 재시도 버튼 |
| 날짜 과거 선택 | 과거 날짜는 선택할 수 없습니다 | 오늘 날짜로 초기화 |
---
### 3.4 04-템플릿선택
#### 개요
- **목적**: 회의 유형에 맞는 템플릿 선택 및 커스터마이징
- **관련 유저스토리**: UFR-MEET-020
- **비즈니스 중요도**: 중간
- **화면 타입**: 선택 및 설정 페이지
#### 주요 기능
1. 템플릿 목록 표시 (일반, 스크럼, 킥오프, 주간)
2. 템플릿 미리보기
3. 섹션 커스터마이징 (추가/삭제/순서 변경)
4. 회의록 도구 준비
#### UI 구성요소
**Mobile (320px ~ 767px)**
```
┌─────────────────────────────┐
│ [←] 템플릿 선택 [다음]│
├─────────────────────────────┤
│ │
│ 회의 유형에 맞는 템플릿을 │
│ 선택해주세요 │
│ │
│ ┌───────────────────────┐ │
│ │ 📋 일반 회의 │ │
│ │ 기본 구조: 참석자, │ │
│ │ 안건, 논의, 결정, Todo│ │
│ │ [미리보기] [✓ 선택] │ │
│ └───────────────────────┘ │
│ │
│ ┌───────────────────────┐ │
│ │ 🏃 스크럼 회의 │ │
│ │ 어제 한 일, 오늘 할 일│ │
│ │ 이슈 │ │
│ │ [미리보기] [ 선택] │ │
│ └───────────────────────┘ │
│ │
│ ┌───────────────────────┐ │
│ │ 🚀 프로젝트 킥오프 │ │
│ │ 개요, 목표, 일정, │ │
│ │ 역할, 리스크 │ │
│ │ [미리보기] [ 선택] │ │
│ └───────────────────────┘ │
│ │
│ ┌───────────────────────┐ │
│ │ 📊 주간 회의 │ │
│ │ 실적, 이슈, 다음 계획 │ │
│ │ [미리보기] [ 선택] │ │
│ └───────────────────────┘ │
│ │
│ [커스터마이징] │
│ │
└─────────────────────────────┘
```
**주요 컴포넌트**:
- 상단 헤더: 뒤로가기, 타이틀, 다음 버튼
- 템플릿 카드: 아이콘, 제목, 설명, 미리보기 버튼, 선택 버튼
- 커스터마이징 버튼 (선택한 템플릿이 있을 때 활성화)
**커스터마이징 모달**:
```
┌─────────────────────────────┐
│ 템플릿 커스터마이징 [완료]│
├─────────────────────────────┤
│ │
│ 섹션 관리 │
│ │
│ ☰ 참석자 │
│ ☰ 안건 │
│ ☰ 논의 내용 │
│ ☰ 결정 사항 │
│ ☰ Todo │
│ │
│ ┌─────────────────────┐ │
│ │ + 섹션 추가 │ │
│ └─────────────────────┘ │
│ │
│ 섹션을 길게 눌러 순서를 │
│ 변경하거나 삭제할 수 있습니다│
│ │
└─────────────────────────────┘
```
#### 인터랙션
1. **템플릿 선택**:
- 카드 탭: 선택 상태 토글
- 미리보기 버튼: 템플릿 구조 모달 표시
- 하나만 선택 가능 (라디오 버튼 방식)
2. **미리보기**:
- 템플릿 구조 전체 표시
- 샘플 데이터로 예시 제공
- 닫기 버튼으로 모달 종료
3. **커스터마이징**:
- 커스터마이징 버튼 클릭 → 모달 표시
- 섹션 순서 변경: 드래그 앤 드롭 또는 위/아래 버튼
- 섹션 삭제: 스와이프 또는 삭제 아이콘
- 섹션 추가: 입력 필드에 섹션명 입력 후 추가
- 완료 버튼: 변경 사항 저장
4. **다음 단계**:
- 다음 버튼 클릭 → 05-회의진행 화면으로 이동
- 템플릿 정보 전달 (선택한 템플릿, 커스터마이징 내용)
#### 데이터 요구사항
- **입력**: 템플릿 선택, 커스터마이징 정보
- **출력**: 준비된 회의록 구조
- **캐싱**: 템플릿 목록 (앱 시작 시 로드)
#### 에러 처리
| 에러 유형 | 메시지 | 액션 |
|-----------|--------|------|
| 템플릿 미선택 | 템플릿을 선택해주세요 | 선택 유도 |
| 섹션명 중복 | 이미 존재하는 섹션명입니다 | 재입력 유도 |
| 섹션 로드 실패 | 템플릿을 불러올 수 없습니다 | 새로고침 버튼 |
---
### 3.5 05-회의진행
#### 개요
- **목적**: 회의 진행, 실시간 회의록 작성, 차별화 기능 제공
- **관련 유저스토리**: UFR-MEET-030 (회의시작), UFR-AI-010 (자동작성), UFR-RAG-010/020 (용어설명), UFR-COLLAB-010/020 (협업)
- **비즈니스 중요도**: 매우 높음 (핵심 차별화 기능)
- **화면 타입**: 실시간 협업 페이지
#### 주요 기능
1. 음성 녹음 및 실시간 STT 변환
2. AI 자동 회의록 작성 및 구조화
3. 맥락 기반 용어 설명 (차별화)
4. 실시간 협업 및 동기화
5. 충돌 해결
6. 회의 종료
#### UI 구성요소
**Mobile (320px ~ 767px)**
```
┌─────────────────────────────┐
│ [←] 프로젝트 킥오프 [종료]│
├─────────────────────────────┤
│ │
│ 🔴 녹음 중 [23:45] │
│ ┌─────────────────────┐ │
│ │ 🎵 파형 애니메이션 │ │
│ └─────────────────────┘ │
│ │
│ 👥 참석자 (3/5명) │
│ [김민준] [박서연] [이준호] │
│ │
├─────────────────────────────┤
│ 📝 실시간 회의록 │
│ │
│ ▼ 참석자 │
│ - 김민준 (주관자) │
│ - 박서연 │
│ - 이준호 │
│ │
│ ▼ 안건 │
│ - 프로젝트 목표 정의 │
│ - 일정 및 마일스톤 │
│ │
│ ▼ 논의 내용 │
│ "우리는 Q1까지 MVP를 │
│ 완성해야 합니다..." │
│ │
│ 💡 [RAG] 용어 설명 │
│ "MVP는 최소 기능 제품으로│
│ 이전 프로젝트에서는..." │
│ │
│ ▼ 결정 사항 │
│ - 개발 프레임워크: React │
│ - 배포 환경: AWS │
│ │
│ ▼ Todo │
│ ☐ 요구사항 정의 @김민준 │
│ (~ 10/25) │
│ │
│ [📝 수정] [💬 댓글] │
│ │
└─────────────────────────────┘
```
**주요 컴포넌트**:
- 상단 헤더: 뒤로가기, 회의 제목, 종료 버튼
- 녹음 상태 영역: 녹음 표시, 진행 시간, 파형 애니메이션
- 참석자 목록: 아바타, 이름, 참석 상태
- 회의록 섹션: 아코디언 방식, 접기/펼치기
- 실시간 텍스트 영역: STT 변환 결과 표시
- AI 자동 정리 영역: 구조화된 회의록
- 용어 하이라이트: 밑줄 또는 배경색, 툴팁
- 액션 버튼: 수정, 댓글, 첨부
**맥락 기반 용어 설명 툴팁** (차별화 기능):
```
┌─────────────────────────────┐
│ MVP (Minimum Viable Product)│
├─────────────────────────────┤
│ 📘 정의: │
│ 최소 기능 제품, 핵심 기능만 │
│ 구현하여 시장 검증 │
│ │
│ 🏢 이 회의에서의 의미: │
│ "Q1까지 사용자 인증, 대시보드│
│ 핵심 기능만 구현" │
│ │
│ 📂 관련 프로젝트: │
│ - 2024 고객 포털 프로젝트 │
│ - 2023 모바일 앱 리뉴얼 │
│ │
│ 📄 과거 회의록: │
│ - 2024-09-15 기획 회의 │
│ - 2024-08-20 킥오프 회의 │
│ │
│ [자세히 보기] │
└─────────────────────────────┘
```
#### 인터랙션
1. **회의 시작**:
- 회의 시작 버튼 클릭 → 권한 확인 (마이크)
- 녹음 시작 → 파형 애니메이션 표시
- 참석자 목록 표시 → 실시간 참석 상태 업데이트
2. **실시간 STT 및 AI 작성**:
- 음성 인식 → 텍스트 변환 (1초 이내)
- AI 자동 정리 → 3-5초 간격으로 회의록 업데이트
- 화자 식별 → 발언자 표시
- 구조화 → 템플릿 섹션에 맞춰 자동 분류
3. **맥락 기반 용어 설명** (차별화):
- 전문용어 자동 감지 → 하이라이트 표시
- 용어 클릭/탭 → 툴팁 표시
- RAG 검색 → 과거 회의록, 사내 문서에서 맥락 추출
- 설명 표시:
- 간단한 정의
- 이 회의에서의 의미
- 관련 프로젝트/이슈
- 과거 회의록 링크
- 사내 문서 링크
- 툴팁 외부 클릭 → 닫기
- "자세히 보기" → 전체 화면 모달
4. **실시간 협업** (UFR-COLLAB-010):
- 회의록 수정 → WebSocket으로 즉시 동기화
- 수정 영역 하이라이트 (3초간)
- 수정자 이름 표시
- 버전 관리 → 수정 이력 저장
5. **충돌 해결** (UFR-COLLAB-020):
- 동일 위치 동시 수정 감지
- 충돌 알림 표시
- 해결 방식 선택:
- Last Write Wins (기본)
- 수동 병합 (비교 UI 표시)
6. **회의 종료**:
- 종료 버튼 클릭 → 확인 다이얼로그
- 확인 → 녹음 중지 → 06-검증완료 화면으로 이동
#### 데이터 요구사항
- **입력**: 음성 스트림, 회의 ID, 참석자 정보
- **출력**: 텍스트 변환 결과, 구조화된 회의록, 용어 설명
- **실시간 동기화**: WebSocket 연결
- **로컬 저장**: 임시 회의록 (30초 간격)
#### 에러 처리
| 에러 유형 | 메시지 | 액션 |
|-----------|--------|------|
| 마이크 권한 없음 | 마이크 권한이 필요합니다 | 설정 안내 |
| STT 실패 | 음성 인식에 실패했습니다 | 수동 입력 모드 |
| AI 처리 실패 | 자동 정리 중 오류 발생 | 재시도 버튼 |
| 동기화 실패 | 연결이 끊어졌습니다 | 재연결 시도 |
| 용어 설명 없음 | 관련 정보를 찾을 수 없습니다 | 전문가 요청 버튼 |
---
### 3.6 06-검증완료
#### 개요
- **목적**: 회의록 섹션별 검증 및 완료 표시
- **관련 유저스토리**: UFR-COLLAB-030
- **비즈니스 중요도**: 중간
- **화면 타입**: 검증 및 확인 페이지
#### 주요 기능
1. 섹션별 검증 상태 확인
2. 검증 완료 체크
3. 섹션 잠금 (회의 생성자만)
4. 다음 단계 (회의 종료)
#### UI 구성요소
**Mobile (320px ~ 767px)**
```
┌─────────────────────────────┐
│ [←] 회의록 검증 [다음]│
├─────────────────────────────┤
│ │
│ 회의록 섹션별로 검증해주세요│
│ │
│ ✅ 참석자 (검증완료) │
│ ┌───────────────────────┐ │
│ │ - 김민준 (주관자) │ │
│ │ - 박서연 │ │
│ │ - 이준호 │ │
│ │ │ │
│ │ 검증자: 김민준 │ │
│ │ 시간: 14:35 │ │
│ │ [수정] [🔒 잠금] │ │
│ └───────────────────────┘ │
│ │
│ ⚠️ 안건 (검증 필요) │
│ ┌───────────────────────┐ │
│ │ - 프로젝트 목표 정의 │ │
│ │ - 일정 및 마일스톤 │ │
│ │ │ │
│ │ [수정] [✓ 검증완료] │ │
│ └───────────────────────┘ │
│ │
│ ⚠️ 논의 내용 (검증 필요) │
│ ┌───────────────────────┐ │
│ │ "우리는 Q1까지..." │ │
│ │ │ │
│ │ [수정] [✓ 검증완료] │ │
│ └───────────────────────┘ │
│ │
│ ✅ 결정 사항 (검증완료) │
│ ✅ Todo (검증완료) │
│ │
│ 전체 진행률: 60% (3/5) │
│ │
└─────────────────────────────┘
```
**주요 컴포넌트**:
- 상단 헤더: 뒤로가기, 타이틀, 다음 버튼
- 섹션 카드: 제목, 내용 미리보기, 검증 상태, 검증자 정보
- 액션 버튼: 수정, 검증완료, 잠금 (회의 생성자만)
- 진행률 표시: 퍼센트, 완료 수/전체 수
#### 인터랙션
1. **섹션 검증**:
- 섹션 카드 탭 → 전체 내용 표시
- 검증완료 버튼 클릭 → 상태 업데이트
- 검증 시간 및 검증자 기록
- 실시간 동기화 → 다른 참석자에게 알림
2. **섹션 잠금** (회의 생성자만):
- 잠금 버튼 클릭 → 확인 다이얼로그
- 확인 → 섹션 잠금 (추가 수정 불가)
- 잠금 아이콘 표시
3. **섹션 수정**:
- 수정 버튼 클릭 → 편집 모드
- 인라인 편집 또는 모달
- 저장 → 상태 "검증 필요"로 변경
4. **다음 단계**:
- 다음 버튼 클릭 → 07-회의종료 화면으로 이동
- 검증 미완료 섹션이 있어도 진행 가능 (나중에 수정 가능)
#### 데이터 요구사항
- **입력**: 섹션별 검증 상태
- **출력**: 검증 완료 정보 (검증자, 시간)
- **실시간 동기화**: WebSocket
#### 에러 처리
| 에러 유형 | 메시지 | 액션 |
|-----------|--------|------|
| 검증 권한 없음 | 검증 권한이 없습니다 | 확인 버튼 |
| 잠금 권한 없음 | 회의 생성자만 잠금할 수 있습니다 | 확인 버튼 |
| 동기화 실패 | 검증 상태 동기화 실패 | 재시도 버튼 |
---
### 3.7 07-회의종료
#### 개요
- **목적**: 회의 종료, 통계 확인, Todo 자동 추출, 최종 확정
- **관련 유저스토리**: UFR-MEET-040 (회의종료), UFR-MEET-050 (최종확정), UFR-AI-020 (Todo자동추출)
- **비즈니스 중요도**: 높음
- **화면 타입**: 요약 및 확정 페이지
#### 주요 기능
1. 회의 통계 표시
2. AI Todo 자동 추출 결과
3. 최종 회의록 확정
4. 회의록 공유 이동
#### UI 구성요소
**Mobile (320px ~ 767px)**
```
┌─────────────────────────────┐
│ [←] 회의 종료 [확정]│
├─────────────────────────────┤
│ │
│ 🎉 회의가 종료되었습니다 │
│ │
│ 📊 회의 통계 │
│ ┌───────────────────────┐ │
│ │ ⏱️ 총 시간: 45분 │ │
│ │ 👥 참석자: 3명 │ │
│ │ 💬 발언 횟수: │ │
│ │ 김민준 12회 │ │
│ │ 박서연 8회 │ │
│ │ 이준호 5회 │ │
│ │ 🔑 주요 키워드: │ │
│ │ #MVP #React #AWS │ │
│ └───────────────────────┘ │
│ │
│ ✅ AI Todo 자동 추출 │
│ ┌───────────────────────┐ │
│ │ ☐ 요구사항 정의 │ │
│ │ @김민준 ~ 10/25 │ │
│ │ │ │
│ │ ☐ 기술 스택 검토 │ │
│ │ @박서연 ~ 10/27 │ │
│ │ │ │
│ │ ☐ 인프라 설계 │ │
│ │ @이준호 ~ 10/30 │ │
│ └───────────────────────┘ │
│ │
│ 필수 항목 확인: │
│ ✅ 회의 제목 │
│ ✅ 참석자 목록 │
│ ✅ 주요 논의 내용 │
│ ✅ 결정 사항 │
│ │
│ ┌─────────────────────┐ │
│ │ 최종 회의록 확정 │ │
│ └─────────────────────┘ │
│ │
│ [나중에 확정] │
│ │
└─────────────────────────────┘
```
**주요 컴포넌트**:
- 상단 헤더: 뒤로가기, 타이틀, 확정 버튼
- 완료 메시지: 아이콘, 텍스트
- 통계 카드: 시간, 참석자, 발언 횟수, 키워드
- Todo 자동 추출 영역: Todo 목록, 담당자, 마감일
- 필수 항목 체크리스트: 체크 아이콘
- 확정 버튼 (primary)
- 나중에 확정 버튼 (secondary)
#### 인터랙션
1. **회의 통계**:
- 자동 생성 및 표시
- 그래프 또는 차트 (선택)
- 키워드 탭 → 관련 섹션으로 이동
2. **AI Todo 자동 추출** (UFR-AI-020):
- AI가 회의록 분석 → 액션 아이템 식별
- 담당자 자동 지정 (발언 기반)
- 마감일 자동 추출 (언급된 경우)
- Todo 편집 가능 (담당자, 마감일 수정)
- 추가/삭제 가능
3. **최종 확정** (UFR-MEET-050):
- 확정 버튼 클릭 → 필수 항목 검사
- 필수 항목 누락 시:
- 누락 항목 표시
- 해당 섹션으로 이동 유도
- 필수 항목 완료 시:
- 최종 버전 생성
- 확정 시간 기록
- Todo 서비스로 Todo 전달 (UFR-TODO-010)
- 08-회의록공유 화면으로 이동
4. **나중에 확정**:
- 버튼 클릭 → 대시보드로 이동
- 회의록 상태: "작성중"
- 나중에 수정 및 확정 가능
#### 데이터 요구사항
- **입력**: 회의 데이터 (시간, 참석자, 발언 내용)
- **출력**: 통계, Todo 목록, 확정 정보
- **저장**: 최종 회의록, Todo 데이터
#### 에러 처리
| 에러 유형 | 메시지 | 액션 |
|-----------|--------|------|
| 필수 항목 누락 | [항목명]이 작성되지 않았습니다 | 해당 섹션으로 이동 |
| Todo 추출 실패 | Todo 자동 추출 실패 | 수동 작성 유도 |
| 확정 실패 | 회의록 확정에 실패했습니다 | 재시도 버튼 |
---
### 3.8 08-회의록공유
#### 개요
- **목적**: 회의록 공유 설정 및 알림 발송
- **관련 유저스토리**: UFR-MEET-060
- **비즈니스 중요도**: 높음
- **화면 타입**: 설정 및 액션 페이지
#### 주요 기능
1. 공유 대상 선택
2. 권한 설정
3. 공유 방식 선택
4. 링크 보안 옵션
5. 공유 실행 및 알림 발송
#### UI 구성요소
**Mobile (320px ~ 767px)**
```
┌─────────────────────────────┐
│ [←] 회의록 공유 [공유]│
├─────────────────────────────┤
│ │
│ 공유 대상 │
│ ┌───────────────────────┐ │
│ │ ● 참석자 전체 (기본) │ │
│ │ ○ 특정 참석자 선택 │ │
│ └───────────────────────┘ │
│ │
│ 공유 권한 │
│ ┌───────────────────────┐ │
│ │ ● 읽기 전용 │ │
│ │ ○ 댓글 가능 │ │
│ │ ○ 편집 가능 │ │
│ └───────────────────────┘ │
│ │
│ 공유 방식 │
│ ┌───────────────────────┐ │
│ │ ☑️ 이메일 발송 │ │
│ │ ☑️ 링크 복사 │ │
│ └───────────────────────┘ │
│ │
│ 링크 보안 (선택) │
│ ┌───────────────────────┐ │
│ │ ☐ 유효 기간 설정 │ │
│ │ [30일 ▼] │ │
│ │ │ │
│ │ ☐ 비밀번호 설정 │ │
│ │ [입력 필드] │ │
│ └───────────────────────┘ │
│ │
│ 🔔 다음 회의 일정 │
│ ┌───────────────────────┐ │
│ │ ☑️ 캘린더 자동 등록 │ │
│ │ 날짜: [선택] │ │
│ └───────────────────────┘ │
│ │
│ ┌─────────────────────┐ │
│ │ 회의록 공유 │ │
│ └─────────────────────┘ │
│ │
└─────────────────────────────┘
```
**주요 컴포넌트**:
- 상단 헤더: 뒤로가기, 타이틀, 공유 버튼
- 공유 대상 라디오 버튼
- 권한 설정 라디오 버튼
- 공유 방식 체크박스
- 링크 보안 옵션: 유효 기간, 비밀번호
- 다음 회의 일정: 캘린더 자동 등록 옵션
- 공유 버튼 (primary)
#### 인터랙션
1. **공유 대상 선택**:
- 참석자 전체 (기본 선택)
- 특정 참석자 선택 → 체크박스 목록 표시
2. **권한 설정**:
- 읽기 전용 (기본)
- 댓글 가능
- 편집 가능
3. **공유 방식**:
- 이메일 발송: 참석자 이메일로 알림
- 링크 복사: 클립보드에 복사 → 토스트 메시지
4. **링크 보안**:
- 유효 기간: 드롭다운 (7일, 30일, 90일, 무제한)
- 비밀번호: 입력 필드, 자동 생성 버튼
5. **다음 회의 일정**:
- 회의록에서 다음 회의 언급 자동 감지
- 캘린더 자동 등록 체크박스
- 날짜 선택기
6. **공유 실행**:
- 공유 버튼 클릭 → 처리
- 성공 시:
- 공유 링크 생성
- 이메일 발송 (선택 시)
- 링크 복사 (선택 시)
- 캘린더 등록 (선택 시)
- 공유 시간 기록
- 성공 메시지 표시
- 대시보드로 이동
- 실패 시: 오류 메시지
#### 데이터 요구사항
- **입력**: 공유 대상, 권한, 방식, 보안 옵션
- **출력**: 공유 링크, 발송 결과
- **저장**: 공유 이력
#### 에러 처리
| 에러 유형 | 메시지 | 액션 |
|-----------|--------|------|
| 공유 실패 | 공유에 실패했습니다 | 재시도 버튼 |
| 이메일 발송 실패 | 이메일 발송 실패 | 링크 복사 유도 |
| 링크 생성 실패 | 링크 생성 실패 | 재시도 버튼 |
---
### 3.9 09-Todo관리
#### 개요
- **목적**: Todo 할당, 진행 관리, 회의록 실시간 연동 (차별화)
- **관련 유저스토리**: UFR-TODO-010 (Todo할당), UFR-TODO-030 (Todo완료처리)
- **비즈니스 중요도**: 높음 (차별화 기능)
- **화면 타입**: 목록 및 관리 페이지
#### 주요 기능
1. Todo 목록 조회 (진행중/완료)
2. Todo 완료 처리
3. 회의록 실시간 연동 (차별화)
4. 필터링 및 정렬
5. 알림 발송
#### UI 구성요소
**Mobile (320px ~ 767px)**
```
┌─────────────────────────────┐
│ [프로필] Todo [알림🔔]│
├─────────────────────────────┤
│ │
│ [진행중 ▼] [마감일순 ▼] │
│ │
│ 📌 진행 중 (3건) │
│ │
│ ┌───────────────────────┐ │
│ │ ☐ 요구사항 정의 │ │
│ │ @김민준 │ │
│ │ 📅 ~ 10/25 (D-5) │ │
│ │ ⭐ 높음 │ │
│ │ 📝 프로젝트 킥오프 │ │
│ │ (10/20) │ │
│ └───────────────────────┘ │
│ │
│ ┌───────────────────────┐ │
│ │ ☐ 기술 스택 검토 │ │
│ │ @박서연 │ │
│ │ 📅 ~ 10/27 (D-7) │ │
│ │ ⭐ 보통 │ │
│ │ 📝 주간 회의 (10/19) │ │
│ └───────────────────────┘ │
│ │
│ ✅ 완료됨 (2건) │
│ │
│ ┌───────────────────────┐ │
│ │ ☑️ 회의 일정 조율 │ │
│ │ @이준호 │ │
│ │ ✓ 10/18 완료 │ │
│ │ 📝 킥오프 준비 회의 │ │
│ └───────────────────────┘ │
│ │
├─────────────────────────────┤
│ [대시보드] [Todo] [더보기]│
└─────────────────────────────┘
```
**주요 컴포넌트**:
- 상단 헤더: 프로필, 타이틀, 알림
- 필터 영역: 상태 (진행중/완료), 정렬 (마감일/우선순위/최신순)
- Todo 카드:
- 체크박스 (완료 처리)
- Todo 내용
- 담당자
- 마감일 (D-day 표시)
- 우선순위 (아이콘)
- 회의록 링크 (제목, 날짜)
- 하단 네비게이션
**Todo 상세 모달**:
```
┌─────────────────────────────┐
│ Todo 상세 [✕] │
├─────────────────────────────┤
│ │
│ ☐ 요구사항 정의 │
│ │
│ 담당자: 김민준 │
│ 마감일: 2025-10-25 │
│ 우선순위: 높음 │
│ │
│ 📝 관련 회의록: │
│ 프로젝트 킥오프 (10/20) │
│ [회의록 보기] │
│ │
│ 💬 댓글 (2) │
│ - 김민준: 진행 중입니다 │
│ - 박서연: 도움 필요하시면 │
│ 연락주세요 │
│ │
│ ┌─────────────────────┐ │
│ │ 완료 처리 │ │
│ └─────────────────────┘ │
│ │
└─────────────────────────────┘
```
#### 인터랙션
1. **Todo 목록**:
- 무한 스크롤 또는 페이지네이션
- 카드 탭: 상세 모달 표시
- 스와이프: 빠른 액션 (완료, 수정, 삭제)
2. **Todo 완료 처리** (UFR-TODO-030):
- 체크박스 클릭 → 확인 다이얼로그
- 확인 → 완료 상태 변경
- 완료 시간 기록
- 회의록 실시간 반영 (차별화):
- 관련 회의록의 Todo 섹션 자동 업데이트
- 완료 표시 (체크 아이콘)
- 완료 시간 및 완료자 표시
- 알림 발송:
- 회의 참석자에게 완료 알림
- 모든 Todo 완료 시 전체 완료 알림
3. **회의록 연결** (차별화):
- 회의록 보기 버튼 → 해당 회의록 상세 화면
- 원문 맥락 추적 가능
- 양방향 연결 (Todo ↔ 회의록)
4. **필터링 및 정렬**:
- 상태 필터: 진행중, 완료
- 정렬: 마감일순, 우선순위, 최신순
5. **댓글 및 협업**:
- 댓글 작성 → 실시간 동기화
- 담당자에게 알림
#### 데이터 요구사항
- **입력**: 필터, 정렬, 완료 처리
- **출력**: Todo 목록, 회의록 연결 정보
- **실시간 동기화**: WebSocket (회의록 반영)
#### 에러 처리
| 에러 유형 | 메시지 | 액션 |
|-----------|--------|------|
| 조회 실패 | Todo 목록을 불러올 수 없습니다 | 새로고침 버튼 |
| 완료 처리 실패 | 완료 처리에 실패했습니다 | 재시도 버튼 |
| 회의록 연결 실패 | 회의록을 찾을 수 없습니다 | 확인 버튼 |
---
## 4. 화면 간 전환 및 네비게이션
### 4.1 네비게이션 전략
**Mobile (320px ~ 767px)**
- **하단 네비게이션 바**: 대시보드, Todo, 더보기
- **상단 헤더**: 뒤로가기, 타이틀, 액션 버튼
- **햄버거 메뉴**: 설정, 프로필, 로그아웃
- **플로팅 액션 버튼 (FAB)**: 빠른 액세스 (새 회의 예약)
**Tablet (768px ~ 1023px)**
- **사이드 네비게이션**: 고정된 좌측 메뉴
- **상단 네비게이션**: 로고, 검색, 알림, 프로필
- **플로팅 액션 버튼 (FAB)**: 빠른 액세스
**Desktop (1024px 이상)**
- **좌측 사이드바**: 고정된 네비게이션 메뉴
- **상단 헤더**: 로고, 검색, 알림, 프로필
- **키보드 단축키**: 빠른 네비게이션
### 4.2 화면 전환 패턴
| 전환 | 애니메이션 | 방향 |
|------|------------|------|
| 로그인 → 대시보드 | 페이드인 | - |
| 대시보드 → 상세 | 슬라이드 좌 | 우 → 좌 |
| 상세 → 대시보드 | 슬라이드 우 | 좌 → 우 |
| 모달 표시 | 슬라이드 상 | 하 → 상 |
| 모달 닫기 | 슬라이드 하 | 상 → 하 |
### 4.3 제스처 지원 (Mobile)
- **스와이프 우**: 뒤로가기 (iOS 스타일)
- **스와이프 좌**: 빠른 액션 (삭제, 공유)
- **길게 누르기**: 컨텍스트 메뉴
- **핀치 줌**: 이미지 확대/축소
- **풀 투 리프레시**: 목록 새로고침
---
## 5. 반응형 설계 전략
### 5.1 브레이크포인트
```css
/* Mobile First (기본) */
@media (min-width: 320px) { /* Mobile */ }
@media (min-width: 768px) { /* Tablet */ }
@media (min-width: 1024px) { /* Desktop */ }
@media (min-width: 1440px) { /* Large Desktop */ }
```
### 5.2 레이아웃 전략
**Mobile (320px ~ 767px)**
- 단일 컬럼 레이아웃
- 풀 스크린 모달
- 하단 네비게이션
- 스택 방식 (세로 배치)
**Tablet (768px ~ 1023px)**
- 2단 컬럼 (메인 + 사이드)
- 사이드 패널 (용어 설명, 참석자 목록)
- 플로팅 모달
- 그리드 레이아웃 (회의록 목록 2열)
**Desktop (1024px 이상)**
- 3단 컬럼 (네비게이션 + 메인 + 사이드)
- 인라인 모달
- 상단 네비게이션
- 그리드 레이아웃 (회의록 목록 3-4열)
### 5.3 점진적 향상
**Mobile (기본 기능)**
- 핵심 회의록 작성 기능
- 필수 검증 및 공유
- 기본 Todo 관리
**Tablet (추가 기능)**
- 빠른 액세스 패널
- 회의록 미리보기
- 멀티 선택 및 일괄 작업
**Desktop (고급 기능)**
- 다중 회의록 비교
- 고급 검색 및 필터
- 키보드 단축키
- 드래그 앤 드롭
### 5.4 타이포그래피 반응형
```css
/* 제목 */
h1 {
font-size: 24px; /* Mobile */
}
@media (min-width: 768px) {
h1 { font-size: 32px; } /* Tablet */
}
@media (min-width: 1024px) {
h1 { font-size: 40px; } /* Desktop */
}
/* 본문 */
body {
font-size: 14px; /* Mobile */
line-height: 1.5;
}
@media (min-width: 768px) {
body { font-size: 16px; } /* Tablet */
}
```
### 5.5 이미지 및 미디어 반응형
- **반응형 이미지**: `srcset`, `sizes` 속성 활용
- **WebP 포맷**: 최신 브라우저 지원
- **레이지 로딩**: `loading="lazy"` 속성
- **비디오**: 자동 재생 비활성화 (모바일)
---
## 6. 접근성 보장 방안
### 6.1 WCAG 2.1 Level AA 준수
#### 인식 가능성 (Perceivable)
1. **텍스트 대체**:
- 모든 이미지에 `alt` 텍스트 제공
- 아이콘에 `aria-label` 추가
- 정보 전달 이미지: 상세한 설명
- 장식 이미지: `alt=""` (빈 문자열)
2. **색상 대비**:
- 일반 텍스트: 최소 4.5:1
- 큰 텍스트 (18pt 이상): 최소 3:1
- UI 컴포넌트: 최소 3:1
- 색상만으로 정보 전달 금지 (아이콘, 텍스트 병행)
3. **리사이징**:
- 200%까지 확대 가능
- 콘텐츠 손실 없음
- 가로 스크롤 최소화
4. **콘텐츠 구조**:
- 의미론적 HTML 사용 (`<header>`, `<nav>`, `<main>`, `<article>`, `<section>`, `<footer>`)
- 제목 태그 계층 구조 (`<h1>` ~ `<h6>`)
- 목록 태그 활용 (`<ul>`, `<ol>`, `<li>`)
#### 운용 가능성 (Operable)
1. **키보드 접근**:
- 모든 기능 키보드로 조작 가능
- Tab 키로 순차 이동
- Shift + Tab으로 역순 이동
- Enter/Space 키로 버튼 실행
- Esc 키로 모달 닫기
2. **충분한 시간**:
- 자동 로그아웃: 15분 전 경고
- 세션 연장 옵션 제공
- 타임아웃 없는 작업: 회의록 작성
3. **포커스 표시**:
- 명확한 포커스 인디케이터 (2px 테두리)
- 색상 대비 충족
- 포커스 순서: 논리적 흐름
4. **제목 및 레이블**:
- 모든 폼 필드에 `<label>` 연결
- 버튼: 명확한 텍스트
- 링크: 목적지 설명
#### 이해 가능성 (Understandable)
1. **읽기 수준**:
- 간결하고 명확한 언어
- 전문용어 설명 제공
- 짧은 문장 (20단어 이하)
2. **예측 가능성**:
- 일관된 네비게이션
- 일관된 버튼 배치
- 상태 변경 시 사용자에게 알림
3. **입력 지원**:
- 실시간 오류 검증
- 명확한 오류 메시지
- 수정 제안 제공
- 폼 레이블 명확화
#### 견고성 (Robust)
1. **마크업 유효성**:
- 유효한 HTML5
- 중첩 태그 올바르게 닫기
- 고유한 `id` 속성
2. **스크린 리더 지원**:
- ARIA 레이블 (`aria-label`, `aria-labelledby`)
- ARIA 역할 (`role="button"`, `role="navigation"`)
- ARIA 상태 (`aria-expanded`, `aria-selected`)
- Live Regions (`aria-live="polite"`)
3. **호환성**:
- 최신 브라우저 지원
- 보조 기술 테스트 (NVDA, JAWS, VoiceOver)
### 6.2 모바일 접근성
1. **터치 타겟**:
- 최소 크기: 44x44px
- 충분한 간격: 8px 이상
- 제스처 대안: 버튼 제공
2. **화면 회전**:
- 세로/가로 모드 모두 지원
- 콘텐츠 자동 조정
3. **확대/축소**:
- 핀치 줌 지원
- 최대 200% 확대
---
## 7. 성능 최적화 방안
### 7.1 초기 로딩 최적화
1. **코드 스플리팅**:
- 화면별 번들 분리
- 동적 import 활용
- React.lazy, Suspense 사용
```javascript
const Dashboard = React.lazy(() => import('./Dashboard'));
const MeetingProgress = React.lazy(() => import('./MeetingProgress'));
```
2. **레이지 로딩**:
- 이미지: `loading="lazy"`
- 컴포넌트: Intersection Observer
- 스크립트: `async`, `defer`
3. **프리로딩**:
- 핵심 리소스 우선 로드
- `<link rel="preload">`
- 폰트, CSS 프리로드
4. **압축**:
- Gzip/Brotli 압축
- 이미지 최적화 (WebP, AVIF)
- CSS/JS 미니파이
5. **캐싱**:
- 서비스 워커 활용 (PWA)
- HTTP 캐시 헤더
- 로컬 스토리지/세션 스토리지
### 7.2 런타임 성능
1. **가상 스크롤**:
- 긴 목록 최적화 (react-window, react-virtualized)
- 뷰포트 내 항목만 렌더링
2. **디바운싱/쓰로틀링**:
- 검색 입력: 300ms 디바운싱
- 스크롤 이벤트: 100ms 쓰로틀링
- 리사이즈 이벤트: 200ms 쓰로틀링
3. **메모이제이션**:
- React.memo로 컴포넌트 재렌더링 방지
- useMemo, useCallback 훅 활용
- 불필요한 상태 업데이트 최소화
4. **이미지 최적화**:
- WebP 포맷 사용
- 반응형 이미지 (`srcset`, `sizes`)
- 이미지 CDN 활용
- 썸네일 생성
### 7.3 네트워크 최적화
1. **API 요청 최소화**:
- 배치 요청 (GraphQL)
- 캐싱 전략 (React Query, SWR)
- 중복 요청 방지
2. **웹소켓 최적화**:
- 연결 풀 관리
- 델타 동기화 (변경 부분만 전송)
- 재연결 로직 (exponential backoff)
3. **오프라인 지원**:
- PWA (Service Worker)
- 로컬 스토리지 활용
- 오프라인 큐 (동기화 대기)
4. **CDN**:
- 정적 리소스 CDN 배포
- 이미지, 폰트, JS/CSS
### 7.4 실시간 협업 최적화
1. **WebSocket 연결**:
- 연결 풀 관리
- 재연결 로직
- Heartbeat (연결 유지)
2. **델타 동기화**:
- 전체 문서가 아닌 변경 부분만 전송
- Operational Transformation (OT)
- Conflict-free Replicated Data Type (CRDT)
3. **낙관적 UI 업데이트**:
- 즉시 UI 업데이트
- 서버 응답 후 조정
- 롤백 로직
4. **충돌 해결 큐**:
- 충돌 감지 및 큐잉
- 순차 처리
- 우선순위 관리
### 7.5 AI 처리 최적화
1. **스트리밍 응답**:
- Server-Sent Events (SSE)
- 점진적 표시
- 사용자 피드백 즉시 제공
2. **백그라운드 처리**:
- Web Worker 활용
- 메인 스레드 차단 방지
3. **캐싱**:
- 이전 요청 결과 캐싱
- 유사한 요청 재활용
4. **타임아웃**:
- AI 요청 타임아웃 설정 (30초)
- 실패 시 재시도 또는 수동 모드
### 7.6 성능 목표
| 메트릭 | 목표 | 측정 도구 |
|--------|------|-----------|
| FCP (First Contentful Paint) | < 1.5s | Lighthouse |
| LCP (Largest Contentful Paint) | < 2.5s | Lighthouse |
| TTI (Time to Interactive) | < 3.5s | Lighthouse |
| CLS (Cumulative Layout Shift) | < 0.1 | Lighthouse |
| FID (First Input Delay) | < 100ms | Lighthouse |
### 7.7 모니터링 및 측정
- **Google Lighthouse**: 성능 점수 측정
- **Web Vitals**: 핵심 지표 모니터링
- **Real User Monitoring (RUM)**: 실제 사용자 데이터 수집
- **Performance API**: 브라우저 성능 데이터
---
## 8. 변경 이력
| 버전 | 날짜 | 작성자 | 변경 내용 |
|------|------|--------|-----------|
| 1.0 | 2025-10-20 | 이미준 | 초안 작성 |
---
## 부록
### A. 용어 정의
- **Mobile First**: 모바일 환경을 우선으로 설계하고, 점진적으로 데스크톱 환경을 확장하는 설계 철학
- **PWA (Progressive Web App)**: 웹과 네이티브 앱의 장점을 결합한 애플리케이션
- **WebSocket**: 실시간 양방향 통신을 위한 프로토콜
- **RAG (Retrieval-Augmented Generation)**: 검색 기반 생성 AI 기술
- **WCAG**: 콘텐츠 접근성 가이드라인
- **ARIA**: Accessible Rich Internet Applications, 접근성 향상을 위한 HTML 속성
### B. 참고 자료
- [WCAG 2.1 Guidelines](https://www.w3.org/WAI/WCAG21/quickref/)
- [Web Vitals](https://web.dev/vitals/)
- [Mobile First Design](https://www.uxpin.com/studio/blog/mobile-first-design/)
- [React Performance Optimization](https://react.dev/learn/render-and-commit)
---
**문서 끝**