Package
코드의 구성 요소를 묶어서 사용하기 쉽게 만든 소프트웨어 모듈의 집합
일반적으로 라이브러리나 실행파일을 포함
컴파일한 소프트웨어의 바이너리, 환경 설정에 관련한 정보, dependency에 관련한 정보를 갖는 코드의 배포 단위에 해당
Dependency
- package를 동작시키기 위한 다른 package
- dependency에 dependency를 설치해야하는 상황이 끊임없이 이어지는 경우 = dependency hell
사용자가 패키지를 관리하는 것이 불가능하므로, package가 자신의 dependency의 정보를 갖고 패키지 매니저가 설치를 도움
Package Manager
- 소프트웨어 패키지를 관리하고 설치, 업데이트, 제거 등을 쉽게 진행하도록 돕는 도구
- 패키지의 dependency 관리
- 패키지의 업데이트 관리
- 보안관리 authenticity, integrity
- 패키지 압축해제
- 설치 및 관리 과정의 단순화
- 예
- Python의 pip
- Node.js의 NPM, Yarn
- PHP의 Composer
- Java의 Maven
NPM
Node.js 생태계에서 가장 대중적으로 사용되는 패키지 매니저
- 모듈과 라이브러리를 찾기 쉬움
- JavaScript 패키지와 모듈을 관리하는 도구로, 패키지 설치 시 해당 패키지 및 의존성이 있는 패키지를 다운로드하고 node_modules 디렉토리에 설치
- 의존성 문제 : 종속성 관리의 문제가 발생할 수 있음
- 설치 및 의존성 해결속도가 느릴 수 있어 성능 이슈가 발생할 수 있음 -> 파일시스템에서 I/O작업을 많이 수행하고,패키지 다운시마다 해시를 계산하며 불필요한 패키지의 제거를 수행하지 않음
node_modules의 단점
- 큰 용량지니고 있어 많은 디스크 공간을 차지함
- node_modules내의 패키지들 끼리 서로 의존성을 갖음. 다른 버전의 패키지를 사용하는 프로젝틍서 의존성 충돌발생가능성 존재
의존성 검색의 비효율성
- 패키지 다운시 불필요한 파일 생성될 수 있음, 용량을 차지할 뿐만 아니라, 보안 및 성능의 문제를 야기 가능
Yarn
NPM과 유사하지만 더욱 빠르고 안정적임
- 병렬 설치 및 캐시 기능을 통한 동작 방식으로 NPM보다 더욱 빠른 설치 속도와 의존성 해결 속도를 제공
- 안정성 최소화 : 의존성 트리를 재현하므로 일관된 환경에서의 작업이 가능, 개발자가 겪는 의존성 충돌 문제 오류를 최소화 할 수 있음
- 파일 크기의 최소화 : 패키지 다운로드시 코드 축소(minificaiton)기능을 제공하여 로딩 시간의 단축을 도움
- npm 스크립트 실행시 동일한 스크립트를 반복실행하지 않고 캐시를 이용해서 더욱 빠르게 처리
Yarn Berry
yarn의 새로운 버전
- yarn과 달리 플러그인 기반 아키텍처를 사용해 구성 요소간의 통신을 향상
- 확장성 : 사용자가 쉽게 플러그인을 추가, 수정 및 사용이 가능해짐
- 속도 : 파일 시스템에서의 I/O작업을 최소화하고 메모리 내에서 모든 작업을 수행하므로 설치 및 의존성 해결속도가 더욱 빠름
- 의존성 : 의존성 해결 알고리즘의 개선을 통해 종속성트리를 최적화하여 최소한의 의존성을 갖고 불필요한 패키지를 배제
- workspaces 기능을 제공해 멀티패키지 프로젝트를 관리하기 쉽게 만듦
- yarn/cache 폴더에 의존성 정보를 .pnp.cjs파일에 의존성을 찾을 수 있는 정보를 기록
- .pnp.cjs파일을 이용해 디스크 I/O없이 어떤 패키지가 어떤 라이브러리에 의존하는지, 각 라이브러리는 어디에 위치하는지 확인 가능
'WEB' 카테고리의 다른 글
어떤 코드를 작성해야하나요? (0) | 2023.04.03 |
---|---|
[WEB 동작 방식] 브라우저에 웹 주소를 입력하면 어떤 일이 발생하나요? (0) | 2023.03.27 |
TypeScript를 왜 사용해야하나요? (0) | 2023.03.13 |
<a>, window.open() (0) | 2023.02.26 |
502 Bad Gateway (0) | 2023.02.24 |