Files
tk-factory-services/system1-factory/web/docs/PWA-GUIDE.md
Hyungi Ahn d36303101e feat: 모바일 UX 대폭 개선 + PWA 구현 + 로그인 루프 수정
- 모바일 하단 네비: 메뉴 제거, 4개 핵심 기능(홈/TBM/작업보고/출근) SVG 아이콘
- 모바일 사이드바 스킵: 768px 이하에서 사이드바 미로드, 레이아웃 오프셋 해결
- 모바일 헤더: 햄버거 메뉴 숨김, 본문 margin/overflow 정리
- TBM 모바일: 풀스크린 모달, 저장 버튼 하단 고정, 터치 UX 개선
- PWA: manifest.json, sw.js(network-first), 앱 아이콘, iOS 메타태그, 킬스위치
- 로그인 무한루프 수정: 토큰 만료 검증, 쿠키 정리, loginPage 경로 수정
- 신고 메뉴 tkreport 리다이렉트: navbar + sidebar cross-system-link 적용
- TBM API: 작업장별 안전점검 체크리스트 조회 엔드포인트 추가
- 안전점검 체크리스트 관리 UI 개선
- tkuser: 이슈유형 관리 기능 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 08:20:50 +09:00

83 lines
3.0 KiB
Markdown

# PWA (Progressive Web App) 가이드
## 개요
tkfb.technicalkorea.net에 PWA를 적용하여 모바일에서 홈 화면 앱처럼 사용 가능합니다.
- **전략**: network-first (항상 네트워크 우선, 실패 시 캐시)
- **목적**: 앱 느낌 제공 (주소창 없음, 스플래시 화면, 홈 아이콘)
- **오프라인**: 제한적 (이전 방문 페이지만 캐시에서 제공)
## 파일 구조
```
web/
├── manifest.json # PWA 매니페스트 (앱 이름, 아이콘, 테마)
├── sw.js # 서비스 워커 (network-first 캐시)
├── js/app-init.js # SW 등록 + manifest 동적 삽입 (setupPWA 함수)
└── img/
├── icon-192x192.png # PWA 아이콘 (192px)
└── icon-512x512.png # PWA 아이콘 (512px)
```
## 주의사항
### sw.js 수정 시 반드시 지킬 것
1. **CACHE_VERSION을 반드시 올릴 것** (예: `tkfb-v1``tkfb-v2`)
- 버전을 안 올리면 사용자가 이전 캐시를 계속 사용
2. **network-first 전략을 유지할 것**
- `cache-first`로 바꾸면 배포해도 사용자에게 반영 안 됨
3. **API 요청은 절대 캐시하지 말 것**
- `if (request.url.includes('/api/')) return;` 라인 유지
4. **가능하면 sw.js를 건드리지 말 것**
- 잘못된 sw.js가 배포되면 최대 24시간 동안 사용자 브라우저에 캐시됨
- 일반 HTML/CSS/JS 수정은 sw.js와 무관하게 정상 반영됨
### 비상 복구 (킬스위치)
sw.js에 문제가 생겼을 때 사용자 브라우저에서 서비스 워커를 해제하는 방법:
```
https://tkfb.technicalkorea.net/pages/dashboard.html?sw-kill
```
이 URL로 접속하면:
- 등록된 서비스 워커 모두 해제
- 캐시 스토리지 전체 삭제
- 페이지 자동 새로고침
### 일반 배포 시
- HTML/CSS/JS 파일 수정 → **sw.js 수정 불필요** (network-first라 항상 최신 파일 가져옴)
- Cloudflare 캐시 제거 → 정상 반영됨
- 버전 파라미터 변경 (`?v=5``?v=6`) → 브라우저 캐시도 우회
### Cloudflare 캐시와 관계
| 상황 | 동작 |
|------|------|
| CF 캐시 제거 + 일반 파일 수정 | 즉시 반영 (network-first) |
| CF 캐시 제거 + sw.js 수정 | 최대 24시간 후 반영 (브라우저 SW 갱신 주기) |
| 네트워크 끊김 | 이전 방문 페이지만 캐시에서 제공 |
| ?sw-kill 사용 | SW + 캐시 전체 삭제, 원래 웹사이트로 동작 |
## 홈 화면 추가 방법
### iPhone (iOS Safari)
1. Safari에서 tkfb.technicalkorea.net 접속
2. 하단 공유 버튼 (□↑) 탭
3. "홈 화면에 추가" 선택
4. "추가" 탭
### Android (Chrome)
1. Chrome에서 tkfb.technicalkorea.net 접속
2. 자동으로 "홈 화면에 추가" 배너 표시 (또는 메뉴 → "앱 설치")
3. "설치" 탭
## 알려진 제한사항
- **iOS**: tkreport, tkqc 외부 링크 클릭 시 Safari가 별도로 열림 (PWA 한계)
- **iOS**: 백그라운드 동기화 미지원
- **전체**: 완전한 오프라인 지원은 아님 (network-first 전략)