Skip to content

철로 위에 묶여 있는 IE 사용자를 구할 것인가 (웹 호환성과 크로스 브라우징)

🚋 철로 위에 묶여 있는 IE 사용자를 구할 것인가 (웹 호환성과 크로스 브라우징)

WARNING

아직 작성중이거나 검토중인 글입니다. 내용이 부정확하거나 변경될 수 있습니다

1. 트롤리 딜레마로 빌드업

철학에서 자주 등장하는 트롤리 딜레마는 다수와 소수 중 누구를 살릴지 선택해야 하는 상황을 말함 ㅇㅇ

웹 개발도 마찬가지

트롤리 딜레마와 웹 호환성

Can I Use 같은 사이트를 보면 대부분 브라우저는 최신 기능을 지원하지만, 소수의 IE나 Safari 구버전은 지원하지 않는 경우가 많음

과연 이들을 갖다 버릴까? 아니면 추가 비용을 들여 지원할까?


2. TC39와 ECMAScript 프로포절

자바스크립트 표준은 TC39 위원회에서 결정함

제안(Proposal)은 다음 단계를 거쳐 표준으로 채택됨

  • Stage 0: 아이디어
  • Stage 1: 제안
  • Stage 2: 초안 (Draft)
  • Stage 3: 후보 (Candidate, 브라우저 엔진 구현 시작)
  • Stage 4: 확정 (Finished, 다음 ECMAScript 버전에 포함)

예를 들어 Optional Chaining(?.) 은 오랫동안 Stage 3에 머물렀다가 ES2020에 정식으로 포함됨


3. 크로스 브라우징 이슈의 세 가지 원인

크로스 브라우징 이슈는 크게 세 가지 카테고리로 정리할 수 있음

3-1. 표준화 차이

  • ECMAScript, DOM, CSS 같은 웹 표준이 브라우저마다 언제 구현되는지 다름
  • 예:
    • Optional Chaining → Chrome은 지원, Safari 구버전은 SyntaxError 발생
    • CSS grid → Chrome/Firefox는 빠르게 지원, IE는 미지원

3-2. 포맷/코덱 차이

  • 이미지·비디오·폰트 같은 포맷 지원 여부는 각 벤더 정책에 달려 있음
  • 예:
    • WebP: Chrome은 초기에 지원, Safari는 2020년 이후 지원
    • AV1: 일부 브라우저/플랫폼만 지원, H.264는 어디서나 동작
    • WOFF2 폰트: 구형 브라우저는 미지원

3-3. 엔진 구현 차이 (버그/최적화)

  • 같은 표준을 지켜도 엔진 구현 방식이나 버그 차이로 결과가 달라질 수 있음
  • 예:
    • Safari에서 position: sticky 버그
    • 초기 flexbox 구현 차이로 브라우저별 레이아웃 깨짐
    • 애니메이션에서 GPU 최적화 차이로 성능 격차 발생

4. 크로스 브라우징 이슈 해결 방법

방법설명도구
Polyfill없는 API를 JS 코드로 흉내냄core-js, polyfill.io
Transpile최신 문법 → 구문 변환Babel, SWC, TypeScript
AutoprefixerCSS 접두사 자동화PostCSS
Feature Detection기능 지원 여부 감지 후 분기 처리Modernizr
전략Progressive Enhancement / Graceful Degradation기획/설계 레벨
테스트실제 다브라우저 환경에서 테스트BrowserStack, SauceLabs

5. 정리

트롤리 딜레마처럼, 우리는 다수(최신 브라우저 사용자)소수(구형 브라우저 사용자) 사이에서 선택해야 함

표준(TC39)은 하나지만, 브라우저별 반영 시점 차이와 포맷 지원 여부, 그리고 엔진 구현 차이 때문에 호환성 문제가 생김

정답은 “소수 버리기”도 “무조건 다 살리기”도 아님 목표 사용자층에 맞춰 전략적으로 호환성을 확보하는 것이 크로스 브라우징의 핵심