npm 패키지는 공개되기 전에 검사된다: 게시 자동화가 기다려야 할 5분

npm이 새 패키지를 공개하기 전에 악성코드 검사를 시작했습니다. 대부분 약 5분의 지연이 생기며, 보안 도구처럼 이중 용도 기능을 담은 패키지에는 새 메타데이터와 공개 문서가 요구됩니다.

npm 패키지는 공개되기 전에 검사된다: 게시 자동화가 기다려야 할 5분

npm이 2026년 7월 28일 새 패키지와 버전을 레지스트리에서 설치 가능하게 만들기 전에 악성코드를 자동 검사하는 절차를 도입했습니다. 게시 명령이 성공했다고 해서 패키지를 곧바로 설치하거나 사용 중단 처리(deprecate)·삭제(unpublish)할 수 있는 것은 아닙니다. 이를 전제로 한 자동화는 실행 순서를 조정해야 합니다.

무엇이 바뀌었나

새로 게시된 패키지는 검사 결과에 따라 정상 공개, 수동 검토 보류, 차단 중 하나로 처리됩니다. npm은 보통 약 5분, 혼잡 시간이나 패키지의 크기·내용에 따라 15분 이상 걸릴 수 있다고 안내했습니다. 이 시간은 보장된 서비스 수준이 아닙니다.

검사 중에도 npm dist-tag는 사용할 수 있지만, 해당 버전이 공개돼야 하는 npm deprecatenpm unpublish는 바로 작동하지 않습니다.

개발자에게 왜 중요한가

릴리스 파이프라인이 게시 직후 별도 환경에서 설치 테스트를 하거나, 태그·공지·배포를 연달아 실행한다면 짧은 대기와 재시도 로직이 필요합니다. 고정된 5분 대기는 혼잡 상황을 처리하지 못하므로 레지스트리에서 버전이 조회되는지 확인한 뒤 다음 단계로 넘어가는 편이 안전합니다.

이중 용도 패키지의 새 조건

침투 테스트나 보안 분석처럼 합법적이지만 악성코드와 비슷한 기능을 가진 패키지는 package.jsoncontentPolicy 필드와 루트의 텍스트 전용 DISCLOSURE 파일로 기능과 정당한 사용 목적을 밝혀야 합니다. 이런 패키지는 2단계 인증을 강제하는 방식으로 게시해야 합니다.

한 번 이중 용도로 선언한 패키지는 이후 버전에서 해당 필드와 파일을 제거할 수 없습니다. 요구 사항은 단계적으로 적용되며 npm은 영향을 받는 유지관리자에게 직접 연락한다고 밝혔습니다.

기존 프로젝트 영향

패키지를 설치하는 일반 이용자에게 새 버전 호환성 변화는 없습니다. 변화의 중심은 게시자와 CI/CD입니다. 검사 지연은 공급망 방어층을 늘리지만 모든 악성 패키지를 잡는다는 보장은 아니므로 잠금 파일, 출처 검토, 최소 권한 토큰 같은 기존 통제를 유지해야 합니다.

적용 전 확인 사항

  • 게시 직후 설치하는 작업에 지수 백오프와 제한 시간을 둡니다.
  • 게시 성공과 레지스트리 공개 완료를 별도 상태로 기록합니다.
  • 보안·관리 도구는 이중 용도 선언 대상인지 문서와 함께 검토합니다.
  • OIDC 기반 신뢰 게시나 대화형 2단계 인증 등 허용된 게시 경로를 확인합니다.

GitHub Changelog — npm publish-time malware scanning and dual-use metadata · npm Docs — Dual-use content policy · npm Docs — Trusted publishing