#NPM
Korean
Written by Paul
March 5, 2026
모노레포에서
changesets/action으로 npm 배포를 붙이는 중, 아래 에러로 배포가 계속 실패했다.처음엔 패키지가 이미 존재하는데 왜
404가 나는지 이해가 안 됐다.결론부터 말하면, OIDC로 배포한다고 생각했지만 실제로는 토큰 인증 경로를 타고 있었고, 그 토큰이 만료/폐기 상태여서 실패한 케이스였다.
상황 요약
- 패키지:
@coldsurf/shared-utils
- 배포 방식:
changesets/action
- 목표: npm Trusted Publishing(OIDC) 적용
- 실제 증상:
NPM_TOKEN치환 경고- expired/revoked token
- npm publish
E404
핵심 원인
.npmrc에 npm 토큰 참조(//registry.npmjs.org/:_authToken=${NPM_TOKEN})가 남아 있었음
- CI에서 npm 버전이 Trusted Publishing 요구 버전보다 낮을 가능성
- changesets 전역
access설정이restricted였음 (public scoped 패키지와 충돌 여지)
우리가 적용한 수정
1) .npmrc에서 npmjs 토큰 라인 제거
OIDC 배포에서는 publish용
NPM_TOKEN이 필요 없다.2) workflow에서 npm 버전 보장
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 후 배포 정상화 확인