01. Package Manager
1) Package 란?
📌 **Node.js**에서 **코드의 재사용성**을 높이기 위해 작성된 **독립적인 코드 조각**을 “**모듈**”이라고 부릅니다. 이러한 모듈을 **`npm`**이나 **`yarn`**과 같은 패키지 매니저를 통해 업로드하여 다른 개발자들과 공유할 때, 이를 **패키지(Package)**라고 합니다.
- 모듈(Module)은 일반적으로 프로젝트 내에서 사용되는 코드 조각을 의미하며, 패키지는 이러한 모듈을 포함하고 있거나 다른 패키지에 의존하고 있는 코드의 집합을 의미합니다.
- 패키지는 다른 패키지를 사용할 수 있습니다. 이런 관계를 의존 관계라고 부릅니다.
- ex) **A** 패키지가 B 패키지의 기능을 필요로 한다면, A 패키지는 B 패키지에 “의존”한다고 합니다.
2) Package Manager 란?
- 패키지 매니저(Package Manager)는 패키지를 손쉽게 다루는 작업을 안전하고 편리하게 사용하기 위한 툴입니다. Node.js 패키지의 설치, 업데이트, 삭제 등을 할 수 있으며, 패키지간의 의존성을 관리해줍니다!
- 다른 개발자들이 작성한 코드를 쉽게 다운로드 받거나, 혹은 저희가 작성한 코드를 배포하여 다른 사람들에게 제공할 수 있게 됩니다.
- 패키지 매니저의 진정한 가치는, 여러 개발자들이 만든 수많은 패키지들을 효과적으로 활용하여, 자신의 프로젝트를 더 빠르고, 안정적으로 만들 수 있습니다.
- 만약, 패키지 매니저가 없었다면, 각각의 패키지를 일일이 찾아서 코드를 복사하거나, .zip 파일 형식으로 다운로드 받아 직접 관리하는 번거로움이 있었겠죠? 🥲
- Node.js에서 대표적으로 사용하는 패키지 매니저는
npm과 yarn이 존재합니다.
- 3) npm 이란?
- npm은 자바스크립트에서 사용할 수 있는 패키지(모듈) 관리자입니다. "Node.js를 사용하는데 필요한 패키지를 설치해주는 프로그램" 이라고 생각하시면 좋습니다 🙂
- npm을 통해 여러분이 사용할 라이브러리를 쉽게 설치하고 버전을 관리할 수 있고, 제거할 수도 있습니다.
- Node.js를 설치할 때 함께 설치되므로, Node.js의 가장 대표적인 패키지 매니저입니다.
- npmjs.com 에서 누구나 새로운 패키지를 등록할 수 있고, 설치할 수 있습니다.
- Node Package Manager의 약자로 npm이라는 이름을 가졌지만, 지금은 Node.js와 관계없이 프론트엔드에서만 사용 가능한 자바스크립트 패키지들도 등록되어 있습니다.
4) yarn 이란?
- npm의 대체제로 Facebook이 2016년에 출시한 패키지 매니저로, npm의 대체제로서 등장했습니다.
- npm에서 부족한 부분을 보완하여 편리한 기능과 보안 성능이 향상된 패키지 매니저입니다.
- yarn은 패키지를 다운로드 하는 과정에서 해당하는 패키지의 보안 검사를 수행합니다. 패키지 내부에 위험한 스크립트가 다운로드 되거나, 종속성 문제가 발생하는 것을 방지할 수 있습니다.
- yarn은 병렬 처리를 도입하여, 패키지 설치 속도가 npm보다 빠르다는 장점이 존재합니다. 즉, 패키지를 하나씩 설치하는 것이 아닌, 여러개를 동시에 설치할 수 있습니다.
5) package.json 이란?
package.json은 Node.js 프로젝트의 가장 핵심적인 파일이며, 프로젝트에 대한 정보와 설치한 패키지들의 버전을 관리할 때 사용하는 파일입니다.
- 동일한 패키지라도 버전에 따라 기능이 다르기 때문에 특정 버전을 설치하고 관리해야 할 때 필요합니다.
package.json파일에는 프로젝트명, 작성자, 라이센스 정보 등 일반적인 프로젝트의 메타 데이터 뿐만 아니라, 스크립트를 실행할 수 있는 필드 또한 포함되어 있습니다.
- npm과 yarn 모두 동일한
package.json 파일을 참조합니다.
6) package-lock.json과 yarn.lock 이란?
package-lock.json 또는 yarn.lock 파일은 package.json에서 정의한 패키지 외에도 node_modules에 들어있는 패키지들의 버전과 의존 관계가 상세하게 정의되어 있습니다.
- 만약,
node_modules 폴더가 존재하지 않더라도, 해당하는 lock 파일이 존재한다면 동일한 패키지 구조를 재설치 할 수 있습니다.
- npm으로 패키지를 설치, 수정, 삭제할 때마다 패키지들의 정확한 의존 관계를
package-lock.json파일에 저장합니다.
- yarn의 경우 패키지들의 상세한 의존 관계를
yarn.lock 파일에 저장합니다.
- 이러한
lock 파일들은 개발 환경 간에 일관된 패키지 버전을 보장해주므로, 버전 관리에 매우 중요한 역할을 합니다. 다른 개발자가 같은 프로젝트를 클론(Clone)하거나 복제했을 때, 동일한 의존성을 가지게 해줍니다.