똑똑하게 브라우저 Polyfill 관리하기
박서진 · 토스 · 토스 기술 블로그
소개
현대적인 JavaScript를 쓰면서도 넓은 범위의 기기를 지원하기 위한 Polyfill을 어떻게 똑똑하게 설정할 수 있는지 소개합니다.
AI 핵심 요약
오래된 브라우저에서 최신 JavaScript API를 사용하려면 Polyfill이 필요하지만, 모든 Polyfill을 일괄 제공하면 최신 브라우저에도 불필요한 스크립트가 전달됩니다. 먼저 @babel/preset-env의 브라우저 targets를 설정해 지원 범위 밖의 Polyfill을 빌드에서 제외할 수 있지만, 최신 브라우저에 필요한 것만 전달하는 문제까지 해결하지는 못합니다. 토스는 browserslist-useragent와 core-js-compat으로 User-Agent별 Polyfill 목록을 계산하고, esbuild로 필요한 모듈만 묶는 자체 제공 시스템을 만들었습니다. 이 방식으로 오래된 브라우저 지원과 최신 브라우저의 불필요한 다운로드 감소를 함께 추구할 수 있으며, User-Agent 해석 실패 시 대체 대상과 비표준 기능 제외 같은 예외 처리도 중요합니다.
- Polyfill을 무조건 전부 포함하면 최신 브라우저에도 불필요한 JavaScript를 내려보내 성능에 부담을 줄 수 있다.
- @babel/preset-env의 targets를 실제 지원 브라우저에 맞춰 설정하면 빌드 시 불필요한 Polyfill을 줄일 수 있다.
- 브라우저별로 필요한 기능을 다르게 제공하려면 User-Agent를 해석해 Polyfill 목록을 동적으로 구성할 수 있다.
- core-js-compat으로 목록을 계산하고 esbuild로 번들링하면 자체 Polyfill 제공 서버를 구현할 수 있다.
- User-Agent를 해석할 수 없는 경우의 대체 대상과 실험적인 esnext 기능 제외 등 예외 처리도 고려해야 한다.
비슷한 학습 자료
토스의 접근성 문서 A11y Fundamentals 을 소개합니다 (오픈 기념 이벤트 ~9/10)
강민우 · 토스 기술 블로그
유연하고 확장 가능한 배너 기능 구현하기
김선우 · 토스 기술 블로그
프로젝트 전체에서 사용되는 패키지, 어떻게 마이그레이션 할까?
김덕원 · 토스 기술 블로그
브라우저용 번들링 플러그인, 직접 만들었어요
신지호 · 토스 기술 블로그
조금만 신경써서 초기 렌더링 빠르게 하기 (feat. JAM Stack)
한재엽 · 토스 기술 블로그
웹 서비스 캐시 똑똑하게 다루기
박서진 · 토스 기술 블로그