hello

npm 환경 구성의 핵심: .npmrc 완전 정리

Share

Node.js 개발을 하다 보면 패키지 설치 속도, 사내 프록시, 사설 npm 서버,
SSL 인증서 문제, CI/CD 자동화, 개인 토큰 관리 등 다양한 이유로
.npmrc 설정이 필수적이다.

npm은 다음 경로의 .npmrc 파일들을 순서대로 병합하여 최종 설정을 결정한다:

  1. 프로젝트 로컬: <프로젝트>/ .npmrc
  2. 사용자 로컬: ~/.npmrc
  3. 전역(Global): $PREFIX/etc/npmrc
  4. 내장(Default): npm config -l

설정 우선순위는 프로젝트 > 사용자 > 전역 > 기본값이다.


📌 1. 기본 구조

.npmrc 파일은 키=값 형태의 단순한 설정 파일이다.

예:

registry=https://registry.npmjs.org/
strict-ssl=false

🔐 2. 프록시 설정(proxy)

사내 네트워크나 보안망 환경에서는 npm이 외부에 직접 접속할 수 없으며
프록시를 거쳐야 하는 경우가 흔하다.

HTTP 프록시

proxy=http://12.34.56.78:8080

HTTPS 프록시

https-proxy=http://12.34.56.78:8080
프록시가 인증을 요구할 경우
proxy=http://username:[email protected]:8080
https-proxy=http://username:[email protected]:8080

TIP

  • 패스워드에 특수 문자가 있으면 반드시 URL 인코딩해야 한다.
  • 프록시 사용 시 SSL 인증서를 건들여야 하는 경우가 많다. (아래 SSL/CA 항목 참고)

🔏 3. SSL 및 인증서 설정 (strict-ssl / CA / 인증서 파일)

사내 VPN, 프록시, 사설 인증서 등을 사용하는 경우
npm 설치 시 자주 보이는 에러:

UNABLE_TO_VERIFY_LEAF_SIGNATURE
SELF_SIGNED_CERT_IN_CHAIN
CERT_HAS_EXPIRED

이럴 때 .npmrc SSL 설정이 필요하다.


✔ strict-ssl 끄기 (권장 ❌)

가장 쉬운 방법이지만 보안적으로 위험하다.

strict-ssl=false

이렇게 하면 npm이 인증서를 검증하지 않는다.
임시 해결로는 가능하나 장기적으로는 권장하지 않는다.


✔ 사내 인증서(CA) 등록 (권장 ⭕

방법 1) CA 파일 직접 지정

cafile=/path/to/company-ca.pem

예:

cafile=C:\certs\corp-ca.pem

방법 2) 여러 CA를 수동 입력 (권장)

ca="-----BEGIN CERTIFICATE-----
...(생략)...
-----END CERTIFICATE-----"

여러 개 등록도 가능하다.


✔ npm이 기본 제공 CA 외의 CA도 신뢰하도록 설정

strict-ssl=true
ca[]=/path/ca1.pem
ca[]=/path/ca2.pem

🏛 4. 레지스트리(registry) 설정

기본값은 npm 공식 레지스트리:

registry=https://registry.npmjs.org/

사내에서 Nexus, Artifactory, Verdaccio 등 사설 npm 저장소를 운영한다면:

registry=http://my-nexus.company.com/repository/npm/

🔑 5. 인증 토큰(authToken) · 로그인 · npm publish

공개 저장소와 사설 저장소 모두 인증이 필요할 수 있다.

✔ 토큰 저장 (Bearer Token)

//registry.npmjs.org/:_authToken=YOUR_TOKEN_HERE

✔ 기본 인증 계정 정보

_username=myuser
_password=base64encodedpassword
[email protected]
_password는 base64로 인코딩해야 한다. (암호화가 아님)

🔄 6. 캐시(Cache) 관련 설정

npm 캐시 경로 변경:

cache=/path/to/custom/cache

깨진 캐시가 원인일 때는:

npm cache clean --force

📦 7. 패키지 설치 옵션

✔ package-lock.json 저장 안 함

CI/CD 환경에 따라 비활성화할 때 사용

package-lock=false

✔ peerDependencies 자동 설치 허용

