Node.js 환경에서 패키지를 관리할 때 대표적으로 npm과 yarn을 사용한다.
매번 npm과 yarn 중 어느 것을 사용해야 할지 고민을 하게 된다.
이번에도 프로젝트를 위해 고민을 하다 npm과 yarn에 대해 공부해 보기로 했다.
둘의 차이점은 무엇인지 그리고 어떤 장점이 있는지 알아보겠다.
npm과 yarn?
npm과 yarn은 Node.js의 패키지 매니저이다.
개발자들이 JavaScript로 만든 패키지를 npm에 올리면 npm과 yarn과 같은 패키지 관리 매니저를 통해 설치할 수 있다.
또한, CLI(Command-Line Interface)을 통해 패키지를 설치하거나 삭제, 버전 관리 등을 할 수 있다.
패키지란?
패키지는 특정 기능이나 목적을 위한 코드 묶음을 말한다.
모듈화와 코드 재사용성을 증가시켜 의존성 관리를 용이하게 한다.
특히 패키지를 사용할 때 다운로드, 업데이트, 의존성 관리 등 복잡한 상황이 생길 수 있는데,
패키지 매니저를 이용하면 이러한 과정을 자동화하여 편리하게 만들어준다.
npm이란?
npm(Node Package Manager)은 Node.js의 기본 패키지 매니저이다.
npm을 통해 수많은 Node.js 패키지를 만들고, 공유할 수 있다.
또한, 쉽게 필요한 라이브러리를 프로젝트에 추가하거나 제거할 수 있다.
yarn이란?
yarn은 npm과 기능적으로 유사한 패키지 매니저이다.
Facebook에서 React와 같은 프로젝트를 진행하며 겪었던 어려움을 해결하기 위해 개발되었다.
npm보다 속도나 안정성 측면에서 향상된 모습을 보여준다.
둘의 차이점은?
1. CLI(Command Line Interface) 사용성
npm과 yarn은 명령어가 서로 다르다.
기본적으로 yarn의 명령문이 npm보다 조금 더 간결하고 이해하기 쉽다.
명령어는 작은 차이지만, 사용자에게는 중요한 판단 기준이 될 수 있다.
2. 속도
npm과 yarn은 패키지 설치 프로세스를 처리하는 방식이 다르다.
npm은 패키지를 하나씩 순차적으로 설치하지만, yarn은 여러 패키지를 동시에 가져와 설치한다.
즉, npm은 직렬 설치, yarn은 병렬 설치를 한다고 보면 된다.
따라서 설치 속도 측면에서 yarn이 npm보다 더 빠르다.
(하지만 npm의 꾸준한 업데이트로 인해 차이는 근소하다고 한다.)
3. 보안
npm의 경우 의존 관계를 가지는 다른 패키지를 자동으로 실행한다.
이는 보안 문제에 있어 여러 문제를 일으킬 수 있다.
반면, yarn의 경우 yarn.lock이나 package.json 파일에 있는 것만 설치를 한다.
이 방식은 사용하는 모든 디바이스에 같은 패키지를 설치하는 것을 보장하기 때문에 버전에 차이로 인한 버그를 방지할 수 있다.
4. Lock 파일
package.json 파일에 등록된 패키지 버전은 범위로 지정된 경우가 많다.
이 경우 package.json 파일만 사용한다면 npm install을 하는 그 순간의 최신 버전을 설치하게 된다.
즉, 개발자들끼리 동일한 개발 환경을 구축할 수 없는 것이다.
이때, lock 파일을 통해 버전을 명시할 수 있다.
yarn의 경우 yarn.lock 파일을 패키지 설치 과정에서 자동으로 생성하고 업데이트한다.
프로젝트에서 사용하는 패키지의 정확한 버전 정보가 포함되어 있어
동일한 yarn.lock 파일을 사용하는 개발자들은 동일한 버전의 패키지를 설치할 수 있다.
npm의 경우 초기에 lock 파일에 대한 관리가 잘 되지 않았다.
이로 인해 동일한 패키지 버전으로 작업하는데 어려움이 있었다.
여러 시도 끝에 npm v5.0에 package-lock.json이라는 새로운 패키지가 등장했다.
이제 npm도 패키지의 버전 관리를 보장해 줄 수 있게 되었다.
결론은?
npm과 yarn은 많은 변화를 겪어오면서 진화해 왔다.
yarn은 npm의 부족한 부분을 개선하면서 등장했지만, 그 간극을 npm이 업데이트를 통해 줄였다.
이번 작성을 통해 둘의 차이점과 장점을 알 수 있었지만, 아직 확실하게 이걸 써야겠다는 생각은 들지 않는다.
주변 사람들에게 왜 npm을 선택했는지, 왜 yarn을 선택했는지 물어보며 나만의 기준을 적립해 나가야겠다.
'ETC' 카테고리의 다른 글
axios (0) | 2023.07.05 |
---|---|
webpack의 babel-loader와 ts-loader (0) | 2023.07.01 |
Babel (0) | 2023.06.29 |
웹팩(Webpack) (0) | 2023.06.28 |
오픈소스 참여 도전하기 (0) | 2022.07.28 |
댓글