npm, yarn 등 패키지 매니저 비교

binu·2023년 3월 11일
0
post-thumbnail
post-custom-banner

'패키지 매니저'부터 알아보자

'패키지 매니저'란?

프로젝트 종속성(~=패키지)을 관리하는 시스템을 말한다. 패키지 관리자는 패키지 설치 방법을 제공하고, 파일 시스템에서 패키지가 저장되는 위치를 관리하며 자체 패키지를 게시할 수 있는 기능을 제공한다. 이론적으로는 패키지 관리자의 도움 없이 패키지를 사용자가 직접 다운로드하고 저장할 수 있다.

그렇지만 우리는 도구를 쓰는 인간 😌

이론적으로는 패키지 관리자가 없어도 충분히 개발자가 필요한 패키지를 찾아 직접 설치할 수 있다. 전체 프로그램 중 필요한 패키지가 단 하나라면 굳이 패키지 관리자를 쓰지 않아도 될 것 같다는 생각도 들지만, 우선 패키지를 딱 하나만 쓸 일은 없을 것 같다. 무엇보다 패키지 설치는 아이폰의 앱스토어에서 카카오톡을 검색하여 '설치'버튼만 터치하면 알아서 딱 설치되는 것이 아니다...! 패키지 관리자를 사용하지 않는다면, 개발자는 아래 과정을 수동으로 처리해야 한다.

  • 올바른 패키지 JavaScript 파일을 모두 찾는다.
  • 알려진 취약점이 없는지 확인한다.
  • 다운로드하여 프로젝트의 올바른 위치에 배치한다.
  • 애플리케이션에 패키지를 포함하도록 코드를 작성한다.
  • 수십 또는 수백 개가 될 수 있는 모든 패키지의 하위 종속성에 대해 동일한 작업을 수행한다.
  • 패키지를 제거하려면 '모든 파일'을 다시 제거한다.

우리에게 '패키지 관리자'라는 선택지가 있는한, 우리는 이 감사한 도구를 효율적으로 사용해야겠다.


패키지 관리자 종류

대표적인 패키지 관리자로는 'npm''pnpm', 'yarn' 등이 있다.

npm 간단 정리

npm은 Node.js의 표준 패키지 관리자로, Node.js 런타임을 설치하면 자동으로 설치되는 JavaScript용 기본 패키지 관리자이다. 별도의 설치가 필요 없어 JS 입문자들도 가장 쉽게 접근할 수 있는 패키지 관리자이다.

pnpm 간단 정리

노드 애플리케이션에서 패키지 설치 프로세스를 단순화하기 위해 npm 위에 구축된 JavaScript용 '새로운' 패키지 관리자이다.

yarn 간단 정리

Facebook에서 개발한 JavaScript용 패키지 관리자이다. 안정적이면서도 빠르고, 안전하다는 점이 큰 특징이다.

npm vs. pnpm vs. yarn

  • npm
    • Node.js 런타임을 설치하면 기본적으로 설치되는 Node.js의 표준 패키지 매니저로 일단 '접근성'이 좋다.
    • 패키지 버전 잠금이 가능하여, 모든 패키지를 어느 환경에서든 항상 동일한 버전으로 설치할 수 있다. ("package-lock.json"파일을 사용해야 한다.)
    • 다른 패키지 관리자에 비하면 프로젝트에 직접적인 영향을 줄 수 있는 보안 취약점이 몇 가지 있다.
  • pnpm
    • npm에 비해 빠른 설치속도 + 디스크 공간 절약
    • 보안 Good _ Yarn처럼 체크섬을 사용하며 이 외에도 코드 실행 전, 코드의 무결성을 확인한다.
  • Yarn
    • 개발자의 사용경험 측면에서 타 패키지 관리자 대비 매력적인 부분이 있다.
      • 예시1) 터미널에서 명령어의 실행 결과가 예쁘게 나온다.
      • 예시2) 패키지 버전 잠금 yarn.lock을 지원하여, 프로젝트에서 의존하는 '모든 패키지'를 어느 환경에서든 '항상 동일한 버전'으로 설치할 수 있다.
    • 보안 Good _ Yarn.lock에 저장된 체크섬으로 보안을 높였고, 악성 패키지 설치를 방지하는 기능이 있다.

➡️ 지속적인 업데이트로 세 패키지 관리자의 성능에 아주 큰 차이는 없다. '각 패키지 관리자의 특장점과 설치 및 사용법 등을 고려하여 자신의 프로젝트 상황에 적합한 패키지 관리자를 사용하면 될 것 같다.'고 조심스럽게 나의 의견을 덧붙여본다.

(+) Yarn Berry 패키지 관리자

