Package Manager란 패키지를 손쉽게 다루는 작업을 안전하고 편리하게 사용 하기 위한 툴이다.
다른 사람들이 만들어준 코드를 다운받거나, 자신의 코드를 배포하여 다른사람이 쓸 수 있도록 한다.
npm 이나 yarn 에 업로드 된 Node.js 모듈을 패키지라고 한다.
Node.js에서 대표적으로 사용되는 패키지 매니저에는 npm과 yarn이 있다.
자바스크립트 에서 사용할 수 있는 패키지 모듈이다. npm을 통해 라이브러리 쉽게
사용 할 수 있고, 버전 관리와 제거가 용이하다.
누구나 새로운 패키지를 등록할 수 있다.npm(Node Package Manager)은 노드에서
뿐만아니라 프론트엔드에서만 사용 가능한 자바스크립트 패키지들도 등록되어있다.
yarn은 npm 대체제로 FaceBook이 출시한 패키지 매니저이다.
npm에서 부족한 부분을 보안하여 편리한 기능이 추가되었고,
더욱 빠른 속도로 패키지를 관리 할 수 있다.
패키지매니저 npm, yarn을 동시에 사용할 경우 버전을 수정할 떄
오류가 발생할 수도 있다. 충돌 발생 가능성이 있기 때문에 한가지만 사용하는 것이 좋다.
Package.json은 설치한 패키지들의 버전을 관리 할 때 사용하는 파일이다.
동일한 패키지를 사용하더라도 버전 별로 기능을 다르게 사용가능 특정한 버전을 설치할떄 필요하다.
패키지 관리 외에도 프로젝트명, 작성자, 라이센스 정보등 다양한 메타 데이터들을 기록 할 수 있다.
npm과 yarn 모두 동일한 package.json 파일 참조한다.

이런식으로 되어있다.
package-lock.json은 파일에서 정의한 패키지 외에도 node_modules에 들어있는
패키지들의 버전과 의존관계가 기록되어 있다. npm으로 패키지를 설치, 수정, 삭제할 때마다
패키지들의 의존관계를 저장한다.
node_modules는 package.json 파일 내용 기반으로 npm install 명령어를 통해
설치된 모둘 파일이 모여있는 곳이다. package.json에 설정된 모듈과 해당 모듈이 참고하고 있는
또 다른 모듈도 함께 설치된다.
사용자의 환경에 맞는 파일들이 설치되기 때문에
다른곳에 공유하거나 배포할때 포함시키면 안된다. (git ignore)
패키지 매니저를 사용하면 종속성을 관리하고 패키지를 관리하기 좋다! yarn과 npm 중에 무엇을 선택해야 할지는 개인의 취향, 성능(패키지 설치 속도), 커뮤니티에 따라 다르다고 하는데 yarn이 더 빠르고 보안적으로 좋으니까 좋지않나? 싶다.