97% Smaller, 2x Faster: How es-toolkit Reached 10 Million Weekly Downloads
문동욱 · 토스 · 토스 기술 블로그
소개
A drop-in lodash replacement built for how JavaScript actually works today — ES Modules, TypeScript, and significantly smaller bundles. Adopted by Microsoft, Storybook, and Yarn. 10M+ weekly npm downloads.
AI 핵심 요약
Toss 프론트엔드 팀은 lodash가 ES Modules, TypeScript, 최신 JavaScript 엔진의 발전을 충분히 반영하지 못해 번들 크기와 실행 성능을 개선할 여지가 있다고 판단했다. 이에 es-toolkit을 처음부터 ES Modules와 TypeScript 중심으로 만들고, 각 함수를 독립적으로 구성해 불필요한 내부 의존성이 번들에 포함되지 않도록 했다. lodash와 호환되는 es-toolkit/compat도 제공해 코드 수정 없이 전환할 수 있게 했으며, 글에서는 일부 함수 조합의 번들 크기가 약 30KB에서 약 1KB로 줄어드는 사례를 제시한다. 이 라이브러리는 출시 후 주간 npm 다운로드 1,000만 회를 넘었고, 호환성 계층과 점진적 마이그레이션이 도입 장벽을 낮추는 방법이라는 점을 보여준다.
- ES Modules 환경에서 함수별 의존성을 없애면 필요한 유틸리티만 번들에 포함하기 쉬워진다.
- 현대 JavaScript 엔진의 최적화에 맞춰 구현하면 오래된 라이브러리의 호환성 제약을 벗어나 실행 성능을 개선할 수 있다.
- TypeScript 정의를 소스 코드와 함께 관리하면 별도 타입 패키지와의 버전 불일치 위험을 줄일 수 있다.
- 기존 코드 변경이 부담스럽다면 패키지 별칭과 es-toolkit/compat로 먼저 전환한 뒤 네이티브 import로 점진적으로 옮길 수 있다.
비슷한 학습 자료
토스ㅣSLASH 21 - JavaScript Bundle Diet
SLASH · YouTube
es-toolkit: How a Small Internal Library Became a Global Project
박서진/이다용 · 토스 기술 블로그
es-toolkit, 사내 작은 라이브러리가 전세계적인 라이브러리가 되기까지
박서진/이다용 · 토스 기술 블로그
브라우저용 번들링 플러그인, 직접 만들었어요
신지호 · 토스 기술 블로그
CommonJS와 ESM에 모두 대응하는 라이브러리 개발하기: exports field
장호승 · 토스 기술 블로그
node_modules로부터 우리를 구원해 줄 Yarn Berry
박서진 · 토스 기술 블로그