외부 라이브러리 사용이 많은 lodash. 바로 쓰기 편하고 평가가 높은 라이브러리이지만, 모든 프로젝트에서 무조건 사용하는 것이 좋은 선택일지는 고민이 따릅니다.
이 글에서는 lodash의 성능 문제 여부와, 대안으로 고려할 만한 가벼운 유틸리티 라이브러리들을 소개해 드립니다.
lodash, 성능에 무시해도 될 수준일까?
결론부터 말하면 lodash 자체는 잘 최적화되어 있어 심각한 성능 문제는 없습니다. 다만 사용 방식에 따라 퍼포먼스 저하가 발생할 수 있습니다.
주의해야 할 상황:
•
lodash 전체 import (import _ from 'lodash') → 번들 크기 증가
•
_.cloneDeep, _.merge 같은 깊은 복사 함수 반복 사용 → 대규모 데이터 처리에서 성능 저하
•
체이닝을 과하게 사용해 불필요한 연산 증가
•
React, Vue에서 렌더링 단계에 무분별하게 사용 → 렌더링 성능 문제
필요한 함수만 개별 import하고, 사용 위치와 빈도를 조절하면 대부분 문제는 발생하지 않습니다.
lodash 대안 라이브러리 TOP 4
Ramda
•
함수형 프로그래밍(FP) 지향
•
불변성 유지, 커링, 함수 조합에 최적화
•
lodash보다 함수형 처리에 더 적합
import { map } from 'ramda'
map(x => x * 2, [1, 2, 3]) // [2, 4, 6]
JavaScript
복사
Nano-lodash
•
lodash 주요 기능을 가볍게 재구현
•
번들 크기 2KB 내외로 매우 가볍고 빠름
import cloneDeep from 'nano-lodash/cloneDeep'
JavaScript
복사
Just
•
특정 함수별로 Zero dependency 제공
•
필요한 함수 하나만 import 가능
import debounce from 'just-debounce-it'
JavaScript
복사
lodash-es
•
lodash의 ES module 버전
•
tree-shaking이 가능해 개별 import로 번들 크기 최소화
import debounce from 'lodash-es/debounce'
JavaScript
복사
네이티브 JS API + 유틸 함수 직접 작성
최근 브라우저 내장 기능이 강력해져서:
•
map, filter, reduce, Object.assign, structuredClone
•
debounce, throttle 등은 10~20줄 내외로 간단히 직접 구현 가능
상황별 추천 정리
상황 | 추천 |
불변성 + 함수형 가치 중심 | Ramda |
lodash 대체로 가벼운 크기 선호 | nano-lodash, Just |
lodash 문법에 익숙 | lodash-es |
의존성 최소화 + 성능 최대화 | 네이티브 API + 직접 작성 |