lodash 대체 라이브러리 es-toolkit, 2천만 다운로드 돌파!

by DD
4시간 전
조회수 10

기존 lodash 라이브러리의 구식 코드 구조 및 비효율성 문제 해결을 위해 es-toolkit 개발 시작

번들 크기 30배 감소, 성능 2배~10배 향상 등 압도적인 성능 개선 효과 확인

Toss 내부 공유 후 Reddit 등 해외 커뮤니티 확산, Yarn, Recharts 등 주요 라이브러리 채택으로 성장

lodash 호환성 레이어(es-toolkit/compat) 추가로 도입 장벽을 낮추고 채택 가속화

향후 최신 JavaScript 생태계 함수 추가 및 서버 환경 지원으로 확장 계획

es-toolkit 개발의 기술적 동기

기존 lodash 라이브러리는 구식 코드 구조(Outdated Code Structure)와 인터넷 익스플로러(Internet Explorer) 같은 레거시 브라우저 지원 로직으로 인해 현대 웹 개발 환경에 비효율적이었다.

ECMAScript Modules 미지원으로 인한 트리 쉐이킹(Tree Shaking)의 어려움 발생

Array#map과 같이 브라우저 네이티브 함수 활용 대신 모든 로직을 자체 구현하여 성능 저하 유발

lodash-es는 ES Modules 지원만 추가했을 뿐, 근본적인 코드 비효율성은 개선되지 않음

결과적으로 Toss 팀은 성능이 빠르고 불필요한 코드를 제거한 현대적인 유틸리티 라이브러리의 필요성을 절감했다.

es-toolkit의 압도적인 성능 개선 효과

es-toolkit은 lodash의 비효율적인 로직을 제거하고 현대적인 웹 API를 활용하여 놀라운 성능 향상을 이끌어냈다.

성능: 함수에 따라 다르지만, 단순 로직 제거만으로도 최소 2배에서 최대 10배 이상의 속도 개선 효과를 보였다.

번들 크기: 레거시 브라우저 지원 코드를 제거하고 Array#map 같은 내장 함수를 직접 사용함으로써, 일부 경우 번들 크기가 30배 이상 감소하는 극적인 결과를 얻었다.

이러한 결과는 현대 웹 개발에서 유틸리티 라이브러리의 최적화가 얼마나 중요한지를 보여준다.

오픈소스 생태계에서의 es-toolkit 채택 과정

초기 Toss 내부 공유 후 Reddit 등 해외 커뮤니티에서 큰 반향을 일으켰으며, 이는 개발자 커뮤니티의 니즈를 정확히 충족시켰음을 의미한다.

초기 확산: Toss Frontend 소셜 미디어 공유 및 Reddit 게시글을 통해 수만 명의 개발자에게 노출됨

커뮤니티 기여: 누락 함수 구현, 버그 수정, 성능 최적화 등 외부 기여가 활발히 이루어짐

주요 라이브러리 채택: Yarn Berry, Recharts, Storybook 등 유명 오픈소스 프로젝트에서 lodash 대신 es-toolkit을 도입하며 생태계 영향력 확대

es-toolkit/compat 출시: lodash 인터페이스 호환성을 제공하여 기존 프로젝트의 마이그레이션 장벽을 낮추고 채택 가속화

개발자 경험(DX) 향상과 오픈소스 기여

es-toolkit 프로젝트는 외부 기여자가 Toss 개발팀과 협력하며 성장하는 과정을 보여준다.

개인적인 성장: 외부 기여자(Dayong Lee)는 es-toolkit에 기여하며 인터페이스 디자인 원칙과 JavaScript 언어에 대한 깊은 이해를 얻었고, 이는 Toss 입사로 이어짐

협업 모델: 오픈소스 프로젝트로서 Pull Request 기반의 코드 리뷰 문화를 통해 라이브러리의 완성도를 높임

생태계 기여 의지: Toss 팀은 es-toolkit을 통해 한국 및 전 세계 프론트엔드 생태계에 기여하고자 하는 목표를 공유함

es-toolkit의 향후 발전 방향

es-toolkit은 지속적으로 프론트엔드 및 JavaScript 생태계 발전에 기여하는 것을 목표로 한다.

최신 JavaScript 기능 지원: Map, Set 등 내장 자료구조에 적합한 함수 및 Promise와 함께 사용되는 delay 함수 등 최신 생태계 요구사항 반영

서버 환경 지원 확장: Node.js, Deno, Bun 등 다양한 서버 환경에서 사용될 수 있는 고품질 유틸리티 함수 제공 계획

핵심 정신 유지: '80% 이상의 사용 사례에 최적화하여 작고 빠르게 유지'하는 es-toolkit의 핵심 가치(Core Value)를 견지하며 발전

es-toolkit: How a Small Internal Library Became a Global Project