brunch

프런트엔드 개발자의 필수 도구, npm

by 위키북스


unnamed-1.png?type=w966


프런트엔드 개발자라면 누구에게나 익숙할 법한 npm은 현재 전 세계 자바스크립트 개발자가 공통으로 사용하는 패키지 관리 시스템이자 CLI 도구입니다. 대부분의 자바스크립트 개발이 npm에서부터 시작된다고 해도 과언이 아닐 정도로 핵심적인 역할을 담당하고 있습니다. npm을 통해 전 세계에서 업로드된 자바스크립트 패키지를 손쉽게 설치하고 업데이트하며, 프로젝트 간의 의존성을 효율적으로 관리할 수 있습니다.





npm을 왜 배워야 할까요?

현대 웹 개발에서 npm은 선택이 아닌 필수입니다. 자바스크립트 개발자라면 가장 많이 쓰는 CLI 도구가 바로 npm일 것이며, 대부분의 자바스크립트 개발이 npm에서부터 시작된다고 해도 과언이 아닙니다. npm을 제대로 이해하면 다음과 같은 이점을 얻을 수 있습니다.


개발 생산성 향상: npm을 통해 전 세계 개발자들이 만든 검증된 라이브러리와 도구들을 손쉽게 활용할 수 있어, 처음부터 모든 것을 개발할 필요가 없습니다. 또한 프로젝트 간의 의존성을 체계적으로 관리하여 개발 효율성을 극대화할 수 있습니다.


문제 해결 능력 강화: npm의 원리와 구조를 깊이 이해하면 개발 과정에서 발생할 수 있는 다양한 문제들을 스스로 해결할 수 있는 능력을 기를 수 있습니다. 단순히 습관적으로 npm install이나 npm run build를 실행하는 것을 넘어서, 도구의 원리를 이해하는 것은 더 나은 문제 해결 능력을 갖추는 데 필수적입니다.


최신 개발 트렌드 이해: npm 생태계를 통해 자바스크립트 커뮤니티의 최신 동향과 기술 트렌드를 파악할 수 있으며, 나아가 직접 패키지를 작성하고 배포하여 오픈소스 생태계에 기여할 수도 있습니다.





npm의 역사와 배경

npm을 처음 만든 사람은 개발자 아이작 Z. 슐루터(Isaac Z. Schlueter)로, 2009년 Node.js 등장과 함께 개발되기 시작했습니다. npm의 발전 과정을 살펴보면 다음과 같습니다.


2009년 9월: npm 첫 등장

2010년: npm@1.0.0 출시

초기: 주로 Node.js 생태계 코드만 업로드

페이스북 리액트 시기: 프런트엔드 라이브러리들이 npm에 배포하기 시작

2020년: 마이크로소프트의 깃허브가 npm 인수


이러한 변화의 배경에는 기존 CDN 방식에서 발생하는 비용, 보안 문제, 버전 관리 등의 이슈가 있었습니다. npm은 이러한 문제들에서 자유로웠고, 패키지의 버전을 체계적으로 관리할 수 있어서 개발자들이 선호하게 되었습니다. 현재 npm은 약 300만 개의 패키지를 보유하고 있으며, 일주일에 600억 회, 한 달에 약 2,500억 회의 다운로드를 기록하고 있는 자바스크립트 생태계의 산소 같은 존재로 자리 잡았습니다.




npm의 주요 기능

패키지 설치 및 관리

npm의 가장 기본적인 기능은 package.json의 dependencies와 devDependencies에 선언된 패키지를 node_modules에 설치하는 것입니다. 단순히 설치뿐만 아니라 오래된 패키지를 업데이트하고, 보안 취약점이 있는 패키지를 확인하며, 의존성을 임의로 수정하는 것도 가능합니다.



npm 레지스트리를 통한 패키지 배포 및 공유

npm이 인기를 끌 수 있었던 가장 큰 이유는 바로 npm 레지스트리(https://registry.npmjs.org/)입니다. 이는 자바스크립트 개발자가 만든 패키지를 업로드할 수 있는 전 세계 최대 규모의 오픈소스 생태계로, 누구나 패키지를 업로드하고 다운로드할 수 있습니다.



스크립트 실행과 개발 도구

package.json의 scripts 필드를 사용하여 원하는 스크립트를 실행할 수 있습니다. 이를 통해 해당 프로젝트에서 자주 사용되는 복잡한 명령어를 간단한 CLI로 실행할 수 있으며, PATH 등록을 통해 node_modules에 있는 .bin 스크립트도 실행할 수 있습니다. 또한 npmjs.com에서는 npm에 업로드된 패키지의 개요, 코드, 의존성, 다운로드 수 등 종합적인 정보를 확인할 수 있습니다.





npm 생태계의 유용한 도구들

npm의 오랜 역사만큼이나 npm을 중심으로 많은 서비스가 발전해왔습니다. 이러한 도구들은 npm 패키지를 더욱 효율적으로 관리하고 선택하는 데 도움을 줍니다.


- 번들포비아(Bundlephobia): 패키지의 크기와 구성 정보를 분석하여 웹 서비스 배포 시 최적화에 도움

- npm 트렌드(npm trends): 비슷한 기능의 패키지들을 다운로드 횟수로 비교 분석

- unpkg: npm에 업로드된 파일을 node_modules처럼 직접 탐색 가능

- snyk: 패키지의 보안 취약점 정보를 제공하여 안전한 패키지 선택 지원


이 중에서도 특히 snyk는 서비스에 사용할 패키지가 있다면 반드시 해당 패키지에 보안 취약점이 있는지 먼저 확인하는 습관을 두는 것이 좋습니다. 설치하기 전에 정상적으로 동작하고 안정적인 패키지를 찾는 것이 잘못된 패키지를 설치하고 이를 고치는 것보다 훨씬 더 현명한 선택입니다.





마무리

npm은 단순한 패키지 관리자를 넘어서 현대 자바스크립트 개발의 핵심 인프라입니다. 지금까지 npm을 간략하게 소개하고 npm이 만들어진 배경과 역사, 주요 기능, npm과 관련된 유용한 사이트를 살펴봤습니다. 하지만 여기서 다룬 내용은 npm의 방대한 기능 중 극히 일부에 불과합니다. 평소에 프런트엔드 개발을 하면서 npm install, npm run build, npm run start 같이 미리 정의된 스크립트를 습관적으로 사용해왔다면 npm의 다양한 기능과 원리를 깊이 탐구해보시기를 권장합니다.






더 자세한 내용이 궁금하신 분들께 《npm Deep Dive》를 추천합니다. 《npm Deep Dive》에서는 이번 글에서 다룬 내용을 비롯해 자바스크립트 생태계에서 사용되는 다양한 도구와 개념의 작동 원리와 선택 기준을 깊이 있게 다루고, 자바스크립트 생태계의 핵심을 체계적으로 다룹니다.


초보 개발자라면 복잡한 개념을 단계적으로 이해할 수 있도록, 숙련된 개발자라면 실무에 바로 적용할 수 있는 팁과 전략을 통해 자바스크립트를 한층 더 깊이 이해하고 활용할 수 있도록 도와드립니다. 이 책을 통해 자바스크립트 생태계를 한층 더 깊이 있게 이해하고, 더 나은 개발 환경을 만드는 것뿐만 아니라 평소에 하던 웹 서비스 개발만으로는 이해하기 힘든 지식을 얻을 수 있을 것입니다.



◆『npm Deep Dive』◆


keyword
작가의 이전글LangGraph로 복잡한 AI 워크플로 구현하기