FE/React
npm vs yarn
고감귤
2024. 12. 26. 23:03
라이브러리를 다운로드하려고 하다 보니, npm install 라이브러리 / yarn add 라이브러리 등 다양한 방법이 있었다.
그냥 명령어를 받아 적으면 문제가 발생할 수도 있을까? 하는 호기심으로 여러 정보를 찾아보았다.
여러가지 패키지 매니저를 사용하는 것은 아닌 것을 알 수 있었다. 골라야만 했다.
우선, pnpm은 우선순위에서 제외했다.
패키지 설치 속도는 상대적으로 빠르지만, npm이나 yarn에 비해 생태계가 작다는 점이 걱정이었다.
(웹 개발 경험이 많지 않아서 문제 발생 시 빠르게 해결 방법을 찾는 것이 중요하다고 판단했기 때문에, 좀 더 널리 사용되고 정보가 많은 도구를 선택하는 것이 좋겠다고 생각했다.)
결론은 yarn을 사용 중이다.
하지만 알아본 김에 아래에 비교해서 정리해두려고 한다.
특징 | npm | yarn |
속도 | 단일 쓰레드 설치로 다소 느림 | 병렬 설치로 더 빠름 |
패키지 버전 고정 | package-lock.json으로 관리 | yarn.lock으로 모든 환경에서 동일 보장 |
스크립트 실행 | 설치 중 스크립트 자동 실행 | 스크립트 실행을 제한할 수 있음 |
보안 | 스크립트 실행으로 인해 취약점 가능성 있음 | 더 엄격한 보안 정책 |
1. 속도
- npm: 단일 쓰레드로 설치를 진행하기 때문에 속도가 다소 느릴 수 있습니다. 그러나 최근 버전에서는 속도 최적화를 위한 다양한 개선이 이루어졌다.
- yarn: 병렬 설치를 지원하여 일반적으로 npm보다 더 빠르다.
- ⚠️ 참고: 다양한 글을 확인해본 결과, 상황에 따라 큰 차이가 나지 않는다고도 한다.
2. 패키지 버전 고정
- npm: package-lock.json 파일을 통해 의존성 버전을 관리한다.
- 유연한 버전 범위를 허용하기 때문에 의도치 않은 하위 호환성 문제가 발생할 수 있다.⚠️ 참고: 아래 예시에서 ^4.17.0은 4.x.x 범위 내에서 최신 버전을 설치하도록 설정된다.
{
"dependencies": {
"express": "^4.17.0"
}
}
- yarn: yarn.lock 파일을 통해 의존성과 하위 의존성까지 정확히 고정한다.
- 모든 환경에서 동일한 버전을 보장하기 때문에 예기치 않은 충돌을 방지할 수 있다.
3. 스크립트 실행 및 보안
- npm: 패키지 설치 시 package.json에 정의된 스크립트(예: preinstall, postinstall 등)를 자동 실행한다.
- 이는 편리하지만 보안 취약점을 초래할 가능성이 있다.
- 최근 npm은 스크립트 실행에 대한 사용자 확인 옵션을 추가하여 보안을 강화했다고 한다.
{ "scripts": { "preinstall": "echo 'Installing dependencies...'", "postinstall": "node setup.js" } }
- yarn
- yarn.lock 파일에 정의되지 않은 의존성은 설치되지 않으며, 무결성 검사를 통해 설치된 패키지가 원본과 동일한지 확인한다.
- 예기치 않은 의존성 추가(예: 의존성 체인 공격)도 방지한다.
[ 잘못된 내용이나, 알려주실 지점이 있다면 댓글 환영입니다 ㅎㅎ ]