서론
javaScript 프로젝트를 관리하고 실행하기 위해 사용되는 도구들이 있다.
- npm (Node Package Manager)
- pnpm (performant npm)
- npx
- yarn
이 도구들은 각각의 기능과 용도를 가지고 있어서 프로젝트 개발 및 유지보수하기 좋게 만들어 준다.

뭐가 이렇게 많아.. 언제 쓰는 건데?
항상 사용하지만 뭐가 뭔지.. 언제 어떻게 사용하는지 찾는데 어려워서 정리해서 작성해 봤습니다.
수정해야 할 부분은 언제든지 댓글 부탁드립니다..
이 도구들이 유지보수를 어떻게 도와주는지... 어떠한 상황에 사용하는지 알아보자
도구들은 프로젝트 개발 및 유지보수를 어떻게 도와주는가
1. 의존성 관리
패키지 매니저인 npm이나 yarn을 사용하면 프로젝트에 필요한 의존성을 명시하고 쉽게 설치할 수 있다. 새로운 개발자가 프로젝트를 가져와도 의존성 문제를 빠르게 해결할 수 있다.
여기서 의존성이란 다른 코드나 라이브러리 등이 프로젝트에 필요한 요소로서, 프로젝트가 올바르게 동작하고 기능을 수행하기 위해서는 해당 의존성이 해결되어야 한다.
이러한 의존성은 보통 외부 패키지 형태로 프로젝트에 통합되며, 버전 충돌을 최소화할 수 있다.
( ex. package.json )
2. 버전 관리
프로젝트의 라이브러리나 모듈은 지속적으로 업데이트된다. 패키지 매니저는 각 패키지의 버전을 명시하고, 프로젝트에 적용된 버전을 추적한다. 이를 통해 특정 버전에서 발생하는 문제를 파악하고, 안정적인 업데이트를 수행할 수 있다.
3. 초기 환경 설정 및 빌드 스크립트
패키지 매니저를 이용해서 초기 프로젝트 설정을 간편하게 수행할 수 있다. 또한 npm 또는 yarn을 사용해서 빌드 스크립트를 구성하면 개발 환경을 쉽게 설정하고, 빌드 및 배포 프로세스를 효율적으로 관리할 수 있다.
4. 일회성 명령어 실행
특정한 작업을 위해 다양한 도구를 사용해야 한다. - npx를 통해 로컬에 설치하지 않고도 필요한 도구를 일회성으로 실행할 수 있다. 예를 들어 프로젝트에 특정 테스트 도구가 필요한 경우, npx를 사용하여 해당하는 도구를 간편하게 실행할 수 있다.
5. 성능 및 안정성 개선
프로젝트의 성능이나 안정성을 개선해야 한다. - yarn은 npm 보다 빠른 의존성 성치 속도와 캐시 기능을 제공하여 프로젝트의 빌드 및 실행 속도를 향상시킬 수 있다. 또한, 안정성 측면에서도 yarn은 예측 가능한 의존성 해결을 제공한다.
이런 방식으로 패키지 매니저와 일회성 실행 도구를 활용하면 프로젝트의 개발과 유지보수를 효율적으로 진행할 수 있다.
npm, pnpm, npx, yarn 장단점과 차이점
- npm
장점
- node.js에 내장되어 있기 때문에 추가적인 설치가 필요하지 않다.
- 사용자들이 만들어 놓은 다양한 모듈이 있기에 이것들을 쉽게 사용할 수 있다.
단점
- npm이 패키지 매니저의 시초와 같기에 생태계가 굉장히 풍부하다.
- node_modules 폴더 크기가 커서 불필요 프로젝트 삭제할 때마다 시간이 오래 걸린다.
- npm의 경우 패키지들을 서로 의존하도록 하기 때문에 하나의 문제가 발생한다면 다른 것들에도 문제가 발생할 수 있다. (이 부분을 관리하기 위해 package.json이 필요하다.) - pnpm
장점
- 다른 javaScript 패키지 매니저에 비해 최대 2배 이상 빠르다. (dependency마다 설치가 병렬적으로 수행되기 때문)
- 프로젝트별로 node_modules에 매번 패키지를 설치했던 것과는 달리 global 저장소에 패키지를 한 번만 저장함으로써 저장 공간을 효율적으로 절약할 수 있다. (중복 패키지를 공유하여 효율적으로 디스크 공간을 관리하고 빠르게 패키지를 설치)
- npm을 사용했던 개발자들이 쉽게 적응 할 수 있다.
- 모노레포 지원
- npm 9.4v 부터 Isolated node_modules 모듈 지원
단점
- 주의할 점으로 특정 패키지를 한 번만 설치하기 때문에 프로젝트별로 연결을 해놓으면 호환 문제가 발생할 수 있다. 그렇기에 프로젝트끼리 호환 문제가 발생하지 않도록 버전 관리를 반드시 해야 한다. - npx
장점
- npx를 통해 프로젝트에 필요한 도구를 쉽게 실행할 수 있다.
- 로컬에 설치하지 않고도 일회성으로 패키지를 실행할 수 있는 강력한 도구
- 패키지를 설치하고 업데이트를 하지 않더라도, npm 레지스트리에 올라가 있는 최신 버전을 실행시키고 설치만 시키면 끝이다. (항상 최신 버전을 사용할 수 있다.)
- 필요할 때만 실행하므로, 프로젝트 간에 패키지 충돌을 피할 수 있다.
단점
- 인터넷 연결이 필요하다. ( 캐시에 이미 해당 명령이나 스크립트가 있는 경우 한정적으로 오프라인 가능 )
- 내부적으로 캐시를 사용하고, 이것을 관리하기 위한 추가적인 과정이 필요하다. 때로는 캐시가 문제를 일으킬 수 있다.
- 보안 및 버전관리에 대한 주의 필요 - yarn
장점
- lock 파일은 package.json 에서 사용하는 버전 숫자들의 혼란을 줄여준다.
- 보안, npm의 보안 문제를 해결하고 보다 안정성을 보장하고 있다.
- 빠른 속도 여러 개의 패키지를 순차적으로 설치하는 것이 아니라 병렬적으로 설치를 해주기 때문에 속도 측면에서 괜찮다.
단점
- yarn.lock 파일의 버전관리로 인해 기존 모듈이 최신화로 업데이트될 수 있으며 이 경우 하위 호환을 보장하지 않는 모듈의 경우 에러가 날 수 있다.
- 과거에 npm의 2배 빠른 속도였지만 최근 버전의 npm에서도 성능이 개선되어 성능 차이가 크게 나지 않을 수 있다.
- npm 보다 다운로드 크기가 디스크 공간을 더 많이 차지할 수 있다.
- 더 많은 메모리를 사용할 수 있다. 메모리가 제한된 환경에서는 주의가 필요하다.
각각의 도구들이 어떤 상황에서 사용되는가 ( 예시 )
npm
프로젝트 유형 : 웹 애플리케이션 개발, 서버개발, CLI 도구 등 다양한 유형의 프로젝트에 사용
예시 : Express.js 기반의 웹 개발 또는 Node.js 기반의 서버 개발 프로젝트
pnpm
프로젝트 유형 : 여러 프로젝트 간에 의존성을 공유하고자 하는 경우 또는 디스크 공간을 효율적으로 사용하고자 하는 프로젝트에서 사용
예시 : 다수의 마이크로서비스 프로젝트나 모노레포 프로젝트에서 공통된 의존성을 관리하는 경우
npx
프로젝트 유형 : 특정 스크립트나 도구를 일회성으로 실행해야 하는 경우
예시 :
- 새로운 React 애플리케이션을 생성하거나, 특정 빌드 도구를 임시로 사용하는 상황,
- gist-based scripts를 실행할 경우
- 특정 노드 버전의 스크립트를 실행할 경우
yarn
프로젝트 유형 : 대규모의 웹 애플리케이션 또는 모듈화 된 프로젝트에서 사용
예시 : React, Vue 또는 Angular 등의 프론트엔드 프레임워크를 사용하는 대규모 프로젝트
이 예시들은 각 도구의 특징을 강조한 것. 꼭 이런 상황에서만 사용하는 것은 아니고 프로젝트 성격과 팀의 선호도에 따라 다양한 상황에서 이 도구들이 혼합해서 사용될 수 있다.
pnpm, yarn, npm 기능 비교
결론
npm - 패키지 관리에 중점
pnpm - 프로젝트 디스크 공간을 효율적으로 관리
npx - 일회성 실행을 간편하게 만들어 준다.
yarn - 속도와 안정성면에서 향상된다.
프로젝트의 규모, 팀의 구성, 그리고 개발 환경을 고려하여 통일된 도구와 패턴을 사용하는 것이 중요하다.
이러한 도구들을 적절히 조합하여 프로젝트를 개발하면 더 효율적인 작업이 가능하다.
하지만 어떤 상황에서도 절대로 최고의 도구는 없다.
특정 상황에 맞게 적절한 도구와 관행을 선택하고 적용하는 것이 핵심이다.
참고:
https://pnpm.io/ko/feature-comparison
'STUDY 📒 > npm' 카테고리의 다른 글
npm 패키지 지역 설치 & 전역 설치 (0) | 2023.12.08 |
---|