diff --git a/claudedocs/[PLAN] mobile-overflow-testing.md b/claudedocs/[PLAN] mobile-overflow-testing.md new file mode 100644 index 00000000..6c3c7e64 --- /dev/null +++ b/claudedocs/[PLAN] mobile-overflow-testing.md @@ -0,0 +1,386 @@ +# 모바일 화면 오버플로우 테스트 계획서 + +> 작성일: 2026-01-09 +> 대상 기기: Galaxy Z Fold (접힌 상태) +> 목표: 모든 페이지에서 텍스트/요소 오버플로우 검출 및 수정 + +--- + +## 1. 개요 + +### 1.1 목적 +Galaxy Fold 접힌 상태(344px)에서 UI 요소가 컨테이너를 벗어나거나 텍스트가 잘리는 문제를 사전에 발견하고 수정 + +### 1.2 대상 뷰포트 + +| 기기 | 너비 | 높이 | 비고 | +|------|------|------|------| +| Galaxy Z Fold 5 (접힌) | **344px** | 882px | 주요 테스트 대상 | +| Galaxy Z Fold 5 (펼친) | 1812px | 882px | 참고용 | +| iPhone SE | 375px | 667px | 비교 테스트 | + +### 1.3 테스트 범위 + +**총 페이지 수: 185개** + +| 카테고리 | 페이지 수 | 우선순위 | +|----------|----------|----------| +| construction (시공) | 40 | 🔴 높음 | +| accounting (회계) | 26 | 🔴 높음 | +| sales (영업) | 18 | 🔴 높음 | +| settings (설정) | 17 | 🟡 중간 | +| hr (인사) | 14 | 🟡 중간 | +| production (생산) | 10 | 🟡 중간 | +| quality (품질) | 4 | 🟢 낮음 | +| reports (리포트) | 2 | 🟢 낮음 | +| dashboard | 1 | 🔴 높음 | +| 기타 | ~50 | 🟡 중간 | + +--- + +## 2. 테스트 방법 + +### 2.1 방법 A: Playwright 자동화 (권장) + +**장점** +- 전체 페이지 일괄 스크린샷 +- 반복 테스트 용이 +- 수정 후 비교 테스트 가능 + +**단점** +- 초기 세팅 필요 +- 로그인/인증 처리 필요 + +**구현 방식** +```typescript +// playwright-mobile-test.ts +import { chromium } from 'playwright'; + +const VIEWPORT = { width: 344, height: 882 }; +const BASE_URL = 'http://localhost:3000/ko'; + +const pages = [ + '/dashboard', + '/sales/client-management-sales-admin', + '/accounting/sales', + // ... 전체 페이지 목록 +]; + +async function captureScreenshots() { + const browser = await chromium.launch(); + const context = await browser.newContext({ + viewport: VIEWPORT, + // 로그인 쿠키 설정 + }); + + for (const page of pages) { + const p = await context.newPage(); + await p.goto(`${BASE_URL}${page}`); + await p.screenshot({ + path: `screenshots/fold/${page.replace(/\//g, '-')}.png`, + fullPage: true + }); + } +} +``` + +**결과물** +``` +screenshots/fold/ +├── dashboard.png +├── sales-client-management-sales-admin.png +├── accounting-sales.png +└── ... (185개) +``` + +--- + +### 2.2 방법 B: Chrome DevTools 수동 검수 + +**장점** +- 즉시 시작 가능 +- 실시간 CSS 수정 테스트 가능 +- 인터랙션 확인 가능 + +**단점** +- 시간 소요 (페이지당 1-2분) +- 반복 테스트 불편 + +**설정 방법** +1. Chrome DevTools (F12) 열기 +2. Device Toolbar (Ctrl+Shift+M) 활성화 +3. 기기 목록 → Edit → Add custom device +4. 이름: `Galaxy Z Fold 5 (Folded)` +5. 너비: `344`, 높이: `882` +6. Device pixel ratio: `3` +7. User agent: Mobile + +**체크리스트** +```markdown +## 페이지: [페이지명] + +### 레이아웃 +- [ ] 헤더 정상 표시 +- [ ] 사이드바 접힘/메뉴 버튼 표시 +- [ ] 메인 컨텐츠 영역 정상 + +### 텍스트 +- [ ] 제목 텍스트 오버플로우 없음 +- [ ] 버튼 텍스트 잘림 없음 +- [ ] 테이블 헤더 가독성 확인 + +### 테이블/리스트 +- [ ] 가로 스크롤 정상 동작 +- [ ] 컬럼 최소 너비 확보 +- [ ] 체크박스/액션 버튼 접근 가능 + +### 폼 +- [ ] 입력 필드 너비 적절 +- [ ] 라벨 텍스트 가독성 +- [ ] 버튼 터치 영역 충분 (최소 44px) + +### 모달/팝업 +- [ ] 화면 내 표시 +- [ ] 닫기 버튼 접근 가능 +- [ ] 스크롤 정상 동작 +``` + +--- + +### 2.3 방법 C: 혼합 방식 (권장) + +1. **1단계**: Playwright로 전체 페이지 스크린샷 캡처 +2. **2단계**: 스크린샷에서 문제 있어 보이는 페이지 목록 작성 +3. **3단계**: 문제 페이지만 DevTools로 상세 검수 +4. **4단계**: 수정 후 Playwright로 재검증 + +--- + +## 3. 예상 문제 패턴 + +### 3.1 높은 위험도 🔴 + +| 패턴 | 예시 | 해결 방법 | +|------|------|----------| +| 고정 너비 테이블 | `min-w-[800px]` | 가로 스크롤 또는 반응형 | +| 긴 텍스트 nowrap | `whitespace-nowrap` | `truncate` 또는 줄바꿈 | +| 고정 px 버튼 그룹 | `w-[400px]` | `w-full` 또는 flex-wrap | +| 큰 모달 | `max-w-4xl` | `max-w-[calc(100vw-2rem)]` | + +### 3.2 중간 위험도 🟡 + +| 패턴 | 예시 | 해결 방법 | +|------|------|----------| +| Flex 오버플로우 | `flex gap-4` 자식 | `min-w-0` 추가 | +| Grid 고정 컬럼 | `grid-cols-4` | `grid-cols-1 md:grid-cols-4` | +| 이미지 고정 크기 | `w-[200px]` | `max-w-full` | + +### 3.3 낮은 위험도 🟢 + +| 패턴 | 예시 | 해결 방법 | +|------|------|----------| +| 패딩 과다 | `p-8` | `p-4 md:p-8` | +| 폰트 크기 | `text-xl` | `text-lg md:text-xl` | + +--- + +## 4. 수정 가이드라인 + +### 4.1 테이블 반응형 처리 + +```tsx +// Before +
| 구분 | +1사분기 | +2사분기 | +3사분기 | +4사분기 | +합계 | +
|---|---|---|---|---|---|
| {row.label} | +{formatValue(row.q1)} | +{formatValue(row.q2)} | +{formatValue(row.q3)} | +{formatValue(row.q4)} | +{formatValue(row.total)} | +