본문 바로가기
Node.js

Node Package Manager (npm)

by Programmer.Junny 2025. 1. 11.

Node Package Manager (npm) 이란?

npm은 Node.js의 패키지 관리자(Node Package Manager)로, 오픈소스 라이브러리들을 쉽게 설치하고, 프로젝트 관리를 간편하게 해주는 도구이다. Node.js 생태계에서 사실상 표준으로 자리 잡았으며, 현재 수백만 개 이상의 패키지가 npm 등록되어 있다.

1. npm의 기본 개념

  1. Node.js 패키지 설치/배포
    • npm을 이용해 **외부 라이브러리(패키지)**를 설치하고,
    • 자신의 프로젝트(라이브러리)를 npm 레지스트리에 배포할 수도 있다.
  2. npm 레지스트리(npm registry)
    • 모든 npm 패키지가 등록되어 있는 중앙 저장소.
    • npm install 시, npm 레지스트리에서 해당 패키지를 다운로드한다.
  3. package.json
    • Node.js 프로젝트의 메타정보(이름, 버전, 의존성(dependencies), 스크립트(scripts) 등)를 담고 있는 중심 파일.
    • npm init 명령어로 쉽게 만들 수 있다.

2. npm 설치 및 버전 확인

  • Node.js를 설치하면 기본적으로 npm이 함께 설치된다.

3. 자주 쓰는 npm 명령어

3.1 npm init

  • 새 프로젝트를 시작할 때 package.json을 생성해준다.
npm init
  • y 옵션을 쓰면 질문 없이 기본값으로 생성:
npm init -y

3.2 npm install (또는 npm i)

  • 패키지 설치 명령어.
  • 로컬 프로젝트의 dependencies에 패키지를 추가하고, node_modules 폴더에 설치한다.
  • package-lock.json이 생기며, install한 모듈이 가지는 dependencies들을 기록한다.

예시:

npm install express
  • package.json의 dependencies에 "express": "^4.18.0" 형태로 기록되고, node_modules에 실제 파일이 깔린다.

**개발 의존성(devDependencies)**에 설치:

npm i -D nodemon

글로벌 설치(CLI도구 등에서 사용):

npm install -g typescript
  • 전역으로 설치되어, 터미널 어디서든 tsc 같은 명령어를 실행 가능.

3.3 npm uninstall

  • 패키지를 제거:
npm uninstall express

3.4 npm update

  • 기존에 설치된 패키지를 업데이트 해준다.

3.5 npm run <script>

  • package.json 내부의 scripts 항목에 정의된 스크립트를 실행.
{
  "scripts": {
    "start": "node index.js",
    "test": "jest"
  }
}
npm run start   # "node index.js" 실행
npm run test    # "jest" 실행
  • npm test와 npm start는 특별히 run 생략 가능(예: npm start).

4. package.json 구조

{
  "name": "my-project",
  "version": "1.0.0",
  "description": "My awesome Node.js project",
  "main": "index.js",
  "scripts": {
    "start": "node index.js",
    "test": "jest"
  },
  "keywords": ["node", "npm", "project"],
  "author": "Developer",
  "license": "MIT",
  "dependencies": {
    "express": "^4.18.0"
  },
  "devDependencies": {
    "jest": "^29.0.0"
  }
}

 

  • name: 패키지 이름
  • version: 패키지 버전(semantic versioning)
  • dependencies: 운영 환경에서 필요한 라이브러리 목록
  • devDependencies: 개발 환경(테스트, 빌드 등)에 필요한 라이브러리 목록
  • scripts: 명령어 모음

5. npx

-g global 명령어는 package.json에 기록이 남지 않기 때문에, 협업하는 입장에서는 어떤 패키지가 global 설정되었는지 알 수 없다는 문제가 있다. 그에 대한 좋은 해결 방법으로는 dependencies 혹은 devDependencies에 패키지를 설치 후 npx 키워드를 사용한다. npx는 글로벌 설치없이 글로벌 명령어가 사용 가능한 키워드이다.

예시:

npx rimraf node_modules

6. Semantic Versioning (SemVer)

npm에서는 버전을 주버전.부버전.수정버전(X.Y.Z) 형식으로 관리하는 것이 일반적이며,

  • 주버전(major): 호환성이 깨지는 큰 변경
  • 부버전(minor): 호환성 유지하면서 기능 추가
  • 수정버전(patch): 호환성 유지하면서 버그 수정

^ 또는 ~ 기호는 버전 범위를 지정해, 자동 업데이트의 범위를 조정한다.

  • ^4.18.0 → 4.x.x 범위에서 최신 버전
  • ~4.18.0 → 4.18.x 범위에서 최신 버전

7. npm publish (패키지 배포)

  • 오픈소스 라이브러리를 만든 뒤, npm 레지스트리에 공개하여 다른 개발자들이 설치할 수 있도록 할 수 있음.
  • 절차:
npm login             # npm 계정 로그인
npm publish          # package.json에 name, version 등이 있어야 함

 

  • 비공개(private) 패키지를 만들 수도 있으나, 유료 플랜이 필요했었고, 현재는 GitHub Packages, GitLab Packages 등을 사용해 사설 레지스트리를 구성하기도 함.

8. package-lock.json

  • npm 5 이상부터 package-lock.json 파일이 자동 생성된다.
  • 정확한 버전의 패키지를 기록하여, 모든 환경(개발, 스테이징, 프로덕션 등)에서 동일한 의존 구조를 설치하도록 보장해준다.
  • 팀 프로젝트에서 의존성 충돌을 줄이고, 재현성을 높이기 위해 꼭 버전관리에 포함시킨다(.gitignore에서 제외).

9. Yarn, pnpm 등 대안

  • npm이 표준이지만, Yarnpnpm 같은 대체 패키지 매니저도 많이 사용된다.
  • 최근 npm도 성능과 기능이 많이 개선되면서, 차이가 줄었지만, 팀별/프로젝트별로 편의성에 따라 Yarn, pnpm을 쓰는 경우도 많다.

10. Best Practices

  1. 버전 관리
    • dependencies에 버전 범위를 적절히 설정(주로 ^ 사용)하고, 보안상 중요한 업데이트는 빠르게 적용.
  2. scripts 활용
    • "scripts" 항목을 잘 정의하면, npm run build, npm run test, npm run deploy 등으로 개발 파이프라인을 단순화.
  3. package-lock.json 유지
    • 팀이 같은 버전 의존성을 사용하도록 package-lock.json을 버전관리(Git)한다.
  4. Dev/Prod 환경 분리
    • 개발 시에는 devDependencies에 설치(테스트, 빌드 도구 등).
    • 프로덕션 배포 시 npm install --production으로 devDependencies를 설치하지 않도록.
  5. 보안 점검
    • npm audit로 취약점이 있는 패키지 점검 & npm audit fix로 자동 수정(가능하면).
  6. 폴더 정리
    • node_modules 폴더는 매우 커질 수 있으므로, 버전관리(Git 등)에 보통 포함하지 않는다. (제거 후 배포)

최근댓글

최근글

skin by © 2024 ttuttak