자바스크립트 패키지 매니저

JJ·2023년 6월 20일
0

자바스크립트

목록 보기
5/5
post-thumbnail

패키지 매니저

오늘은 패키지 매니저에 대해 알아보려고 한다.

패키지 매니저(혹은 패키지 관리자)는 컴퓨터의 운영 체제를 위해 일정한 방식으로 컴퓨터 프로그램의 설치, 업그레이드, 구성, 제거 과정을 자동화하는 소프트웨어 도구들의 모임이다.

wikipedia

위키피디아의 설명에도 나와있듯이 패키지 매니저를 통해 패키지를 다루게 된다. 우리는 패키지 매니저를 통해 완성된 프로그램 혹은 프로그래밍을 도와줄 라이브러리를 다룰 수 있다. 여기서 패키지는 라이브러리와 유사한 개념으로, 라이브러리는 코드를 작성하기 위해 사용되는 코드의 묶음이고, 패키지는 코드의 배포를 위해 사용되는 코드의 묶음이다. 따라서, 패키지에는 일반적으로 라이브러리와 실행 파일을 포함한다고 한다.

즉, 다시 말해서 패키지는 다음과 같은 정보를 담고 있다.

  1. 컴파일된 소프트웨어의 binary
  2. 환경 설정(configuration) 정보
  3. 의존성(dependency) 정보

여기서, 의존성이란 대부분의 패키지는 동작을 위해 다른 패키지가 필요하고, 이러한 실행을 위해 필요한 다른 패키지를 dependency라고 부른다. 때문에, 대부분의 패키지를 사용하려면 이와 관련된 또 다른 패키지가 필요하다는 의미이다. 만약, 이러한 부분을 일일히 수동으로 설치하려면 매우 오랜 시간이 걸리고, 심지어 하나라도 누락한다면 원하는 대로 동작하지 않을수도 있다. 패키지 매니저는 이러한 과정을 모두 처리해준다. 예시를 들자면, 우리가 프로그래밍을 진행하면서, 만약 터미널에 npm install styled-components 라고 입력하여 명령어를 실행하면 styled-components 만 설치되는 것이 아니라, 만약 이와 관련된 dependency가 없다면 관련된 패키지도 함께 설치해주는 것이다. 따라서, 위의 과정을 저 한줄의 명령어만으로 처리하게 되어 매우 편리해진다.

패키지 매니저는 개발 언어에 따라 그 종류가 다르다고 하며, 자바스크립트의 경우 npm, pnpm, yarn, yarn berry 등이 있다.

package.json vs package-lock.json

패키지 매니저와 그 사용법에 대해 알아보기에 앞서 이 둘의 차이점을 짚고 넘어가려고 한다.

일반적으로, 처음 프로젝트를 시작하고 생성하는 package.json의 경우, 패키지에 대한 버전의 명시를 version range를 사용한다고 한다. 즉, 범위를 지정하여 그 버전을 나타내는데, package-lock.json의 경우 패키지의 정확한 버전을 명시해주어, 서로 다른 환경(npm 버전이 다른 경우 등)에서 같은 프로젝트를 실행하는 경우(git 으로 협업을 하는 경우) 혹시 모를 에러나 여러 문제를 방지하기 위험을 방지한다고 한다.

npm (Node Package Manager)

자바스크립트의 대표적인 패키지 매니저로 node.js를 설치하게 되면, 함께 설치되는 패키지 매니저로, 가장 많은 수의 개발자들이 사용하는 패키지 매니저이다.

사용법

시작하기

npm init

우리가 local에서 git을 사용하기 위해 입력하는 명령어처럼 npm 도 처음 시작할 때, 위의 명령어와 함께 시작해 주어야 한다.

위의 명령어를 입력하면, 몇가지 질문이 나오며, 해당 질문들에 답변을 완료하면, 해당 답변을 토대로 package.json 파일이 만들어진다.

설치 & 삭제

// 설치
npm install <package_name>
npm i <package_name> // i 만 적어줘도 위와 동일하게 작동한다.
  
// 삭제
npm uninstall <package_name>

설치하고자 하는 패키지명이나 라이브러리명을 넣어서 위의 명령어를 실행하면, 해당 패키지 혹은 라이브러리가 디렉토리 폴더에 설치되고, package.json 에도 등록된다.

삭제도 동일하게, 삭제하고자 하는 패키지나 라이브러리의 이름을 넣어서 위의 명령어를 실행하면, 삭제됨과 동시에 package.json 에서도 제거된다.

이외에도 수많은 npm 명령어가 있으며, 이를 확인하는 방법은 터미널에 npm만 입력하면 모든 명령어가 나온다.

npm ci

ci는 clean install의 줄임말로, 일반적으로 github repo에서 남의 프로젝트를 clone해서 오는 경우, npm install 을 통해 package.json에 명시된 dependency를 모두 설치하는데, 위의 명령어는 package-lock.json에 명시된 정확한 버전의 패키지를 설치해서 혹시 모를 위험을 방지할 수 있다고 한다. 때문에, 되도록이면, github repo에 프로젝트를 커밋하는 경우에는 package-lock.json을 포함시키는 것이 좋다고 한다.

yarn

Facebook에서 만든 자바스크립트 패키지 매니저이다.

시작하기

yarn init

npm 과 동일하게 초기화 과정은 앞에만 바뀐것처럼 동일하다.

설치 & 삭제

패키지를 설치하는 과정은 npm과 다르므로, 유의해야한다.

// 의존성 모듈 설치 (from package.json)
yarn install
// 패키지 설치
yarn add <package_name>
// 패키지 삭제
yarn remove <package_name>

npm 에서는 npm install 을 통해 package.json에 존재하는 모든 의존성 모듈을 설치한것과 동일하게 yarn 에서도 사용이 가능하지만, 새로운 패키지나 라이브러리를 설치하는 경우 install이 아니라 add라는 명령어를 통해 사용해야 한다. (뭔가... 보다 직관적인 느낌)

아무래도 후발주자인 만큼 yarn과 npm은 그 작동방식에서 차이가 있다고 한다. package.json 으로부터 의존성 모듈을 일괄 설치하는 경우를 가정했을 때, npm은 의존성 모듈을 하나씩 설치하지만, yarn의 경우 한번에 불러와서 동시에 설치를 진행한다고 하며, 속도도 yarn이 좀 더 빠르다고 한다.

글을 마치며

이외에도, facebook으로부터 독립한 yarn 개발진이 출시한 yarn berry나 2017년에 소개된 plug & play 방식의 pnpm이 있지만, 2023년도 기준 stackoverflow에서 설문한 결과를 보면 아직까지는 npm을 49%로 가장 많이 사용하며, 그 뒤를 yarn이 22%로 뒤쫓는 것을 알 수 있기에, 이번 글에서는 따로 다루지 않았다. 물론, 응답 통계는 패키지 매니저이외에도 개발에 필요한 여러 도구들에 대한 설문이지만, 그 점유율이 유의미하다고 생각된다.

profile
한줄 한줄

0개의 댓글