JS 번들 크기, 왜 이렇게 커졌을까?

by DD
2개월 전
조회수 0

자바스크립트(JavaScript) 생태계의 NPM 패키지 번들 크기 증가 문제를 지적하며, 불필요한 의존성(Dependency)이 초래하는 비효율성을 강조함

'isString', 'isObject' 등 사소한 기능의 패키지화가 의존성 트리를 복잡하게 만들고 빌드 시간 증가를 야기한다고 비판함

레거시 환경 지원을 위한 폴리필(Polyfill) 사용과 보안 취약점 증가 가능성을 언급하며, 의존성 관리의 중요성을 역설함

유지보수 및 보안 문제를 야기하는 과도한 패키지 의존성을 줄이고, 내장 기능 활용을 권장하는 개발 문화의 필요성을 제안함

NPM 생태계의 '의존성 과다' 문제

발표자는 자바스크립트 생태계에서 NPM 패키지의 과도한 의존성으로 인해 발생하는 번들 크기 증가 문제를 심각하게 지적합니다. 특히 'isString', 'isObject'와 같이 사소한 기능을 수행하는 패키지들이 수백만 번 다운로드되는 현상을 비판하며, 이는 개발 생산성 저하빌드 시간 증가로 이어진다고 설명합니다. 이러한 패키지들은 종종 레거시 환경 지원이나 특정 기능 구현을 위해 만들어지지만, 현대적인 자바스크립트 환경에서는 불필요한 경우가 많다고 강조합니다.

패키지화의 역설: '작은' 패키지의 '큰' 영향

영상에서는 개별 패키지가 작더라도, 이들이 모여 형성하는 의존성 트리(Dependency Tree)는 기하급수적으로 커질 수 있음을 보여줍니다. 예를 들어, 'isString' 패키지가 'has'와 'isSymbol' 같은 다른 패키지에 의존하고, 이들이 다시 'get'이나 'call' 같은 패키지에 의존하는 식으로 수십 개의 하위 의존성이 발생할 수 있습니다. 이는 패키지 관리의 복잡성을 증가시키고, 보안 취약점이 잠재적으로 확산될 위험을 높인다고 지적합니다.

레거시 지원과 폴리필(Polyfill)의 양면성

발표자는 오래된 자바스크립트 엔진이나 브라우저를 지원하기 위해 사용되는 폴리필(Polyfill)의 필요성을 인정하면서도, 이것이 현대적인 개발 환경에서는 오히려 번들 크기를 불필요하게 늘리는 요인이 된다고 주장합니다. 특히 'isString'과 같은 기능이 이미 네이티브로 지원됨에도 불구하고 별도의 패키지로 제공되는 경우, 이는 코드 중복이며 유지보수 부담을 가중시킨다고 비판합니다. 개발자들은 이러한 패키지의 필요성을 재검토해야 한다고 강조합니다.

개발자 문화와 의존성 관리의 책임

영상은 이러한 문제의 근본 원인 중 하나로 개발 문화의 일부를 지목합니다. 일부 개발자들이 '일단 가져다 쓰자'는 식의 태도로 불필요한 의존성을 쉽게 추가하며, 코드 중복성이나 의존성 관리의 복잡성을 간과하는 경향이 있다고 지적합니다. 발표자는 개발자들이 각 패키지의 필요성을 신중하게 검토하고, 내장 기능 활용이나 더욱 통합된 라이브러리를 선택하는 문화를 만들어야 한다고 제안하며, 이는 장기적으로 생태계의 건강성을 높이는 길이라고 역설합니다.

A rant about Javascript bloat