본 글은 2020년에 작성된 글입니다.
node 개발 환경에서는 패키지 매니저로 npm 또는 yarn을 쓰곤 한다. 나는 그냥 npm이 편해서 npm을 써왔었는데, 한 프로젝트를 진행하다가 팀원들이 다 yarn을 쓰자고 하는 것이다. 그래서 yarn이 훨씬 좋은 무언가가 있는 것인가? 하는 생각이 들어서 한 번 찾아봤다.
우선 개발에 있어서 npm과 yarn, 이 둘의 차이는 크게 없다라고 보면 된다.
'yarn이 npm의 조금 더 개선된 버전이다'라는 것은 많이 들어봤을 것이다. 이 사실에서 우리는 두 가지를 유추할 수 있다. 첫 번째, npm이 먼저 나왔기 때문에 yarn보다 다운로드 수 및 점유율 측면에 있어서 뛰어날 것이다. 그리고 두 번째, yarn이 npm의 부족한 점들을 개선했기 때문에 사람들의 관심이 더 높을 것이다. 그럼 yarn은 npm의 어떤 부족한 점들을 개선했을까?
yarn이 npm보다 더 나은 점은 다음과 같이 요약할 수 있다.
1. 속도가 더 빠르다. (performance)
2. 보안성이 좋다. (security)
자, 그렇다면 이제 좀 더 자세히 각 패키지 매니저의 특징에 대하여 살펴보자.
자바스크립트 패키지 매니저 (Javascript Package Manager)
npm과 yarn은 자바스크립트 패키지 매니저이다.
여기서 패키지란 npm에 업로드된 노드 모듈을 말한다. 다양한 자바스크립트 프로그램이 패키지라는 이름으로 npm에 등록되어 있고, 패키지가 다른 패키지를 사용할 경우 의존 관계를 가지기도 한다. 이러한 패키지들을 사용하기 위해서는 다운로드, 설치, 업데이트, 의존성 관리, 제거 등 복잡한 상황들이 많이 생기는데 패키지 매니저는 이러한 과정들을 자동화하여 편리하고 안전하게 수행할 수 있도록 해준다. 그렇다면 npm과 yarn 각각이 가지고 있는 특징들로는 어떤 것들이 있을까?
npm (node package manager)
npm은 이름 그대로 '노드 패키지 매니저'이다. 런타임 동안 노드 환경에서 쓰이는 다양한 패키지들을 관리한다. npm은 npm registry라고 불리는 공개적인 패키지들로 구성된 데이터베이스를 가지고 있다.
Yarn
yarn은 npm의 부족한 부분들을 개선하기 위해 Facebook에서 개발되었다. Yarn은 npm이 사용하는 동일한 npm 구조에 의존한다. 따라서 패키지의 레지스트리에 대한 것은 바뀌지 않았고, 설치 절차가 바뀌었다고 생각하면 된다.
npm vs Yarn
그렇다면, 이 두 패키지 매니저의 차이점들로는 어떤 것들이 있을까?
Speed (Performance)
npm은 필수 단계를 순차적으로 수행하는 경향이 있어서 다음 패키지로 넘어가기 전에 각 패키지를 완전히 설치해야 한다고 한다. 하지만 Yarn은 동시에 여러 패키지들을 설치할 수 있기 때문에 속도 면에서 크게 향상된다는 것이다. 그런데 이 속도의 문제도 npm 5.0 아래의 버전으로 놓고 봤을 때의 문제이다. npm 5.0 버전은 그 아래 버전들보다 5배는 더 빠르다고 npm 개발자들이 언급하였다고 한다. 그리고 그 이후 npm V6.10.1과 yarn V1.17.3으로 install 속도 실험을 하였는데, yarn이 승리하였지만 그 차이는 아주 근소한 차이라고 한다. 이제는 거의 차이가 없어졌다고 볼 수 있는 문제인 것 같다.
Security
npm은 의존 관계를 가지는 다른 패키지들이 즉시 포함되도록 한다. 이런 부분이 더 편리하긴 한데 보안 문제에 있어 여러 취약점들을 불러올 수 있다고 한다. 이게 커지면 나중에는 더 큰 문제로 발전할 수도 있다는 것. 반면에 Yarn은 yarn.lock이나 package.json 파일에 있는 것들만 설치를 한다. 이런 방식은 모든 디바이스에 같은 패키지들을 설치하는 것을 보장하기 때문에 디바이스마다 다른 버전을 설치해서 발생할 수 있는 버그들을 많이 줄였다는 것이다. 이 보안성 문제가 npm과 yarn을 비교할 때 아주 중요한 측면이라고 할 수 있고, 이 부분은 계속 강화되고 있다고 하니 보안성을 따질 때는 yarn이 더 좋다고 말할 수 있다.
패키지 잠금 파일
npm은 package-lock.json
, yarn은 yarn.lock
파일을 패키지 잠금 파일로 사용한다. 잠금 파일도 자세히 살펴보면 차이점이 있겠지만, 이 부분은 크게 자세히 다루지는 않겠다.
이 외에도 다양한 차이점들이 있다. 명령어에도 조금씩 차이가 있는데, 패키지를 추가하고 싶을 때 npm은 npm install <package>
, yarn은 yarn add <package>
명령어를 사용한다. 패키지 제거에 있어서도 npm에서는 npm uninstall/rm <pacakge>
를 사용하지만, yarn은 yarn remove <package>
명령을 통해 수행한다.
npm과 Yarn, 무엇을 선택할까?
Yarn에도 단점이 있다. 디스크 용량을 좀 더 많이 잡아먹는 편이라고 한다. Yarn이 npm의 개선된 버전의 개념으로 나왔고, 속도나 보안성 측면에서 개선되었다고 할 수 있다. 하지만 npm도 개선된 버전이 계속 나오면서 속도는 yarn과 별반 차이가 없다고 볼 수 있다. npm도 yarn보다 더 오래되었기도 하고 효율성 측면에서 많은 장점들이 있으니 yarn이 출시되었다고 해서 배제할 수 있다고는 절대 볼 수 없을 것 같다.
결론은 !!! 두 패키지 모두 다른 방면에서 장점을 가지고 있으니 개발자 입맛대로 고르면 될 것 같다.
😎
참고 자료
'Web' 카테고리의 다른 글
내 프로젝트에 ESLint & Prettier 도입하기 (VSCode) (0) | 2021.12.06 |
---|---|
Webpack5 환경 설정하기 (0) | 2021.11.01 |
우리는 Webpack이 왜 필요할까? (0) | 2021.10.31 |