npm, 즉 Node Package Manager는 2009년 Node.js와 함께 나온 뒤 JavaScript 패키지 관리의 기본값이 되었어. 이 퀘스트의 다른 도구보다 오래되었고 덜 영리하며 느리기도 해. 하지만 모든 기여자의 컴퓨터에 이미 있다고 기대할 수 있고, 모든 CI 이미지가 지원하며, 거의 모든 JavaScript 안내서가 전제로 삼아. 이 보편적인 기준점이 npm의 가장 큰 힘이고 지금도 기본값으로 남는 이유야.
Node.js 24와 함께 제공되는 npm v11은 Node.js ^20.17.0 || >=22.9.0이 필요해. 최근에는 캐시 개선으로 설치가 빨라졌고, --ignore-scripts가 모든 lifecycle script에 적용되어 보안이 강화됐어. npm init도 조용히 기본값을 택하는 대신 ESM과 CommonJS 중 무엇을 쓸지 물어봐.
한계도 분명해. 평평한 node_modules 구조 때문에 package.json에 선언하지 않은 패키지를 우연히 불러오는 phantom dependencies가 생길 수 있어. 설치 속도는 pnpm이나 Bun보다 느리고, 예를 들어 Next.js 설치가 약 57초로 약 9초인 도구보다 훨씬 오래 걸릴 수 있지. package-lock.json은 장황해 병합 충돌이 잦고, 내장 monorepo 지원도 pnpm이나 Yarn만큼 강하지 않아.
그래도 가장 큰 장점은 변하지 않아. 이미 어디에나 있다는 것이야. 취미 프로젝트, 오픈 소스 라이브러리, 도구 선택에 확신이 없는 팀에는 npm이 안전한 기본값이야. 설치 속도나 monorepo 지원이 실제 문제가 될 때 pnpm이나 Bun을 검토하면 돼.