|
| 1 | +--- |
| 2 | +title: 철로 위에 묶여 있는 IE 사용자를 구할 것인가 (웹 호환성과 크로스 브라우징) |
| 3 | +createdAt: 2024-10-29 |
| 4 | +category: Web |
| 5 | +description: 수많은 최신 브라우저 사용자와 소수의 IE 사용자가 철로 위에 묶여 있다면, 개발자는 누구를 구해야 할까요? 트롤리 딜레마로 풀어보는 웹 호환성과 크로스 브라우징 이야기 |
| 6 | +comment: true |
| 7 | +--- |
| 8 | + |
| 9 | +# 🚋 철로 위에 묶여 있는 IE 사용자를 구할 것인가 (웹 호환성과 크로스 브라우징) |
| 10 | + |
| 11 | +:::warning |
| 12 | +아직 작성중이거나 검토중인 글입니다. 내용이 부정확하거나 변경될 수 있습니다 |
| 13 | +::: |
| 14 | + |
| 15 | +## 1. 트롤리 딜레마로 빌드업 |
| 16 | + |
| 17 | +철학에서 자주 등장하는 **트롤리 딜레마**는 다수와 소수 중 누구를 살릴지 선택해야 하는 상황을 말함 ㅇㅇ |
| 18 | + |
| 19 | +웹 개발도 마찬가지 |
| 20 | + |
| 21 | + |
| 22 | + |
| 23 | +[Can I Use](https://caniuse.com/) 같은 사이트를 보면 대부분 브라우저는 최신 기능을 지원하지만, 소수의 **IE나 Safari 구버전**은 지원하지 않는 경우가 많음 |
| 24 | + |
| 25 | +과연 이들을 갖다 버릴까? 아니면 추가 비용을 들여 지원할까? |
| 26 | + |
| 27 | +--- |
| 28 | + |
| 29 | +## 2. TC39와 ECMAScript 프로포절 |
| 30 | + |
| 31 | +자바스크립트 표준은 **TC39 위원회**에서 결정함 |
| 32 | + |
| 33 | +제안(Proposal)은 다음 단계를 거쳐 표준으로 채택됨 |
| 34 | + |
| 35 | +- **Stage 0**: 아이디어 |
| 36 | +- **Stage 1**: 제안 |
| 37 | +- **Stage 2**: 초안 (Draft) |
| 38 | +- **Stage 3**: 후보 (Candidate, 브라우저 엔진 구현 시작) |
| 39 | +- **Stage 4**: 확정 (Finished, 다음 ECMAScript 버전에 포함) |
| 40 | + |
| 41 | +예를 들어 **Optional Chaining(?.)** 은 오랫동안 Stage 3에 머물렀다가 **ES2020**에 정식으로 포함됨 |
| 42 | + |
| 43 | +--- |
| 44 | + |
| 45 | +## 3. 크로스 브라우징 이슈의 세 가지 원인 |
| 46 | + |
| 47 | +크로스 브라우징 이슈는 크게 **세 가지 카테고리**로 정리할 수 있음 |
| 48 | + |
| 49 | +### 3-1. 표준화 차이 |
| 50 | + |
| 51 | +- ECMAScript, DOM, CSS 같은 **웹 표준**이 브라우저마다 언제 구현되는지 다름 |
| 52 | +- 예: |
| 53 | + - `Optional Chaining` → Chrome은 지원, Safari 구버전은 SyntaxError 발생 |
| 54 | + - CSS `grid` → Chrome/Firefox는 빠르게 지원, IE는 미지원 |
| 55 | + |
| 56 | +### 3-2. 포맷/코덱 차이 |
| 57 | + |
| 58 | +- 이미지·비디오·폰트 같은 **포맷 지원 여부는 각 벤더 정책**에 달려 있음 |
| 59 | +- 예: |
| 60 | + - **WebP**: Chrome은 초기에 지원, Safari는 2020년 이후 지원 |
| 61 | + - **AV1**: 일부 브라우저/플랫폼만 지원, H.264는 어디서나 동작 |
| 62 | + - **WOFF2 폰트**: 구형 브라우저는 미지원 |
| 63 | + |
| 64 | +### 3-3. 엔진 구현 차이 (버그/최적화) |
| 65 | + |
| 66 | +- 같은 표준을 지켜도 **엔진 구현 방식이나 버그 차이**로 결과가 달라질 수 있음 |
| 67 | +- 예: |
| 68 | + - Safari에서 `position: sticky` 버그 |
| 69 | + - 초기 flexbox 구현 차이로 브라우저별 레이아웃 깨짐 |
| 70 | + - 애니메이션에서 GPU 최적화 차이로 성능 격차 발생 |
| 71 | + |
| 72 | +--- |
| 73 | + |
| 74 | +## 4. 크로스 브라우징 이슈 해결 방법 |
| 75 | + |
| 76 | +| 방법 | 설명 | 도구 | |
| 77 | +| --------------------- | ---------------------------------------------- | ----------------------- | |
| 78 | +| **Polyfill** | 없는 API를 JS 코드로 흉내냄 | core-js, polyfill.io | |
| 79 | +| **Transpile** | 최신 문법 → 구문 변환 | Babel, SWC, TypeScript | |
| 80 | +| **Autoprefixer** | CSS 접두사 자동화 | PostCSS | |
| 81 | +| **Feature Detection** | 기능 지원 여부 감지 후 분기 처리 | Modernizr | |
| 82 | +| **전략** | Progressive Enhancement / Graceful Degradation | 기획/설계 레벨 | |
| 83 | +| **테스트** | 실제 다브라우저 환경에서 테스트 | BrowserStack, SauceLabs | |
| 84 | + |
| 85 | +--- |
| 86 | + |
| 87 | +## 5. 정리 |
| 88 | + |
| 89 | +트롤리 딜레마처럼, 우리는 **다수(최신 브라우저 사용자)** 와 **소수(구형 브라우저 사용자)** 사이에서 선택해야 함 |
| 90 | + |
| 91 | +표준(TC39)은 하나지만, 브라우저별 반영 시점 차이와 **포맷 지원 여부**, 그리고 **엔진 구현 차이** 때문에 호환성 문제가 생김 |
| 92 | + |
| 93 | +정답은 “소수 버리기”도 “무조건 다 살리기”도 아님 |
| 94 | +**목표 사용자층에 맞춰 전략적으로 호환성을 확보하는 것**이 크로스 브라우징의 핵심 |
0 commit comments