June 18, 2023
소프트웨어 패키지의 설치, 업데이트, 구성과 제거를 관리하는 시스템이며, 운영 체제나 프로그래밍 언어에 따라 다르고, 해당 플랫폼에 최적화된 방식으로 동작한다. 패키지 저장소에서 소프트웨어 패키지를 다운로드하고 설치하는 데 사용되고, 개발자나 관리자가 패키지를 배포하고 유지 관리할 수 있는 공간이며 소프트웨어 구성 및 관리를 간편하게 만들어준다. 주로 사용하는 npm과 그 외 패키지 매니저들에 대해 작성해보았다.
Node.js의 패키지 매니저이며 세계에서 가장 큰 소프트웨어 레지스트리이다. 세계의 오픈소스 개발자들이 공유를 위해 npm을 사용하고, 많은 기관들이 프라이빗 개발을 관리하기 위해서도 npm을 사용한다. npm은 Node.js 생태계에서 가장 널리 사용되는 패키지 매니저이며 Node.js 앱 개발에 필요한 패키지의 설치, 관리 및 공유를 담당한다. npm은 Node.js 설치 시 함께 제공되고, cli를 통해 사용 가능하다. npm은 웹사이트, cli와 레지스트리로 구성되어 있다. 개발자는 npm을 사용해 다른 개발자가 만든 패키지를 설치하고 자신이 만든 패키지를 배포할 수 있다. npm은 패키지의 버전 관리, 종속성 해결, 패키지 검색 등의 기능을 제공해 개발자가 간편하게 패키지를 관리할 수 있게 돕는다.
npm은 패키지 설치 시 프로젝트의 package.json을 참조해 종속성을 자동으로 해결한다. package.json은 프로젝트의 정보와 필요한 패키지들의 목록을 정의하는 파일이다. 개발자는 npm install
또는 npm i
명령어를 통해 package.json에 명시된 모든 패키지를 설치할 수 있다.
npm은 전역적으로 설치할 수 있는 패키지와 프로젝트 내에서만 사용하는 패키지를 구분해 관리한다. 전역적으로 설치된 패키지는 커맨드 라인에서 실행할 수 있는 도구들이 주로 포함되고, 프로젝트 내에서만 사용하는 패키지는 ‘node_modules’ 디렉토리에 설치되고 프로젝트 내에서만 접근 가능하다.
node.js 프로젝트에서 패키지 의존성의 정확한 버전 보장을 위해 사용되는 파일이다. 이 파일은 npm을 통한 패키지 설치 시에 자동으로 생성되며, 패키지의 정확한 버전과 종속성 트리를 기록한다. package-lock.json은 패키지의 버전을 고정하는 데 도움이 된다. 이 파일에는 프로젝트에 설치된 패키지의 정확한 버전 및 해당 패키지가 의존하는 다른 패키지의 버전 정보가 포함되기 때문에 이 파일로 패키지를 설치하면 항상 동일 버전의 패키지가 설치된다. package-lock.json은 패키지 의존성 트리를 lock하는데 사용되기 때문에, 여러 개발자와 여러 환경에서 프로젝트 실행 시 일관성을 유지하는 데 도움이 된다. 그리고 패키지 설치 속도 향상을 위해 패키지를 미리 다운로드해서 캐시에 저장하기 때문에 이전에 설치한 패키지를 다시 다운로드할 필요가 없다. package-lock.json은 개발자가 직접 수정하면 안된다. 이 파일은 npm이 자동으로 생성하고 관리하므로, 패키지 버전 변경 시에는 package.json 을 수정해 npm에 의해 package-lock.json이 자동으로 갱신되도록 해야한다. package-lock.json은 프로젝트 디렉토리에 저장되며, 프로젝트를 구성하는 파일 중 하나로 버전 관리 시스템에 포함시킬 것을 권장한다. 이를 통해 개발자나 배포 환경이 달라도 동일한 패키지 버전을 사용할 수 있다.
페이스북에서 개발한 JavaScript 패키지 매니저이며, npm과 호환되고, 일부 기능을 개선하고 빌드 성능을 향상시키며, 멀티스레딩 다운로드, 재사용 가능한 캐시, 보안 체크 등의 기능을 강조한다. 나는 주로 npm을 사용하다 yarn을 사용해볼 일도 있었는데, grpc 통신에 yarn의 저버전만 지원되는 이슈가 있어 npm으로 다시 전환했던 경우도 있었다.
저장 공간을 효율적으로 관리하기 위해 설계된 패키지 매니저이다. 다른 패키지 매니저들과 다르게 각 프로젝트마다 패키지를 설치하지 않고 공유하는 방식으로 작동하는데 이로써 저장 공간의 사용량을 크게 줄일 수 있다.
npm이 JavaScript 패키지 관리의 표준 도구로 널리 사용되고 JavaScript 커뮤니티에서 가장 인기 있는 패키지 매니저라 npm을 주로 사용한다. 하지만 yarn과 pnpm도 인기가 꽤 있고 yarn은 npm과 거의 비슷한 기능을 제공하며 성능 면에서 향상되어 많이 사용되고 있고, npm 생태계와 호환되기 때문에 기존 npm 프로젝트에서도 쉽게 전환하여 사용할 수 있다. pnpm은 저장 공간을 효율적으로 관리하려고 설계되어 일부 사용되고 여러 프로젝트가 종속성을 공유할 때 pnpm이 저장 공간 사용량을 줄여줄 수도 있지만, 하지만 npm과 yarn에 비해 적게 사용된다.