npm 패키지 버전관리 틸드(~)와 캐럿(^)

npm
npm 패키지 버전관리 틸드(~)와 캐럿(^)

안녕하세요! 오늘은 npm 패키지 버전방식중 틸드(~)캐럿(^) 방식에 대해서 알아보도록 하겠습니다.


평소에 React, Next.js 등으로 코딩을 할때 자주보는 package.json 파일에는 틸드(~)와 캐럿(^) 방식이 많이 사용된것을 볼 수 있는데요, package.json 파일에서 라이브러리 버전들을 관리하면서 이 두 방식에 대해서 궁금증을 가지게 되었고, 알아보게 되었습니다.

package.json

package.json 파일에 명시된 틸드, 캐럿 버전 방식

1. 일반적인 소프트웨어 버저닝(Versioning) ℹ

일반적으로 소프트웨어 배포 후 그에 따른 버저닝을 하게되는데요, 버전 자리마다 각각 메이저, 마이너, 패치로 통칭됩니다.

소프트웨어 버저닝

메이저: 하위호환이 되지 않을정도의 변화 마이너: 하위호환이 되는 범위내에서 새로운 기능 추가 버전 패치: 하위호환이 되는 범위내에서 버그 등 Fix 버전

위에서 설명드린 소프트웨어 버저닝 용어들을 알아두면, 아래 글을 읽는데 도움이 될것 같습니다.

2. 틸드(~) 버저닝 🦐

틸드 버저닝은 패치 버전 내에서 버전이 업데이트 되는 방식을 말합니다.

예를들어, 아래와 같은 틸드 버전이 있을때, 해당하는 범위에 대해서 하위호환성이 가능합니다.


~1.3.0: >= 1.3.0 < 1.4.0 ~1.5.2: >= 1.5.2 < 1.6.0 ~2.2: >= 2.2 < 2.3

만약 내가 사용하는 React 패키지 버전이 ~17.2.0으로 되어있다면, 해당 React 버전은 17.2.0 ~ 17.3.0 버전까지 하위호환성이 가능하다는 의미입니다.

3. 캐럿(^) 버저닝 🐇

캐럿 버저닝은 마이너 버전 내에서 버전이 업데이트 되는 방식을 말합니다.

예를들어, 아래와 같은 캐럿 버전이 있을때, 해당하는 범위에 대해서 하위호환성이 가능합니다.


^1.3.0: >= 1.3.0 < 2.0.0 ^1.5.2: >= 1.5.2 < 2.0.0 ^2.2: >= 2.2.0 3.0.0

만약 내가 사용하는 Next 패키지 버전이 ^13.2.0으로 되어있다면, 해당 React 버전은 13.2.0 ~ 14.0.0 버전까지 하위호환성이 가능하다는 의미입니다.

그러나 캐럿 버저닝 방식에서는 한가지 특징이 있는데, 메이저 버전이 0으로 시작한다면 다르게 동작합니다. 소프트웨어 버저닝 규칙에서 메이저 버전이 0이라면 pre-release로 간주되기 때문이죠.


정식버전(1.0, 2.0 등등)에서는 하위호환성을 고려한 배포가 일어나는 반면, 베타 버전에서는 하위호환성이 되지않는 API 변경이 수시로 일어날 수 있기에 틸드 버저닝으로 작동됩니다.


예를들어, 아래와 같습니다.

^0.3.0: >= 0.3.0 < 0.4.0 ^0.5.2: >= 0.5.2 < 0.6.0 ^0.2: >= 0.2.0 0.3.0

4. 마치며 📌

평소에 틸드와 캐럿 버저닝에 대해서 그냥 보기만 했는데, 이렇게 한번 정리해보고 나니까 머리속에 잘 들어오는거 같네요. 앞으로는 라이브러리 버전에 대해서 깊게 생각 해볼거같네요.


많은분들께 도움이 되었다면 좋겠습니다. 긴 글 읽어주셔서 감사합니다!

자취생활 두달차, 느낀점을 정리해보자.
이전글

자취생활 두달차, 느낀점을 정리해보자.

두달동안 자취생활을 하면서 이것저것 느낀점들 및 생각을 정리한 글입니다.

Forward Proxy와 Reverse Proxy 정리
다음글

Forward Proxy와 Reverse Proxy 정리

프록시 서버의 개념과 포워드 프록시, 리버스 프록시에 대해서 정리해봅시다.