npm (Node Package Manager)은 Node.js 환경에서 JavaScript 패키지들을 설치하고 관리하는 패키지 매니저이다. Node.js를 사용하는 개발자들이 프로젝트에 필요한 외부 라이브러리와 모듈을 쉽게 설치하고 버전 관리할 수 있도록 도와준다.
이렇게 설치된 패키지는 node_modules
디렉토리에 저장되며, package.json
파일에 해당 패키지와 버전 정보가 기록된다. 이후 다른 개발자들이 같은 프로젝트를 실행할 때는 npm install
명령어를 사용하여 package.json
에 기록된 의존성들을 모두 설치할 수 있다.
JavaScript로 작성된 다양한 패키지들은 npm 레지스트리에 호스팅되어 있으며, 이 레지스트리에서 패키지를 검색하여 프로젝트에 설치할 수 있다. npm을 사용하면 라이브러리와 모듈의 의존성을 관리하여 프로젝트를 효율적으로 구성할 수 있으며, 다른 개발자들과 코드를 공유하고 재사용하는 데 매우 유용하다.
npm을 사용하려면 Node.js가 미리 설치되어 있어야 한다. Node.js를 설치하면 자동으로 npm도 함께 설치된다.
yarn은 Facebook에서 개발한 JavaScript 패키지 매니저로서, npm의 한계를 극복하고 성능과 보안을 향상시키기 위해 만들어졌다.
yarn을 통해 설치된 패키지 또한 node_modules
디렉토리에 저장되며, package.json
파일에 해당 패키지와 버전 정보가 기록된다. 이 아닌 npm install
yarn add
명령어를 사용하여 package.json
에 기록된 의존성들을 모두 설치할 수 있다.
yarn은 npm과 호환되도록 설계되었기 때문에 npm 레지스트리에 호스팅된 JavaScript 패키지를 사용하여 프로젝트에 필요한 라이브러리와 모듈을 설치할 수 있다.
Yarn을 사용하기 위해서는 Node.js와 npm이 미리 설치되어 있어야 하고, npm을 통해 yarn을 글로벌로 설치할 수 있다. 설치된 yarn을 사용하면 프로젝트를 npm 대신 yarn으로 관리할 수 있다.
yarn은 npm보다 더 빠르고 성능이 우수하다. yarn은 패키지 설치 시에 병렬로 다운로드하고 설치하여 npm보다 더 빠르게 작업을 완료할 수 있다.
npm은 패키지를 설치할 때 중복 패키지를 매번 다운로드하는 경향이 있어서 저장 공간과 대역폭을 낭비할 수 있다. 그러나 yarn은 패키지를 설치할 때 이전에 다운로드한 패키지를 캐싱하여 중복 다운로드를 방지한다.
npm은 의존 관계를 가지는 다른 패키지들이 즉시 포함되도록 한다. 이런 부분이 더 편리하긴 하지만 보안 문제에 있어 여러 취약점들을 불러올 수 있다고 한다. 반면에 yarn은 yarn.lock
이나 package.json
파일에 있는 것들만 설치를 한다.
초기에는 yarn이 npm보다 더 빠르고 성능이 우수했지만, npm도 업데이트를 지속하면서 현재에는 차이가 거의 없다고 볼 수 있다.
npm 5 버전 이후 package-lock.json
파일의 도입으로 해당 패키지들의 정확한 버전과 의존성을 기록하면서 중복 패키지 다운로드 문제와 의존성 관리 문제를 해결했다.
package.json
파일은 프로젝트의 기본적인 정보와 패키지 의존성 목록을 기록하는데 사용된다. 프로젝트에 사용되는 모든 패키지와 해당 버전, 그리고 스크립트 등의 정보가 담겨있다. 개발자가 직접 수정할 수 있으며, 새로운 패키지를 추가하거나 패키지 버전을 변경할 때 사용한다.
package-lock.json
파일은npm install
명령어를 실행했을 때 설치된 패키지들의 정확한 버전과 의존성을 기록하는 데 사용된다.
package-lock.json
파일은 자동으로 생성되며, npm이 패키지를 설치한 후 해당 패키지들의 의존성 트리를 잠근다. 의존성 트리가 잠긴다는 의미는,npm install
을 다시 실행해도 동일한 버전의 패키지가 설치된다는 것을 의미한다.
이 파일은 패키지의 정확한 버전을 기록하여 다른 개발자들이 같은 버전의 패키지를 사용하도록 보장한다.
현재 npm과 yarn은 거의 차이가 없다. 하지만 둘 다 사용해보지 않았다면, 가장 많은 사용자를 보유하고 있고 접근성이 매우 좋은 npm부터 사용해보는걸 추천한다.