2025-08-31 13:21
npm
- 
package.json파일은 프로젝트의 정보와 의존성을 명시하는 설계도 역할을 하며,npm install명령어로 필요한 모든 패키지를node_modules폴더에 설치 - 
npm 없을때는 직접 스크립트 링크를 심거나 직접 다운 받는 식으로 사용해야 했음(제이쿼리, 부트스트랩)
- 버전관리, 협업, 업데이트, 의존성 관리 등 프로젝트가 커지고 복잡해질수록 매우 어려워짐
 
 
“자바스크립트 개발자들이 만든 유용한 코드 조각(패키지)을 쉽게 공유하고, 다른 사람의 코드를 내 프로젝트에 쉽게 가져와 사용하며, 이 모든 과정(의존성 관리)을 자동화하자!”
- 
npm 레지스트리(Registry): 전 세계의 모든 자바스크립트 패키지(책)가 모여있는 거대한 온라인 데이터베이스(도서관).
 - 
package.json: 내 프로젝트가 어떤 패키지(책)들을, 어떤 버전으로 필요로 하는지 명시한 목록(대출 카드). - 
npm CLI: 레지스트리에서 패키지를 찾아 내 컴퓨터로 가져오고,package.json을 관리하는 도구(사서). - 
package.json: 우리 프로젝트에 대략 어떤 책들이 필요한지 적어둔 ‘희망 도서 목록’. - 
package-lock.json: 실제로 도서관에서 빌려온 모든 책들의 정확한 버전(판)과 정보가 담긴 ‘실제 대출 기록부’. - 
node_modules: 대출 기록부를 바탕으로 실제 책들이 꽂혀있는 ‘내 책장’. - 
npx의 핵심 기능은 패키지를 로컬에 설치하지 않고도 실행할 수 있게 해주는 것.
 
| 속성 (Property) | 설명 | 예시 | 
|---|---|---|
name | 패키지의 이름. npm 레지스트리에서 유일해야 합니다. | "my-awesome-app" | 
version | 패키지의 버전. SemVer(유의적 버전) 규칙을 따릅니다. | "1.0.0" | 
description | 패키지에 대한 간략한 설명. 검색 시 노출됩니다. | "A revolutionary new application." | 
main | 패키지의 진입점(entry point)이 되는 파일. | "index.js" | 
scripts | npm run <스크립트이름>으로 실행할 수 있는 커스텀 명령어. | "start": "node index.js" | 
dependencies | 프로덕션 환경에서 필요한 패키지 목록. 앱 실행에 필수적. | "express": "^4.17.1" | 
devDependencies | 개발 환경에서만 필요한 패키지 목록. (테스트, 빌드 도구 등) | "jest": "^27.0.6" | 
author | 패키지 제작자 정보. | "John Doe <john.doe@example.com>" | 
license | 패키지의 라이선스. | "MIT" | 
| 명령어 | 설명 | 
|---|---|
npm init | 새로운 프로젝트를 시작합니다. package.json 파일을 생성하기 위해 몇 가지 질문을 합니다. npm init -y를 사용하면 모든 질문에 기본값으로 자동 응답합니다. | 
npm install <패키지> | 특정 패키지를 설치합니다. 기본적으로 dependencies에 추가됩니다. 약어는 npm i 입니다. 예: npm install react | 
npm install | package.json에 명시된 모든 패키지를 node_modules에 설치합니다. 프로젝트를 클론한 후 가장 먼저 실행하는 명령어입니다. | 
npm install <패키지> --save-dev | 개발용 의존성을 설치합니다. devDependencies에 추가됩니다. 약어는 -D 입니다. 예: npm i tailwindcss -D | 
npm install <패키지> -g | 패키지를 전역(global) 으로 설치합니다. 프로젝트에 종속되지 않고 컴퓨터의 모든 위치에서 사용할 수 있는 CLI 도구를 설치할 때 주로 사용합니다. 예: npm install -g create-react-app | 
npm uninstall <패키지> | 설치된 패키지를 제거합니다. package.json, package-lock.json, node_modules에서 모두 삭제됩니다. 약어는 npm rm 입니다. 예: npm uninstall moment | 
npm update | package.json에 명시된 버전 범위 내에서 패키지들을 최신 버전으로 업데이트하고 package-lock.json을 갱신합니다. | 
npm run <스크립트이름> | package.json의 scripts 객체에 정의된 명령어를 실행합니다. 예: npm run start, npm run build | 
npm search <키워드> | npm 레지스트리에서 특정 키워드를 포함하는 패키지를 검색합니다. | 
npm audit | 프로젝트의 의존성 트리를 스캔하여 알려진 보안 취약점이 있는지 검사하고 보고서를 제공합니다. npm audit fix로 일부 문제를 자동으로 해결할 수 있습니다. | 
| 특징 | npm | yarn (Classic) | pnpm | 
|---|---|---|---|
| 속도 | 초기에는 느렸으나, 버전 5 이후 캐싱 도입 등으로 크게 개선됨. | 병렬 다운로드 기능으로 출시 당시 npm보다 훨씬 빨랐음. | 가장 빠름. 중복 파일을 하드 링크로 관리하여 설치 속도와 디스크 공간 효율이 극대화됨. | 
node_modules 구조 | 중첩 구조(v2) → 평탄화 구조(v3+). 유령 의존성(phantom dependency) 문제 발생 가능. | npm v3+ 와 유사한 평탄화 구조. | node_modules를 평탄화하지 않음. 심볼릭 링크를 사용해 의존성을 관리하여 유령 의존성 문제를 원천 차단. | 
| 디스크 공간 | 프로젝트마다 모든 패키지를 별도로 저장하여 공간 낭비가 있을 수 있음. | npm과 유사. | 전역 저장소를 사용해 패키지를 한 번만 다운로드하고, 각 프로젝트에서는 링크로 참조. 디스크 공간을 획기적으로 절약. | 
lock 파일 | package-lock.json | yarn.lock | pnpm-lock.yaml | 
- 현재는 npm 자체도 많은 개선을 이루어 속도나 기능 면에서 yarn과 큰 차이가 없는 수준까지 올라왔다.