Node Package Manager (npm) 이란?
npm은 Node.js의 패키지 관리자(Node Package Manager)로, 오픈소스 라이브러리들을 쉽게 설치하고, 프로젝트 관리를 간편하게 해주는 도구이다. Node.js 생태계에서 사실상 표준으로 자리 잡았으며, 현재 수백만 개 이상의 패키지가 npm 등록되어 있다.
1. npm의 기본 개념
- Node.js 패키지 설치/배포
- npm을 이용해 **외부 라이브러리(패키지)**를 설치하고,
- 자신의 프로젝트(라이브러리)를 npm 레지스트리에 배포할 수도 있다.
- npm 레지스트리(npm registry)
- 모든 npm 패키지가 등록되어 있는 중앙 저장소.
- npm install 시, npm 레지스트리에서 해당 패키지를 다운로드한다.
- 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이 표준이지만, Yarn, pnpm 같은 대체 패키지 매니저도 많이 사용된다.
- 최근 npm도 성능과 기능이 많이 개선되면서, 차이가 줄었지만, 팀별/프로젝트별로 편의성에 따라 Yarn, pnpm을 쓰는 경우도 많다.
10. Best Practices
- 버전 관리
- dependencies에 버전 범위를 적절히 설정(주로 ^ 사용)하고, 보안상 중요한 업데이트는 빠르게 적용.
- scripts 활용
- "scripts" 항목을 잘 정의하면, npm run build, npm run test, npm run deploy 등으로 개발 파이프라인을 단순화.
- package-lock.json 유지
- 팀이 같은 버전 의존성을 사용하도록 package-lock.json을 버전관리(Git)한다.
- Dev/Prod 환경 분리
- 개발 시에는 devDependencies에 설치(테스트, 빌드 도구 등).
- 프로덕션 배포 시 npm install --production으로 devDependencies를 설치하지 않도록.
- 보안 점검
- npm audit로 취약점이 있는 패키지 점검 & npm audit fix로 자동 수정(가능하면).
- 폴더 정리
- node_modules 폴더는 매우 커질 수 있으므로, 버전관리(Git 등)에 보통 포함하지 않는다. (제거 후 배포)
'Node.js' 카테고리의 다른 글
익스프레스 웹 서버 만들기 - express로 HTML 서빙하기 (0) | 2025.01.12 |
---|---|
익스프레스 웹 서버 만들기 - express 서버 사용해보기 (1) | 2025.01.12 |
http 모듈로 서버 만들기 (0) | 2025.01.11 |
Node.js 기본 모듈 (global,console,타이머 등등) (0) | 2025.01.09 |
Node.js 기본 모듈 (CommonJS, ES모듈) (0) | 2025.01.09 |