🔧 DevOps

npm

Node Package Manager

Node.js의 패키지 관리자. JavaScript 라이브러리 설치와 의존성 관리. 세계 최대 패키지 레지스트리.

상세 설명

npm(Node Package Manager)은 Node.js의 기본 패키지 관리자이자 세계 최대의 소프트웨어 레지스트리입니다. 2010년 출시 이후 200만 개 이상의 패키지가 등록되어 있으며, 주간 다운로드가 수십억 건에 달합니다.

핵심 기능으로 패키지 설치/삭제, 의존성 관리, 스크립트 실행, 패키지 배포가 있습니다. package.json에 프로젝트 메타데이터와 의존성을 정의하고, package-lock.json으로 정확한 버전을 고정합니다. Semantic Versioning(major.minor.patch)을 따릅니다.

node_modules 폴더에 패키지가 설치되며, 의존성 트리가 플랫하게 호이스팅됩니다. npm 7부터 workspaces로 모노레포를 지원하고, npm audit로 보안 취약점을 검사합니다. npx로 패키지를 설치 없이 실행할 수 있습니다.

실무에서는 CI에서 npm ci(clean install)로 lock 파일 기반 설치, --save-exact로 버전 고정, .npmrc로 프라이빗 레지스트리 설정을 합니다. npm run으로 빌드/테스트 스크립트를 표준화합니다.

코드 예제

# 프로젝트 초기화
npm init -y

# 패키지 설치
npm install express           # dependencies
npm install -D jest           # devDependencies
npm install -g typescript     # 글로벌 설치
npm install react@18.2.0      # 특정 버전
npm install --save-exact lodash  # 정확한 버전 고정 (^ 없이)

# CI 환경 설치 (package-lock.json 기반)
npm ci

# 패키지 정보 및 검색
npm view express versions     # 사용 가능한 버전 확인
npm outdated                  # 업데이트 가능한 패키지
npm ls --depth=0              # 설치된 패키지 목록

# 보안 검사
npm audit                     # 취약점 검사
npm audit fix                 # 자동 수정
npm audit fix --force         # 메이저 업데이트 포함 수정

# 스크립트 실행 (package.json scripts)
npm run build
npm run test
npm start                     # npm run start 단축형
npm run dev -- --port 3001    # 인자 전달

# 패키지 배포
npm login
npm version patch             # 버전 증가 (1.0.0 -> 1.0.1)
npm publish
npm deprecate my-pkg "Use new-pkg instead"

# 캐시 관리
npm cache clean --force
npm cache verify

실무에서 이렇게 말해요

시니어: "npm audit에서 critical 취약점 3개 나왔는데, 확인해보셨어요?"

주니어: "확인했는데 개발 의존성이라 운영 영향은 없어요. 그래도 다음 스프린트에 업데이트 포함시키겠습니다."

면접관: "npm install과 npm ci의 차이점은 무엇인가요?"

지원자: "npm install은 package.json 기준으로 설치하고 lock 파일을 업데이트할 수 있지만, npm ci는 package-lock.json을 그대로 사용하고 node_modules를 완전히 삭제 후 재설치합니다. CI 환경에서는 재현성을 위해 npm ci를 사용합니다."

리뷰어: "package-lock.json 변경이 큰데, npm install 다시 하신 건가요?"

개발자: "네, 로컬에서 node_modules 삭제 후 재설치했더니 변경됐어요. 버전 범위 내 업데이트입니다."

주의사항

더 배우기