Vue3을 공부하면서 npm이라는 것을 사용하다가 우연히 yarn이라는 것을 알게 되었다.
그렇다면 yarn은 무엇이며, npm이 있는데 왜 yarn이 생겼는지에 대해 궁금증도 생겼다.
그래서 이번 포스팅에서는 yarn에 대해서 알아보고자 한다.
■ yarn이란?
1. Facebook에서 2016년에 개발한 자바스크립트 패키니 매니저중 하나이다. npm(Node Package Manager)과 비슷한 역할을 수행하지만,
더 빠른 성능과 일관성 있는 의존성 버전 관리를 제공하여 개발자들에게 인기가 있다.
※ 의존성 버전 관리 맨 하단 설명 참고
2. 프로젝트에 필요한 외부 라이브러리나 모듈, 패키지들을 관리한다. 프로젝트의 package.json 파일에 기록된 의존성 정보를 바탕으로 패키지들을 설치하고 관리한다.
3. yarn add 명령을 사용하여 새로운 패키지를 프로젝트에 추가할 수 있다. 이때 의존성 관련 정보가 package.json 파일에 자동으로 추가된다.
4. yarn upgrade 명령을 사용하여 모든 패키지 또는 특정 패키지를 최신 버전으로 업데이트할 수 있다.
5. yarn remove 명령을 사용하여 불필요한 패키지를 프로젝트에서 제거할 수 있다. 이때 package.json 파일에서도 해당 패키지에 대한 의존성 정보가 자동으로 삭제된다.
6. yarn.lock 파일을 사용하여 프로젝트에 설치된 패키지의 정확한 버전을 기록한다.
이로 인해 모든 개발자가 동일한 의존성 버전을 사용하며, 의존성 충돌과 호환성 문제를 사전에 방지한다.
7. npm과 호환되기 때문에 기존 npm 프로젝트를 yarn으로 이전하거나 npm으로 작성된 패키지를 yarn을 사용하여 설치하는 것도 가능하다.
개발자들은 프로젝트 요구 사항과 개인적인 선호에 따라 npm과 yarn 중에서 선택하여 의존성을 효과적으로 관리할 수 있다.
■ yarn은 왜 만들어졌을까?
1. npm은 큰 규모의 프로젝트에서 패키지 설치가 느려지는 성능 문제가 있었다. 특히 의존성 트리를 해석하고 다운로드하는 과정에서 시간이 오래 걸리는 경우가 있었다.
yarn은 병렬 다운로드와 캐싱 기능을 도입하여 더 빠른 패키지 설치를 가능케 했다.
2. npm은 npm-shrinkwrap.json 파일을 사용하여 의존성 버전을 고정시키지만, 이 파일의 생성과 관리가 번거로웠다.
yarn은 yarn.lock 파일을 사용하여 의존성을 고정시키는 방식을 도입하여 모든 개발 환경에서 일관성 있는 패키지 버전을 유지할 수 있도록 하였다.
3. yarn은 npm과 마찬가지로 보안을 중요시하며, 패키지 설치 과정에서 악성 코드나 취약점이 있는 패키지를 탐지하여 사용자를 보호한다.
4. 의존성을 설치할 때 버전 간 충돌을 자동으로 해결해 주는 기능을 제공한다.
이를 통해 패키지 버전 간에 발생할 수 있는 일부 문제를 자동으로 처리해 주어 사용자의 부담을 줄여준다.
5. npm에는 없는 몇 가지 추가 기능을 제공한다. 예를 들어, yarn why 명령을 사용하여 특정 패키지가 설치된 이유를 확인할 수 있다.
■ yarn의 단점
1. 의존성을 해석하는 방식에서 문제가 발생할 수 있다.
의존성 트리를 해석하는 알고리즘이 복잡하고, npm과는 약간 다른 방식을 사용하기 때문에 종종 예상치 못한 의존성 충돌이 발생할 수 있다.
2. npm보다 더 많은 메모리를 사용하는 경향이 있다. 큰 규모의 프로젝트에서 의존성 트리를 구성하는 데 필요한 메모리 양이 증가할 수 있다.
3. npm에 비해 더 느린 시작 시간을 가지고 있습니다. 처음으로 yarn을 사용하는 프로젝트의 경우, 패키지 캐싱 등의 초기 작업으로 인해 초기 설치 시간이 더 오래 걸릴 수 있다.
4. npm이 더 오래된 패키지 매니저이며, 자바스크립트 생태계에서 널리 사용되고 있다.때로는 yarn이 npm 생태계의 일부 패키지와 호환성 문제를 겪을 수 있다.
5. JavaScript 생태계에서는 npm과 yarn을 모두 사용하는 경우가 많다.
프로젝트 팀 간에 패키지 매니저를 통일하기 어려울 수 있으며, 여러 패키지 매니저를 동시에 사용하면 일관성이 떨어질 수 있다.
■ yarn의 몇 가지 명령어
# 새로운 프로젝트를 시작할 때 사용하는 명령어로, package.json 파일을 생성한다. 프로젝트의 이름, 버전, 라이선스 등의 정보를 입력할 수 있다.
>yarn init
>yarn install # 파일에 명시된 의존성들을 설치한다.
>yarn # yarn install과 동일
# 새로운 패키지를 프로젝트에 추가한다. yarn add [package] 명령을 사용하면 패키지가 dependencies에,
yarn add [package] --dev 명령을 사용하면 패키지가 devDependencies에 추가된다.
>yarn add [package]
>yarn upgrade [package] # 특정 패키지를 최신 버전으로 업그레이드한다.
>yarn remove [package] # 프로젝트에서 해당 패키지를 제거한다. package.json 파일에서 의존성 정보도 함께 삭제된다.
# package.json 파일의 scripts 섹션에 등록된 사용자 정의 스크립트를 실행한다.
예를 들어, "scripts": { "start": "node index.js" }와 같이 정의된 스크립트는 yarn start 명령으로 실행할 수 있다.
>yarn run [script]
>yarn [script] # yarn run [script]와 동일
>yarn list # 프로젝트에 설치된 모든 패키지들을 나열한다.
>yarn outdated # 프로젝트에서 업그레이드할 수 있는 패키지들을 확인한다.
>yarn global add [package] # 전역으로 패키지를 설치한다. 전역으로 설치된 패키지는 특정 프로젝트가 아닌 시스템 전체에서 사용할 수 있다.
>yarn cache clean # 캐시를 지운다. 캐시를 지워서 새로운 패키지를 다시 다운로드하고 설치할 수 있다.
(참고) 의존성 버전 관리
프로젝트에 사용되는 외부 라이브러리, 프레임워크 또는 패키지와 같은 소프트웨어 구성 요소들 간의 관계를 관리하는 방법을 말한다.
대부분의 소프트웨어 프로젝트는 외부에서 개발된 라이브러리나 도구들을 활용한다. 이러한 외부 구성 요소들은 주로 다른 개발자들에 의해 관리되며 자주 업데이트된다.
하지만 이러한 업데이트가 항상 호환되지 않을 수 있기 때문에, 프로젝트는 특정 버전의 외부 구성 요소와 함께 잘 동작함을 보장해야 한다.
이때 의존성 버전 관리를 통해 관리된다.
1. 프로젝트가 특정 버전의 외부 구성 요소와 함께 안정적으로 동작하도록 보장한다.
2. 프로젝트의 개발 및 배포 단계에서 사용되는 외부 구성 요소들의 버전이 일관되게 유지되어, 동일한 환경에서 항상 동일한 결과를 얻을 수 있도록 한다.
3. 보안 취약점이나 버그가 발견될 경우, 해당 버전의 외부 구성 요소를 신속하게 업데이트하여 보완할 수 있다.
4. 여러 개발자들이 함께 작업하는 경우, 모든 개발자들이 동일한 버전의 외부 구성 요소를 사용하여 문제를 최소화할 수 있다.
'JavaScript' 카테고리의 다른 글
Axois가 만들어진 이유 및 장단점, 그 밖의 HTTP 클라이언트 (0) | 2023.07.31 |
---|---|
Node.js (18.16.1 LTS) 설치 방법 (0) | 2023.07.16 |