[Web] node.js 패키지 매니저 (npm, Yarn, pnpm, Bun) 비교하기
by 구설구설학교 팀 프로젝트에서 npm을 사용해서 라이브러리와 모듈을 설치해 보아서 npm이 라이브러리를 모아놓고, 설치할 수 있도록 하는 기능을 가지고 있다는 것을 기존에 알고 있었다.
하지만 인턴 활동을 하면서 Yarn으로 라이브러리를 설치하고 빌드를 하면서 npm이랑 Yarn이랑 무슨 차이가 있는지 궁금해졌다.
궁금하기는 했지만 귀찮아서 굳이 찾아보지는 않았는데,
이번에 PM으로 들어오신 분께서 npm과 Yarn이 무엇이고 둘이 무슨 차이를 가지고 있는지 아느냐는 질문을 하셨을 때 당황했다...
각 패키지 매니저 별로 빌드 된 파일의 크기랑 속도 등 여러가지가 다르다는 말씀을 해주셨다.
혹시 찾아보거나 알아볼 생각은 안했냐고 여쭤보시자 조금 많이 부끄러웠고, 이제라도 알아보고 정리하려고 한다.
npm (Node Package Manager)
- 주요 기능
- Node.js 생태계에서 패키지(모듈)를 관리하고 설치할 수 있는 패키지 매니저
- ~package.json~ 파일을 통해 프로젝트의 의존성, 스크립트 및 기타 메타데이터를 관리
- ~package-lock.json~ 파일을 통해 설치하는 라이브러리의 버전을 기록
Yarn (Yet Another Resource Negotiator)
- 주요 기능
- Facebook에서 개발한 npm의 대안
- npm처럼 ~package.json~ 파일을 이용하지만, 병렬적으로 패키지를 설치하기 때문에 npm보다 패키지 설치 속도가 빠름
- ~yarn.lock~ 파일을 생성하여 설치하는 라이브러리의 버전을 기록
pnpm (Performant npm)
- 주요 기능
- 패키지의 중복을 방지하는 방식으로 저장소를 관리
- ~pnpm store~ 에 각 패키지를 이름, 버전, 그리고 해시 값을 조합한 형태로 저장
- 동일한 버전의 패키지를 여러 프로젝트에서 의존하더라도 패키지 설치는 한 번만 이루어지며, 프로젝트 A의 ~node_modules~ 에 ~pnpm store~ 에 있는 패키지의 링크를 걸어 사용
- 동일한 패키지더라도 다른 버전이라면 ~pnpm store~에 모두 설치될 수 있음
- ~pnpm install~을 실행하면 설치하는 패키지와 동일한 해시 값의 패키지가 ~pnpm store~에 존재하는지 확인하고, 있으면 링크, 없으면 설치
- 디스크의 공간 및 설치 시간을 절약할 수 있음
도파 닉네임...
- 패키지의 중복을 방지하는 방식으로 저장소를 관리
Bun
- 주요 기능
마스코트가 귀여움- 설치 속도가 매우 빠르다. Zig 언어로 작성되었고 JavaScriptCore 엔진을 사용해서 빠르다고 하는데 둘다 무엇인지 몰라서 더 알아봐야 할듯..?
- pnpm처럼 중앙 디렉토리에 패키지를 설치하는 방식
- 최근에 출시 되어서 아직 검증이 더 필요
패키지 매니저 속도 비교
직접 하고 싶었지만, 실험 환경을 구성하는 것도 힘들 것 같고 Bun은 한 번도 써본 적이 없어서 추가적인 공부가 필요할 것 같아서 일단 검색해서 발견한 속도 비교 링크를 걸어둔다.
Bun과 pnpm이 몹시 빠르고, npm은 결과를 보기 민망할 정도다. 특히 아무것도 없는 초기 설치에서....
정리
npm을 사용하는 것이 진짜 느리구나라는 생각을 갖게 되었다.
현재(2024.10) npm과 Yarn을 사용한 프로젝트는 경험해 보았는데, pnpm과 Bun은 사용해 본 적이 없어서 한 번 사용하는 경험을 가지면 좋을 것 같다.
Bun의 경우에는 아직 나온지 얼마 안된 따끈따끈한 도구이다 보니 혼자서 하는 토이프로젝트에서 활용하면 좋을 것 같다.
'Dev > Web' 카테고리의 다른 글
[Web] URI, URL, URN (1) | 2024.10.22 |
---|---|
[Web] API 주소를 하드코딩하면 생기는 문제 (0) | 2024.09.03 |
블로그의 정보
공부중임
구설구설