Semantic Versioning(유의적 버전)

업데이트:

1. Semantic Versioning (유의적 버전)

node.js npm을 사용하면서 버전관리에 대해 깊이는 아니더라도 조금은 알아야 할 것 같아서 남겨봅니다!

1.1 Semantic Version ?

버전 명의 작성 방식에 관한 기준이 패키지마다 다른 것을 해결하기 위해 고안되었습니다.
유의적 버전은 주요버전(major), 작은버전(minor), 패치버전(patch) 으로 버전을 관리합니다. 쉽게 X,Y,Z 라고 생각하면 됩니다.

1.1.1 주요버전(major)

( X, y, z )
기존 버전과 하위호환되지 않는 변화가 있을 땐 주버전 X를 올린다. 주버전이 오를땐 반드시 부버전과 패치버전이 0으로 초기화 되어야 합니다.

1.1.2 부버전(minor)

( x, Y, z )
기존 버전과 호환되는 새로운 기능을 추가할 때는 반드시 부버전 Y를 올린다. 내부 비공개 코드 및 새로운 기능이 대폭 추가되거나 개선사항이 있을 때에도 올릴 수 있다. 부버전이 오르면 패치버전은 반드시 0으로 초기화 해야한다.

1.1.3 패치버전(patch)

( x, y, Z )
패치버전에서는 기존 버전과 호환되면서 있던 기능에서 버그를 수정을 하거나, 알파 베타 버전을 나타낼 수 있다.

2. 버전 범위

npm pcakage.json에 버전을 명시할 때 아래와 같이 할 수 있습니다.

1.2.3
>1.2.3
>=1.2.3
<1.2.3
<=1.2.3

틸드(~)와 캐럿(^)을 이용한 범위 명시

~1.2.3
^1.2.3

2.1 틸드(~)

틸드는 부버전(minor)이 명시되어 있으면 패치버전을 변경합니다.
예를 들어 ~1.2.3은 ~1.2.3 부터 1.3.0 미만 까지를 포함합니다.
만약 부버전(minor)이 없다면 부버전을 갱신합니다. ~0 표기는 0.0.0 에서 1.0.0 미만을 포함합니다.

2.2 캐럿(^)

캐럿은 주버전에서 마이너와 패치 버전을 변경합니다.
만약 ^1.2.3이면 1.2.3 에서부터 2.0.0 미만 까지를 포함하게 됩니다.
^0 표기는 0.0.0 부터 0.1.0 미만 까지를 포함합니다.

2.3 틸드와 캐럿의 차이

틸드(~)는 현재 지정한 버전의 마지막 자리 내의 범위에서만 자동으로 업데이트합니다.

  • ~0.0.1 : >= 0.0.1 < 0.1.0
  • ~0.1.2 : >= 0.1.2 < 0.2.0

캐럿은 1.y.z 내에서는 하위호환성이 보장되므로 그 내에서는 모두 업데이트하겠다는 의미입니다.

  • ^1 : >= 1.0.0 < 2.0.0
  • ^1.1.2 : >= 1.1.2 < 2.0.0
  • ^1.1 : >= 1.1.0 < 2.0.0

단 버전이 1.0.0 미만인 경우에서는 하위호환성이 보장되지 않으므로 직접 지정한 버전만을 사용하도록 해야합니다.


참고
Outsider’s Dev Story
semver.org

댓글남기기