498 lines
13 KiB
Markdown
498 lines
13 KiB
Markdown
|
|
# 브라우저 지원 정책
|
||
|
|
|
||
|
|
## 📋 목차
|
||
|
|
1. [지원 브라우저](#지원-브라우저)
|
||
|
|
2. [지원하지 않는 브라우저](#지원하지-않는-브라우저)
|
||
|
|
3. [기술적 배경](#기술적-배경)
|
||
|
|
4. [구현 내용](#구현-내용)
|
||
|
|
5. [테스트 가이드](#테스트-가이드)
|
||
|
|
6. [사용자 안내 프로세스](#사용자-안내-프로세스)
|
||
|
|
7. [향후 정책](#향후-정책)
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 지원 브라우저
|
||
|
|
|
||
|
|
### ✅ 공식 지원 브라우저
|
||
|
|
|
||
|
|
| 브라우저 | 최소 버전 | 권장 버전 | 플랫폼 | 우선순위 |
|
||
|
|
|---------|----------|----------|--------|---------|
|
||
|
|
| **Google Chrome** | 90+ | 최신 버전 | Windows, macOS, Linux | 🔴 High |
|
||
|
|
| **Microsoft Edge** | 90+ | 최신 버전 | Windows, macOS | 🔴 High |
|
||
|
|
| **Safari** | 14+ | 최신 버전 | macOS, iOS | 🔴 High |
|
||
|
|
|
||
|
|
### 브라우저별 권장 사유
|
||
|
|
|
||
|
|
#### Chrome (권장)
|
||
|
|
- ✅ 가장 안정적인 성능
|
||
|
|
- ✅ 개발 도구 우수
|
||
|
|
- ✅ 자동 업데이트
|
||
|
|
- ✅ 크로스 플랫폼 지원
|
||
|
|
|
||
|
|
#### Edge (Windows 권장)
|
||
|
|
- ✅ Windows 기본 브라우저
|
||
|
|
- ✅ Chrome 엔진 기반 (Chromium)
|
||
|
|
- ✅ Microsoft 공식 지원
|
||
|
|
- ✅ 엔터프라이즈 환경 최적화
|
||
|
|
|
||
|
|
#### Safari (macOS/iOS 권장)
|
||
|
|
- ✅ Apple 기기 최적화
|
||
|
|
- ✅ 배터리 효율 우수
|
||
|
|
- ✅ 개인정보 보호 강화
|
||
|
|
- ✅ iOS 필수 브라우저
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 지원하지 않는 브라우저
|
||
|
|
|
||
|
|
### ❌ Internet Explorer (모든 버전)
|
||
|
|
|
||
|
|
**지원 중단 사유:**
|
||
|
|
|
||
|
|
1. **Microsoft 공식 지원 종료**
|
||
|
|
- 2022년 6월 15일부로 IE 지원 완전 종료
|
||
|
|
- 보안 업데이트 중단
|
||
|
|
- Edge로 마이그레이션 권장
|
||
|
|
|
||
|
|
2. **기술적 한계**
|
||
|
|
- 현대 웹 표준 미지원
|
||
|
|
- JavaScript ES6+ 미지원
|
||
|
|
- CSS3 고급 기능 미지원
|
||
|
|
- 성능 문제
|
||
|
|
|
||
|
|
3. **보안 취약점**
|
||
|
|
- 패치되지 않는 보안 결함
|
||
|
|
- XSS, CSRF 등 공격에 취약
|
||
|
|
- 개인정보 유출 위험
|
||
|
|
|
||
|
|
4. **프로젝트 기술 스택 비호환**
|
||
|
|
- Next.js 15: IE 지원 중단 (v12부터)
|
||
|
|
- React 19: IE 지원 중단 (v18부터)
|
||
|
|
- Tailwind CSS 4: IE 미지원
|
||
|
|
- Modern JavaScript (ES6+): 네이티브 미지원
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 기술적 배경
|
||
|
|
|
||
|
|
### 현재 기술 스택과 IE 비호환성
|
||
|
|
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"next": "15.5.6", // IE 지원 중단: v12 (2021)
|
||
|
|
"react": "19.2.0", // IE 지원 중단: v18 (2022)
|
||
|
|
"tailwindcss": "4", // IE 미지원
|
||
|
|
"typescript": "5" // ES6+ 트랜스파일 필요
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
### IE 지원을 위한 대안과 비용
|
||
|
|
|
||
|
|
| 방안 | 가능 여부 | 비용 | 문제점 |
|
||
|
|
|------|----------|------|--------|
|
||
|
|
| **다운그레이드** | ⚠️ 가능 | 2-3주 개발 | 보안 취약점, 최신 기능 사용 불가 |
|
||
|
|
| **폴리필 추가** | ❌ 불가능 | - | Next.js 15/React 19는 폴리필로 해결 불가 |
|
||
|
|
| **별도 레거시 버전** | ⚠️ 가능 | 1-2개월 개발 | 유지보수 부담 증가 |
|
||
|
|
| **Edge 마이그레이션** | ✅ 권장 | 0원 | 사용자 교육 필요 |
|
||
|
|
|
||
|
|
**결론**: IE 지원 비용 대비 효과가 낮아 **지원하지 않기로 결정**
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 구현 내용
|
||
|
|
|
||
|
|
### 1. IE 감지 및 차단 로직
|
||
|
|
|
||
|
|
**파일**: `src/middleware.ts`
|
||
|
|
|
||
|
|
```typescript
|
||
|
|
/**
|
||
|
|
* Check if user-agent is Internet Explorer
|
||
|
|
* IE 11: Contains "Trident" in user-agent
|
||
|
|
* IE 10 and below: Contains "MSIE" in user-agent
|
||
|
|
*/
|
||
|
|
function isInternetExplorer(userAgent: string): boolean {
|
||
|
|
if (!userAgent) return false;
|
||
|
|
|
||
|
|
return /MSIE|Trident/.test(userAgent);
|
||
|
|
}
|
||
|
|
|
||
|
|
export function middleware(request: NextRequest) {
|
||
|
|
const { pathname } = request.nextUrl;
|
||
|
|
const userAgent = request.headers.get('user-agent') || '';
|
||
|
|
|
||
|
|
// 🚨 Internet Explorer Detection (최우선 처리)
|
||
|
|
if (isInternetExplorer(userAgent)) {
|
||
|
|
// unsupported-browser.html 페이지는 제외 (무한 리다이렉트 방지)
|
||
|
|
if (!pathname.includes('unsupported-browser')) {
|
||
|
|
console.log(`[IE Blocked] ${userAgent} attempted to access ${pathname}`);
|
||
|
|
return NextResponse.redirect(new URL('/unsupported-browser.html', request.url));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// ... 나머지 로직
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
**동작 방식**:
|
||
|
|
1. 모든 요청에서 User-Agent 확인
|
||
|
|
2. IE 패턴 감지 시 `/unsupported-browser.html`로 리다이렉트
|
||
|
|
3. 안내 페이지는 무한 리다이렉트 방지 처리
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### 2. 브라우저 업그레이드 안내 페이지
|
||
|
|
|
||
|
|
**파일**: `public/unsupported-browser.html`
|
||
|
|
|
||
|
|
**주요 기능**:
|
||
|
|
- ✅ IE 사용 불가 안내
|
||
|
|
- ✅ 권장 브라우저 다운로드 링크 제공
|
||
|
|
- ✅ IE 지원 중단 사유 설명
|
||
|
|
- ✅ 반응형 디자인 (모바일 대응)
|
||
|
|
- ✅ 접근성 고려 (고대비, 큰 폰트)
|
||
|
|
|
||
|
|
**안내 브라우저**:
|
||
|
|
1. **Microsoft Edge** (권장) - Windows 사용자용
|
||
|
|
2. **Google Chrome** - 범용
|
||
|
|
3. **Safari** - macOS/iOS 사용자용
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### 3. User-Agent 감지 패턴
|
||
|
|
|
||
|
|
| IE 버전 | User-Agent 패턴 | 감지 정규식 |
|
||
|
|
|---------|----------------|------------|
|
||
|
|
| IE 11 | `Trident/7.0` | `/Trident/` |
|
||
|
|
| IE 10 | `MSIE 10.0` | `/MSIE/` |
|
||
|
|
| IE 9 이하 | `MSIE 9.0`, `MSIE 8.0` | `/MSIE/` |
|
||
|
|
|
||
|
|
**감지 코드**:
|
||
|
|
```javascript
|
||
|
|
/MSIE|Trident/.test(userAgent)
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 테스트 가이드
|
||
|
|
|
||
|
|
### 1. Chrome DevTools를 사용한 IE 시뮬레이션
|
||
|
|
|
||
|
|
```javascript
|
||
|
|
// Chrome DevTools Console에서 실행
|
||
|
|
// 1. F12 → Console 탭
|
||
|
|
// 2. 다음 코드 붙여넣기
|
||
|
|
|
||
|
|
// IE 11 시뮬레이션
|
||
|
|
Object.defineProperty(navigator, 'userAgent', {
|
||
|
|
get: function() {
|
||
|
|
return 'Mozilla/5.0 (Windows NT 10.0; Trident/7.0; rv:11.0) like Gecko';
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
// 페이지 새로고침
|
||
|
|
location.reload();
|
||
|
|
```
|
||
|
|
|
||
|
|
**예상 결과**: `/unsupported-browser.html`로 리다이렉트
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### 2. 실제 IE에서 테스트 (Windows 전용)
|
||
|
|
|
||
|
|
#### Windows 10 IE 11 테스트
|
||
|
|
```bash
|
||
|
|
# 1. Windows 검색 → "Internet Explorer"
|
||
|
|
# 2. http://localhost:3000 접속
|
||
|
|
# 3. 안내 페이지 표시 확인
|
||
|
|
```
|
||
|
|
|
||
|
|
#### 가상 머신 테스트
|
||
|
|
- [Microsoft Edge Developer](https://developer.microsoft.com/microsoft-edge/tools/vms/) 가상 머신 사용
|
||
|
|
- Windows 7/8/10 + IE 버전별 테스트 가능
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### 3. 지원 브라우저 테스트
|
||
|
|
|
||
|
|
| 브라우저 | 테스트 항목 | 예상 결과 |
|
||
|
|
|---------|-----------|----------|
|
||
|
|
| **Chrome** | 로그인 → 대시보드 이동 | ✅ 정상 작동 |
|
||
|
|
| **Edge** | 로그인 → 대시보드 이동 | ✅ 정상 작동 |
|
||
|
|
| **Safari** | 로그인 → 대시보드 이동 | ✅ 정상 작동 |
|
||
|
|
| **IE 11** | 모든 페이지 접근 | ⚠️ 안내 페이지로 리다이렉트 |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 사용자 안내 프로세스
|
||
|
|
|
||
|
|
### 1. 사전 공지 (배포 1개월 전)
|
||
|
|
|
||
|
|
**공지 채널**:
|
||
|
|
- 📧 이메일: 전체 사용자 대상
|
||
|
|
- 📢 시스템 공지: 로그인 시 팝업
|
||
|
|
- 📄 홈페이지: 공지사항 게시
|
||
|
|
|
||
|
|
**공지 내용 예시**:
|
||
|
|
```
|
||
|
|
[중요] 브라우저 업그레이드 안내
|
||
|
|
|
||
|
|
안녕하세요. SAM ERP 시스템 운영팀입니다.
|
||
|
|
|
||
|
|
보안 및 성능 향상을 위해 2024년 XX월 XX일부터
|
||
|
|
Internet Explorer 지원을 중단합니다.
|
||
|
|
|
||
|
|
▶ 권장 브라우저
|
||
|
|
- Microsoft Edge (Windows 권장)
|
||
|
|
- Google Chrome
|
||
|
|
- Safari (macOS/iOS)
|
||
|
|
|
||
|
|
▶ 다운로드 링크
|
||
|
|
- Edge: https://www.microsoft.com/edge
|
||
|
|
- Chrome: https://www.google.com/chrome
|
||
|
|
|
||
|
|
문의사항은 고객센터(02-XXXX-XXXX)로 연락주세요.
|
||
|
|
|
||
|
|
감사합니다.
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### 2. 배포 시점
|
||
|
|
|
||
|
|
**IE 사용자 안내**:
|
||
|
|
1. IE로 접속 시 자동으로 안내 페이지 표시
|
||
|
|
2. 권장 브라우저 다운로드 링크 제공
|
||
|
|
3. 지원 중단 사유 명확히 안내
|
||
|
|
|
||
|
|
**고객 지원**:
|
||
|
|
- 📞 전화 지원: 브라우저 설치 안내
|
||
|
|
- 💬 채팅 상담: 실시간 도움
|
||
|
|
- 📋 가이드: 브라우저별 설치 매뉴얼
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### 3. 배포 후 모니터링
|
||
|
|
|
||
|
|
**수집 지표**:
|
||
|
|
```yaml
|
||
|
|
metrics:
|
||
|
|
- ie_access_attempts: IE 접근 시도 횟수
|
||
|
|
- browser_distribution: 브라우저별 사용 비율
|
||
|
|
- support_tickets: 브라우저 관련 문의 건수
|
||
|
|
- migration_rate: Edge/Chrome 전환율
|
||
|
|
```
|
||
|
|
|
||
|
|
**모니터링 코드 (선택사항)**:
|
||
|
|
```typescript
|
||
|
|
// middleware.ts에 추가
|
||
|
|
if (isInternetExplorer(userAgent)) {
|
||
|
|
// 통계 수집
|
||
|
|
await fetch('/api/analytics/browser', {
|
||
|
|
method: 'POST',
|
||
|
|
body: JSON.stringify({
|
||
|
|
event: 'ie_blocked',
|
||
|
|
timestamp: new Date(),
|
||
|
|
path: pathname,
|
||
|
|
userAgent: userAgent
|
||
|
|
})
|
||
|
|
});
|
||
|
|
|
||
|
|
return NextResponse.redirect(new URL('/unsupported-browser.html', request.url));
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 향후 정책
|
||
|
|
|
||
|
|
### 1. 브라우저 버전 관리
|
||
|
|
|
||
|
|
**업데이트 정책**:
|
||
|
|
- ✅ 최신 브라우저 버전 권장
|
||
|
|
- ✅ 최소 지원 버전: 현재 버전 -2 (약 6개월)
|
||
|
|
- ⚠️ 구버전 사용 시 업데이트 권장 안내
|
||
|
|
|
||
|
|
**예시**:
|
||
|
|
```
|
||
|
|
현재 Chrome 120 사용 중
|
||
|
|
→ Chrome 118 이상 지원
|
||
|
|
→ Chrome 117 이하는 업데이트 권장
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### 2. 신규 브라우저 지원 검토
|
||
|
|
|
||
|
|
**평가 기준**:
|
||
|
|
1. **시장 점유율**: 5% 이상
|
||
|
|
2. **웹 표준 준수**: ECMAScript 2020+, CSS3
|
||
|
|
3. **보안 업데이트**: 정기적인 패치 제공
|
||
|
|
4. **개발자 도구**: 디버깅 환경 제공
|
||
|
|
|
||
|
|
**현재 지원 검토 대상**:
|
||
|
|
- ✅ **Firefox**: 지원 검토 중 (시장 점유율 고려)
|
||
|
|
- ⚠️ **Opera, Vivaldi**: 시장 점유율 낮음 (Chrome 기반이므로 호환 가능)
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### 3. 모바일 브라우저 정책
|
||
|
|
|
||
|
|
**모바일 지원**:
|
||
|
|
|
||
|
|
| 플랫폼 | 브라우저 | 지원 여부 |
|
||
|
|
|--------|---------|----------|
|
||
|
|
| **iOS** | Safari | ✅ 지원 |
|
||
|
|
| **iOS** | Chrome | ✅ 지원 (Safari 엔진 사용) |
|
||
|
|
| **Android** | Chrome | ✅ 지원 |
|
||
|
|
| **Android** | Samsung Internet | ⚠️ 호환 가능 (Chrome 기반) |
|
||
|
|
|
||
|
|
**참고**: iOS는 WebKit 엔진 강제 정책으로 모든 브라우저가 Safari 엔진 사용
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 크로스 브라우저 개발 원칙
|
||
|
|
|
||
|
|
### 개발 시 준수 사항
|
||
|
|
|
||
|
|
#### 1. 브라우저 테스트 필수
|
||
|
|
```yaml
|
||
|
|
feature_development:
|
||
|
|
- step_1: Chrome에서 개발 및 테스트
|
||
|
|
- step_2: Safari에서 호환성 테스트
|
||
|
|
- step_3: Edge에서 최종 확인
|
||
|
|
- step_4: 모바일 Safari (iOS) 테스트
|
||
|
|
```
|
||
|
|
|
||
|
|
#### 2. Safari 우선 개발
|
||
|
|
```typescript
|
||
|
|
// Safari를 기준으로 개발하면 다른 브라우저에서도 작동
|
||
|
|
// Safari가 가장 엄격한 정책을 가지고 있기 때문
|
||
|
|
|
||
|
|
// ✅ Safari 호환 코드 (모든 브라우저 작동)
|
||
|
|
const cookie = [
|
||
|
|
'token=xxx',
|
||
|
|
'HttpOnly',
|
||
|
|
...(isProduction ? ['Secure'] : []), // 환경별 조건부
|
||
|
|
'SameSite=Lax', // Safari 호환
|
||
|
|
].join('; ');
|
||
|
|
|
||
|
|
// ❌ Chrome만 작동 (Safari 실패)
|
||
|
|
const cookie = 'token=xxx; Secure; SameSite=Strict'; // HTTP에서 Safari 거부
|
||
|
|
```
|
||
|
|
|
||
|
|
#### 3. 기능 감지 (Feature Detection)
|
||
|
|
```typescript
|
||
|
|
// ✅ 올바른 방법: 기능 감지
|
||
|
|
if ('IntersectionObserver' in window) {
|
||
|
|
// IntersectionObserver 사용
|
||
|
|
}
|
||
|
|
|
||
|
|
// ❌ 잘못된 방법: 브라우저 감지
|
||
|
|
if (userAgent.includes('Chrome')) {
|
||
|
|
// Chrome 전용 기능 사용
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
#### 4. 폴백 제공
|
||
|
|
```typescript
|
||
|
|
// localStorage 지원 여부 확인 (Safari Private Mode 대응)
|
||
|
|
try {
|
||
|
|
localStorage.setItem('test', 'test');
|
||
|
|
localStorage.removeItem('test');
|
||
|
|
} catch (error) {
|
||
|
|
// Safari Private Mode: localStorage 제한
|
||
|
|
// 대안: sessionStorage 또는 메모리 저장소 사용
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 문제 해결 가이드
|
||
|
|
|
||
|
|
### Q1. IE 사용자가 계속 접속을 시도하는 경우
|
||
|
|
|
||
|
|
**해결 방법**:
|
||
|
|
1. 고객센터 연락 유도
|
||
|
|
2. Edge 설치 원격 지원
|
||
|
|
3. 브라우저 설치 가이드 제공
|
||
|
|
|
||
|
|
**Edge 설치 가이드**:
|
||
|
|
```
|
||
|
|
1. https://www.microsoft.com/edge 접속
|
||
|
|
2. "다운로드" 버튼 클릭
|
||
|
|
3. 설치 파일 실행
|
||
|
|
4. 설치 완료 후 SAM ERP 재접속
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### Q2. 안내 페이지가 표시되지 않는 경우
|
||
|
|
|
||
|
|
**체크 포인트**:
|
||
|
|
```bash
|
||
|
|
# 1. middleware.ts 적용 확인
|
||
|
|
npm run build
|
||
|
|
|
||
|
|
# 2. 로그 확인
|
||
|
|
# 개발 환경: 터미널에서 "[IE Blocked]" 메시지 확인
|
||
|
|
# 프로덕션: 로그 모니터링 시스템 확인
|
||
|
|
|
||
|
|
# 3. User-Agent 확인
|
||
|
|
# Chrome DevTools → Network → 요청 헤더에서 User-Agent 확인
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### Q3. 특정 브라우저에서 기능이 작동하지 않는 경우
|
||
|
|
|
||
|
|
**디버깅 절차**:
|
||
|
|
```typescript
|
||
|
|
// 1. 브라우저 콘솔에서 에러 확인
|
||
|
|
// Chrome: F12 → Console
|
||
|
|
// Safari: 개발자 메뉴 활성화 → 웹 검사기 → 콘솔
|
||
|
|
|
||
|
|
// 2. 브라우저 호환성 확인
|
||
|
|
// https://caniuse.com 에서 기능 검색
|
||
|
|
|
||
|
|
// 3. 폴백 코드 추가
|
||
|
|
if (typeof feature === 'undefined') {
|
||
|
|
// 대체 구현
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 관련 문서
|
||
|
|
|
||
|
|
- [Safari 쿠키 호환성 가이드](./safari-cookie-compatibility.md)
|
||
|
|
- [사이드바 스크롤 개선](./sidebar-scroll-improvements.md)
|
||
|
|
- [Next.js 브라우저 지원](https://nextjs.org/docs/architecture/supported-browsers)
|
||
|
|
- [React 브라우저 지원](https://react.dev/learn/start-a-new-react-project#browser-support)
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 업데이트 히스토리
|
||
|
|
|
||
|
|
| 날짜 | 내용 | 작성자 |
|
||
|
|
|------|------|--------|
|
||
|
|
| 2024-XX-XX | 브라우저 지원 정책 문서 작성 및 IE 차단 구현 | Claude |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 요약
|
||
|
|
|
||
|
|
### ✅ 지원 브라우저
|
||
|
|
- **Chrome** (90+)
|
||
|
|
- **Edge** (90+)
|
||
|
|
- **Safari** (14+)
|
||
|
|
|
||
|
|
### ❌ 지원하지 않는 브라우저
|
||
|
|
- **Internet Explorer** (모든 버전)
|
||
|
|
|
||
|
|
### 🎯 핵심 원칙
|
||
|
|
1. **Safari 우선 개발**: 가장 엄격한 정책 기준
|
||
|
|
2. **크로스 브라우저 테스트 필수**: Chrome, Safari, Edge
|
||
|
|
3. **사용자 친화적 안내**: IE 사용자에게 명확한 업그레이드 안내
|
||
|
|
|
||
|
|
**문의**: 고객센터 또는 개발팀
|