추가로 Yarn의 ver.2라고 볼 수 있는 "Yarn Berry"라는 패키지 관리자에 대해 짧게 알아보았다.
2020년 1월에 출시된 패키지 관리자로, 기존의 Yarn 내용에서 새로운 원칙을 더했다. "Plug'n'Play"라고 불리는 새로운 패키지 관리 방식을 도입하여 성능을 높였으나, 다른 패키지 관리자에 비하면 호환성이 매우 떨어져 혹평을 받기도 했다.



👶 일단 저는 npm을 쓸래요...!

패키지 관리자 종류에 대해 알아보면서 'Yarn'에도 조금 관심이 생겼다. 사실 'pnpm'도 디스크 공간을 절약할 수 있다는 점에서 관심이 생겼다. 이렇게 관심은 생겼으나, 아직 자바스크립트의 기본적이고 중요한 내용들 또는 리액트 등등 우선적으로 배워야할 내용이 많다. 조금 여유가 생겼을 때, 다른 패키지 관리자의 '사용법'에 대해서도 더 알아보고 적용해보면 좋을 것 같다는 생각이 든다.


참고한 글
📚 MDN:: Package management basics
📚 npm 공식문서
📚 pnpm 공식문서
📚 Yarn 공식문서
📚 npm vs. Yarn
📚 npm, yarn, pnpm 패키지 관리자 비교

profile
예비 프론트엔드 개발자, 아기 binu
post-custom-banner

1개의 댓글

comment-user-thumbnail
2023년 3월 26일

안녕하세요, 제로베이스 프론트엔드스쿨 멘토입니다. 작성해주신 글 잘 읽었고, 앞으로의 더 나은 블로깅을 응원하는 마음에서 작은 의견을 남기고 갑니다 :)

  • 전체적으로 글의 구성을 잘 잡아주시고, 각 소주제별로 소제목을 적절하게 잘 달아주셔서 좋았습니다.
  • 글이 전체적으로 작성자분만의 어투와 언어로 서술해주셨고, 중간중간에 생각이 많이 들어가있어서(예-무엇보다 패키지 설치는 아이폰의 앱스토어에서 카카오톡을 검색하여 '설치'버튼만 터치하면 알아서 딱 설치되는 것이 아니다...! ) 좋았습니다.
  • 패키지 매니저가 왜 필요한지에 대해 정확하게 이해하고 작성해주신 것 같습니다.
  • 다만, 면접관이나 평가자의 입장에서 이 글을 날카롭게 읽어본다면, 각각의 패키지 매니저에 대해서 다소 요약해서 작성해주신 것 같아서, 각 패키지 매니저들의 차이에 대해 정말 이해하였는가?(예-npm과 pnpm의 차이에 대해서 정말 잘 이해하고 있는가? npm과 yarn의 차이에 대해 알고있는가?)에 대한 Question이 생길 수 있을 것 같기는 합니다. 예를 들어, npm과 pnpm의 차이를 빠른 설치속도, 디스크 공간 절약이라고 작성해주셨는데, 조금만 구체적으로 들어가보자면 pnpm의 핵심은 패키지를 전역으로 관리하여 중복을 피하며, node_modules를 중첩 구조로 저장하지 않고 심볼릭 링크를 활용하여 depth를 단순화해서 효율적으로 저장해서, 디스크 활용 효율성을 높이게 되는 것입니다..! npm과 yarn의 차이도 현재 서술하신 것 외에 속도 측면 등 중요한 차이점이 있구요.
  • 따라서, 현재 이 글의 타이틀이 'npm, yarn 등 패키지 매니저 비교'인데요, 타이틀을 좀 더 '패키지 매니저란?'에 초점을 맞추고, '비교'는 살짝 가볍게만 다뤘으므로, 제목을 글에 맞춰서 조금 수정해주시는 것은 어떤지 제안 드립니다. 그리고 부가적으로 비교하신 패키지 매니저의 키워드를 정확하게 적어주는 것이 검색 용이성 등에 더 좋을 것 같습니다. 예) 패키지 매니저란? npm pnpm yarn yarn very 간단 정리
  • 결론에 내려주신 일단 npm을 쓴다는 것이 매우 공감이 되고 입문자로서 좋은 결론을 내리셨다고 생각합니다. 처음 학습하는 입장에서는 default 패키지 매니저인 npm이 래퍼런스가 많아서 검색도 잘 되고, 문제 해결하기에도 좋으며, 무엇보다 기본인 npm을 직접 써봐야, 다른 패키지 매니저들을 써봤을 때 npm과 어떤게 다르고 뭐가 좋은지를 비교해서 알 수 있기 때문입니다.

감사합니다 :)

답글 달기