npm은 Node.js 플랫폼을 위한 패키지 관리자이며, JavaScript 프로젝트에서 외부 라이브러리와 도구를 손쉽게 설치·관리·배포할 수 있도록 지원한다. npm은 “Node Package Manager”의 약자로, Node.js와 함께 기본적으로 제공된다.
개요
- 정식 명칭: npm (Node Package Manager)
- 개발·유지보수: npm, Inc.가 주도하고 있으며, 현재는 GitHub 및 전 세계 기여자 커뮤니티가 함께 관리한다.
- 주요 기능
- 패키지 설치:
npm install <패키지명>명령을 통해 원격 레지스트리(기본은 https://registry.npmjs.org)에서 패키지를 받아 프로젝트에 추가한다. - 버전 관리:
package.json파일에 의존성 버전 범위를 명시하여, 프로젝트별로 일관된 의존성 트리를 유지한다. - 스크립트 실행:
npm run <스크립트명>형태로 정의된 자동화 작업(빌드, 테스트 등)을 실행한다. - 패키지 발행:
npm publish명령을 이용해 자신이 만든 모듈을 전 세계 개발자에게 공개할 수 있다.
- 패키지 설치:
역사
- 출시 연도: 2010년 2월, Isaac Z. Schlueter가 최초 공개하였다.
- 배경: Node.js 초기 버전은 모듈 관리를 위한 표준 도구가 없었으며, 커뮤니티가 자체적으로 만든 여러 패키지 관리 솔루션이 존재했다. npm은 이러한 상황을 통합하고 표준화하기 위해 설계되었다.
- 주요 변천:
- 2014년 npm 5.0에서
package-lock.json도입과 함께 자동으로node_modules폴더를 최적화하는 기능이 추가되었다. - 2020년 npm 6.14 이후, 보안 스캔(
npm audit) 기능이 기본 제공돼 의존성 취약점 검출이 가능해졌다.
- 2014년 npm 5.0에서
구조
- 레지스트리: 전 세계 개발자가 게시한 패키지 메타데이터와 소스 코드를 저장·배포하는 중앙 저장소.
- 클라이언트: 로컬 머신에서 실행되는 명령줄 도구(
npm명령)이며, Node.js 실행 파일과 함께 번들된다. - 패키지 매니페스트:
package.json파일에 프로젝트 메타데이터(이름, 버전, 의존성 등)를 기술한다.
사용 예시
# 프로젝트 초기화
npm init -y
# lodash 라이브러리 설치 및 의존성 기록
npm install lodash --save
# 개발용 의존성(테스트 프레임워크 등) 설치
npm install jest --save-dev
# 설치된 패키지 최신 버전 확인 및 업데이트
npm outdated
npm update
관련 생태계
- yarn: Facebook에서 개발한 대체 패키지 관리자이며, 동일한 레지스트리를 사용하지만 캐시 및 병렬 설치 최적화 등을 특징으로 한다.
- pnpm: 디스크 공간 절약을 위한 하드 링크 기반 설치 방식을 제공한다.
보안 및 정책
npm 레지스트리는 공개 패키지의 무제한 업로드를 허용한다. 따라서 악성 코드가 포함된 패키지가 배포될 위험이 존재하며, 이를 완화하기 위해 npm audit, npm audit fix, 그리고 레지스트리 정책(예: 2FA(2단계 인증) 의무화) 등이 도입되었다.
최신 버전 및 지원
npm은 정기적으로 버전이 업데이트되며, Node.js LTS 릴리스와 호환성을 유지한다. 최신 버전은 npm 공식 웹사이트와 GitHub 리포지터리에서 확인할 수 있다.
참고
- npm 공식 웹사이트: https://www.npmjs.com
- GitHub 리포지터리: https://github.com/npm/cli
위 내용은 공개적으로 검증된 자료(공식 문서, 릴리스 노트, 주요 기술 블로그 등)를 기반으로 작성되었으며, 현재 시점(2026년 6월)까지 확인 가능한 정보에 한한다.