#NPM

Written by Paul

March 5, 2026

모노레포에서 changesets/action으로 npm 배포를 붙이는 중, 아래 에러로 배포가 계속 실패했다.
Loading…
처음엔 패키지가 이미 존재하는데 왜 404가 나는지 이해가 안 됐다.
결론부터 말하면, OIDC로 배포한다고 생각했지만 실제로는 토큰 인증 경로를 타고 있었고, 그 토큰이 만료/폐기 상태여서 실패한 케이스였다.

상황 요약

  • 패키지: @coldsurf/shared-utils
  • 배포 방식: changesets/action
  • 목표: npm Trusted Publishing(OIDC) 적용
  • 실제 증상:
    • NPM_TOKEN 치환 경고
    • expired/revoked token
    • npm publish E404

핵심 원인

  1. .npmrc에 npm 토큰 참조(//registry.npmjs.org/:_authToken=${NPM_TOKEN})가 남아 있었음
  1. CI에서 npm 버전이 Trusted Publishing 요구 버전보다 낮을 가능성
  1. changesets 전역 access 설정이 restricted였음 (public scoped 패키지와 충돌 여지)

우리가 적용한 수정

1) .npmrc에서 npmjs 토큰 라인 제거

OIDC 배포에서는 publish용 NPM_TOKEN이 필요 없다.
Loading…

2) workflow에서 npm 버전 보장

Loading…

3) changesets access 설정 정리

access: "public"으로 맞춰 public scoped 패키지 publish 의도와 일치시켰다.

헷갈렸던 포인트

"Trusted Publisher 메뉴가 안 보이는데요?"

처음 배포 전에는 npm UI에서 Trusted Publisher 설정이 안 보일 수 있다.
초기 1회 publish 이후에 패키지 페이지 설정이 노출되는 경우가 있다.

교훈

  • npm의 404는 진짜 "없는 패키지"가 아니라 권한/인증 문제를 숨기는 응답일 수 있다.
  • OIDC 전환 시에는 "토큰 제거"까지 해야 완전 전환이다.
  • mixed registry(npm + GitHub Packages) 환경에서는 package별 publishConfig.registry와 changesets 전역 설정을 함께 점검해야 한다.

최종 상태

  • test changeset 생성
  • CI workflow 보정
  • main에 push 후 배포 정상화 확인