# 브라우저 지원 정책 ## 📋 목차 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 사용자에게 명확한 업그레이드 안내 **문의**: 고객센터 또는 개발팀