Skip to content

Commit a9ff7c5

Browse files
committed
docs: 철로 위에 묶여 있는 IE 사용자를 구할 것인가 (웹 호환성과 크로스 브라우징)
1 parent 0801f0d commit a9ff7c5

2 files changed

Lines changed: 94 additions & 0 deletions

File tree

330 KB
Loading
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
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+
![트롤리 딜레마와 웹 호환성](./img/trolley-dilemma-compatibility/trolley.jpg)
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

Comments
 (0)