legacy-peer-deps=true

✔ optionalDependencies 무시

optional=false

🗂 8. Scoped Registry 설정(@scope)

조직별/프로젝트별 private registry를 사용할 때:

@mycompany:registry=http://my-nexus.company.com/repository/npm-group/

특정 scope만 사설 서버에서 받고,
나머지는 기본 npm registry로 받도록 할 수 있다.


🚚 9. Proxy + Private Registry + CA를 함께 사용한 실전 예시

아래는 실제 기업 환경에서 가장 흔히 사용하는 조합이다:

registry=http://nexus.mycorp.com/repository/npm-group/
proxy=http://12.34.56.78:8080
https-proxy=http://12.34.56.78:8080

cafile=C:\certs\mycorp-ca.pem
strict-ssl=true

@mycorp:registry=http://nexus.mycorp.com/repository/npm-private/

🧪 10. 설정 확인 및 테스트

현재 적용된 모든 npm 설정 확인:

npm config list

특정 항목 확인:

npm config get registry
npm config get proxy

설치 테스트:

npm install axios

🎉 마무리

.npmrc는 단순한 파일처럼 보이지만,
프록시, 인증서, 사설 레지스트리, 인증 토큰 등
네트워크/보안 환경이 복잡할수록 반드시 필요해지는 핵심 설정이다.

정리하자면:

  • 회사·기관 네트워크 = proxy + CA + registry 필수
  • strict-ssl=false는 임시 조치 → 권장 X
  • 여러 .npmrc가 병합되므로 최종 config를 확인하는 습관이 중요
  • CI/CD 환경에서는 토큰·scoped registry 설정이 핵심

Read more

LLM 시대, 프롬프트 엔지니어링보다 '도메인 전문성'이 더 강력한 무기인 이유

최근 AI 도구들이 비약적으로 발전하면서 '프롬프트 엔지니어링'이라는 기술적 기법에 많은 관심이 쏠렸습니다. 하지만 실제 현업에서 LLM을 극한으로 활용해 고도의 결과물을 만들어내는 사람들의 공통점은 정교한 프롬프트 템플릿을 쓰는 능력이 아니라, 해당 분야에 대한 깊은 '도메인 전문성'을 갖추고 있다는 점입니다. 많은 이들이 LLM이 지식의 격차를 줄여준다고

By JHL

AI 코딩 에이전트 도입 시 고려해야 할 보안 제어 프레임워크: 속도와 안전의 균형 잡기

최근 Claude Code나 Kiro와 같은 AI 코딩 에이전트들이 단순한 코드 완성을 넘어, 자연어 프롬프트 하나로 수십 개의 PR을 생성하고 인프라를 수정하는 수준까지 발전했습니다. 하지만 이러한 생산성 향상은 '기계적 속도'라는 트레이드오프를 동반합니다. AI 에이전트는 조직의 보안 리스크나 컴플라이언스를 이해하지 못한 채 오직 '작업 완료'에만 최적화되어

By JHL

AI 벤치마크의 '포화 상태'와 평가 지표의 유효기간: 우리는 무엇을 믿어야 하는가

최근 LLM의 성능이 비약적으로 상승하면서, 역설적으로 우리가 모델의 성능을 측정하는 '자' 자체가 무용지물이 되는 현상이 가속화되고 있습니다. arXiv에 게재된 "When AI Benchmarks Plateau: A Systematic Study of Benchmark Saturation" 연구는 우리가 흔히 신뢰하는 벤치마크 점수가 왜 더 이상 모델 간의 변별력을 제공하지 못하는지, 그리고 이른바 '

By JHL

AI 에이전트 시대의 엔드포인트 보안: 실행 권한을 넘어 '행위 거버넌스'로

DevOps.com을 통해 Airlock Digital이 발표한 'Agentic AI Control & Governance' 솔루션 소식을 접했습니다. 이번 발표의 핵심은 단순히 '어떤 AI 소프트웨어를 실행할 것인가'라는 기존의 화이트리스트 방식(Application Control)을 넘어, 실행 중인 AI 에이전트가 '실제로 어떤 명령을 내리고 어떻게 행동하는가'를 실시간으로 제어하겠다는

By JHL