본문 바로가기
npm
제품

npm

npm

자바스크립트 소프트웨어를 배포·검색·설치·관리하는 패키지 생태계. 터미널에서 사용하는 명령줄 인터페이스(CLI), 패키지를 탐색하고 계정을 관리하는 웹사이트, 공개·비공개 패키지 메타데이터를 제공하는 레지스트리로 구성됨.

Node.js 생태계의 표준 패키지 관리 도구로 자리 잡아 자바스크립트 의존성 관리와 오픈소스 코드 재사용의 핵심 기반이 됨. 2020년 깃허브에 인수된 뒤에도 공개 레지스트리와 CLI를 중심으로 운영되며, 공급망 보안과 재현 가능한 설치 기능을 지속적으로 강화함.

10 타임라인
3 사실

추가 정보

구성

npm CLI는 터미널에서 패키지 설치·게시·업데이트와 프로젝트 의존성 관리를 수행하는 도구. npm 레지스트리는 자바스크립트 패키지와 버전·의존성 등 메타데이터를 저장하는 공개 데이터베이스이며, 웹사이트는 검색·프로필·조직·접근 권한 관리를 제공함.

생태계의 역할

패키지 이름과 버전, 의존성 범위를 package.json에 선언하고 레지스트리에서 필요한 코드를 내려받는 작업 흐름을 대중화함. Node.js 설치 프로그램에 포함되면서 서버와 프런트엔드 자바스크립트 개발 전반의 공통 배포 기반으로 확산됨.

운영과 보안

대규모 의존성 그래프는 코드 재사용을 촉진하는 동시에 개별 패키지 삭제나 계정 탈취가 광범위한 장애와 공급망 위험으로 이어질 수 있음을 드러냄. 이에 따라 게시 취소 정책, 다중 인증, 취약점 감사, 잠금 파일과 출처 증명 등 신뢰성과 재현성을 높이는 장치가 확대됨.

타임라인

10
2009 1건
17년 전

아이작 Z. 슐루터가 npm 저장소에 첫 커밋을 올리며 Node.js용 패키지 관리 도구 개발을 공개적으로 시작함. 초기 코드에는 패키지 카탈로그 목록을 읽고 갱신하는 구조와 검색·설치·활성화·삭제 명령의 인터페이스가 포함됐으나, 설치 기능 자체는 아직 구현 전 단계였음. 이 저장소 공개는 이후 Node.js 생태계의 표준 패키지 관리자 npm으로 발전하는 출발점.

2010 1건
16년 전

아이작 Z. 슐루터가 npm의 설치 처리 경로를 구현하며, 내려받은 패키지 압축 파일을 지정한 패키지 이름과 설치 위치에 연결하는 초기 동작을 추가함. npm은 패키지 정보를 조회·검색하는 도구의 골격을 넘어, Node.js 모듈을 명령줄에서 받아 설치하는 패키지 관리 도구로 구체화되기 시작함.

2011 1건
15년 전
2015 1건
11년 전

npm이 조직 내부에서만 사용할 수 있는 비공개 패키지 모듈 서비스를 공개함. 고객별 모듈, 사내 프런트엔드 컴포넌트 라이브러리, 내부 명령줄 도구, 공개 패키지의 수정 포크 등을 npm 레지스트리 안에서 제한적으로 배포할 수 있게 하며, npm이 공개 오픈소스 패키지 저장소를 넘어 기업용 패키지 배포 기반으로 확장되는 계기.

2016 1건
10년 전

개발자 아제르 코출루가 kik 패키지와 함께 left-pad를 포함한 273개 패키지를 게시 취소하면서, 이를 직접·간접 의존하던 수천 개 프로젝트의 패키지 설치와 빌드가 연쇄적으로 실패함. npm은 삭제 약 10분 뒤 대체 left-pad 1.0.0이 게시됐지만 기존 의존성 버전 요구를 충족하지 못하자, 백업을 이용해 원래의 left-pad@0.0.3을 예외적으로 다시 게시함. 전체 장애는 약 2시간 30분 동안 이어졌으며, npm은 이후 의존 관계를 깨뜨릴 수 있는 게시 취소와 버려진 패키지 이름의 즉시 재사용을 제한하는 기술·정책 변경을 추진함.

2017 1건
9년 전

npm이 계정 탈취와 배포 권한 오남용에 대응하기 위해 인증 앱 기반 2단계 인증과 읽기 전용 접근 토큰을 도입함. CI/CD 등 패키지 게시 권한이 필요 없는 환경에는 다운로드 전용 토큰을 발급하고, 토큰 사용 IP 범위를 제한할 수 있게 하며 유출된 자격 증명이 패키지 변조로 이어질 위험을 줄이는 보안 전환점.

2020 1건
6년 전
2020-04-15 인수되어 합류한 패키지 생태계

npm, 깃허브에 합류

깃허브가 자바스크립트 패키지 레지스트리 npm의 인수를 마무리하고, npm이 깃허브 생태계에 공식 합류함. 깃허브는 npm 공개 레지스트리를 무료로 유지하는 한편, 레지스트리 인프라·다단계 인증·패키지 배포 경험을 개선하고 GitHub 풀 리퀘스트부터 npm 패키지 버전까지 변경 이력을 연결하는 공급망 보안 강화를 추진함.

2021 1건
5년 전

npm CLI 7이 npm 레지스트리의 latest 태그로 승격되며 일반 배포됨. 새 package-lock.json v2 형식을 도입해 결정론적이고 재현 가능한 패키지 트리 생성을 강화하고, 피어 의존성 자동 설치와 충돌 시 설치 차단을 기본 동작으로 전환함. 내부 의존성 수를 줄이고 성능과 테스트 커버리지를 개선한 대규모 CLI 개편.

2025 2건
1년 전

npm이 OpenID Connect(OIDC) 기반 신뢰할 수 있는 배포 기능을 일반 배포함. GitHub Actions와 GitLab CI/CD의 특정 워크플로를 패키지의 신뢰할 수 있는 게시자로 지정해, 장기 수명의 npm 게시 토큰을 저장·회전·노출하지 않고도 패키지를 배포할 수 있게 함. 배포마다 짧은 수명의 워크플로별 자격 증명을 사용하고, 해당 방식으로 게시한 패키지에는 소스와 빌드 환경을 검증할 수 있는 프로비넌스 증명을 기본 생성하며 npm 공급망 보안 체계를 강화함.

깃허브

npm이 기존 클래식 접근 토큰을 모두 영구 폐기하고, 새 클래식 토큰의 생성·복구도 중단함. 이후 npm login은 장기 토큰 대신 2시간 뒤 만료되는 세션 토큰을 발급하도록 바뀌었으며, 패키지 게시 작업에는 2단계 인증을 적용함. 동시에 세분화 접근 토큰을 터미널에서 생성·조회·폐기할 수 있는 CLI 관리 기능을 도입해, 장기·광범위 권한 토큰 중심의 인증 체계에서 짧은 수명과 최소 권한 원칙을 강화한 보안 전환점.

그 외 사실들

기록

  • npm 공식 홈페이지

    출처: www.npmjs.com
  • 공개 npm 레지스트리는 개발자가 공개 패키지를 무료로 공유하고 이용할 수 있는 서비스.

    공개 레지스트리의 이용 원칙

    출처: npm Docs
  • 깃허브가 2020년 4월 15일 npm 인수를 완료했으며 공개 레지스트리를 무료로 유지한다고 발표함.

    현재 운영 구조를 형성한 인수 완료

    2020년 4월 15일 | 출처: GitHub Blog