프론트엔드 처음 시작했을 때는 근본부터 해보자 해서 npm을 사용하다 최근에 프로젝트 하면서 yarn을 쓰게 되면서 계속 yarn을 사용하고 있다.
근데 사실 왜 쓰는지는 정확히 몰랐어서 정리해 보려 한다.
노드 패키지 매니저(Node Package Manager)의 줄임말이다. npm은 노드를 설치할 때 자동으로 설치되는 기본 패키지 관리자이다.
yarn은 페이스북에서 개발한 패키지 관리자이다.
페이스북에서 yarn을 만들게된 이유는 일관성, 보안 및 성능에 문제가 생겨 직접 개발했다고 한다.
이러한 패키지 매니저를 사용하는 이유는 다른 사람들이 작성해서 올려둔 패키지를 편하게 내 프로젝트에 가져오기 위함이다.
우선 npm이던 yarn이던 내가 직접 모듈을 다 만들어서 프로젝트를 진행한다면 필요없지만 이건 불가능하다.
따라서 무조건 패키지 매니저를 통해 필요한 패키지들을 가져와서 써야한다.
package.json을 보면 패키지명 뒤에 버전이 붙어있다.
또한 ^ 이 표시가 있는데 이건 최신 버전을 가져오겠다 이말인데 이렇게 되면 같은 프로젝트 내에서 어떤 순서로 install을 했냐에 따라 서로 버전이 달라서 문제가 생길것이다.
이를 yarn은 yarn-lock으로 해결했고 이에 따라
package-lock 이 생겨서 해결되었다!
npm은 모듈들을 한번에 하나씩만 순차적으로 설치하기 때문에 느리다
하지만 yarn은 병렬적으로 설치를 진행하고 캐시를 사용하기 때문에 속도면에서 빠르다
이것도 현재에는 npm이랑 큰 속도차이는 없다고 한다.
npm은 패키지에 포함된 다른 패키지 코드를 실행하기 때문에 보안적으로 좋지 않다.
하지만 yarn은 필요한 yarn.lock에 있는 파일만을 설치하기 때문에 보안적으로 좋다.
npm도 최근에는 보안적인 문제를 많이 해결했다고 한다.
yarn classic 공식문서에서도 yarn의 장점으로
Ultra Fast.
Mega Secure.
Super Reliable.
이렇게 소개하고 있다.
현재에는 npm과 yarn의 차이가 그렇게 크진 않지만 그래도 yarn이 더 우세하다고 한다.
하지만 차이가 크지 않은건 npm과 yarn 1.x 버전이고 현재 yarn은 yarn-berry 처럼 계속해서 업데이트 되고 발전하고 있기 때문에 yarn을 사용하는게 더 좋다고 본다.
❓ 패키지들이 npm에 가장 빨리 업데이트 되기 때문에 npm 써야하는거 아닌가?
❗️ 라는 생각엔 최신 패키지를 바로 사용하는건 안정성 측면에서 좋지 않기 때문에 yarn까지 올라오고 안정성이 검증되고 나서 사용하는게 좋다 따라서 이 문제는 상관이 없다.
❓ 그럼 난 왜 아직 yarn 1.x 버전을 사용하지?
❗️ 그 이유는 yarn berry에는 기능들이 너무 많아서 좀 공부해보고 사용해야 할것같고. 또한 진행중인 프로젝트를 모노레포로 변경해야 하기 때문에 이때 사용해 보려고 한다.
최근에는 Pnpm같은 패키지 매니저도 나와서 많이 사용한다고 하는데 이게 나왔다고 yarn이 사라지는 것도 아니기 때문에 차근차근 하나씩 사용해 보며 성능을 직접 느껴보려 한다.
사실 yarn을 사용하는 가장 큰 이유는 성능, 보안 이런것도 아니고 react도 페이스북이 만들었기 때문에 페이스북이 만든 패키지 매니저를 사용하는게 내 기준 가장 큰 이유이다.
참고: https://classic.yarnpkg.com/lang/en/
https://yarnpkg.com/