MochaJS라는 오픈소스 프로젝트에 기여하면서, PR에 semver-patch
등의 label이 붙는 것을 보았다. 대략 “다음 버전에 포함되어 릴리즈 예정인가보다.” 정도로 이해했지만, 이를 좀 더 제대로 이해하기 위해 찾아본 결과를 정리한다.
SemVer가 뭐야?
주(major), 부(minor), 수(patch) 세 가지 숫자를 조합해서 버전을 관리하는 것을 의미한다. package.json
을 보면 SemVer에 의해 버전이 관리되는 것을 알 수 있다.
버전의 숫자를 매기는 규칙
major.minor.patch
- 주 버전(major version): 기존 버전과 호환되지 않게 변경한 경우
- 부 버전(minor version): 기존 버전과 호환되면서 기능이 추가된 경우
- 수 버전(patch version): 기존 버전과 호환되면서 버그를 수정한 경우
버전의 범위를 명시하는 규칙
-
특정 버전으로 지정하는 방식
"dependencies": { "react": "16.8.4" }
-
부등호(
>
,>=
,=<
,<
)를 사용해 구간으로 나타내는 방식"dependencies": { "react": ">=16.8.4" }
-
틸드(
~
)와 캐럿(^
)을 사용해 구간으로 나타내는 방식"dependencies": { "react": "~16.8.4", // >= 16.8.4 < 16.9.0 "mocha": "^7.0.0" // >= 7.0.0 < 8.0.0 }
- 틸드(
~
): 현재 지정한 버전의 마지막 자리 내의 범위에서만 자동으로 업데이트한다. - 캐럿(
^
): 현재 지정한 버전에 대해 하위호환성이 지켜지는 범위에서 자동으로 업데이트한다. 즉,minor
와patch
에 대해 업데이트를 허용한다. 단, 버전이 1.0.0 미만인 경우(SemVer에서는 pre-release라고 부름) API 변경이 수시로 일어남을 감안하여 예외가 적용된다.
- 틸드(