# SemVer 시맨틱 버저닝(SemVer, Semantic versioning) 또는 유의적 버전은 소프트웨어의 버전을 효과적으로 관리하기 위한 규칙이다. 버전을 `..` 형식으로 표현하고, 기존 버전과 호환되지 않는 변경이 있다면 `major` 버전을, 기존과 호환되는 새로운 기능이 추가되었다면 `minor` 버전을, 기존 버전과 호환되는 버그 수정만 있었다면 `patch` 버전을 올린다. 시맨틱 버저닝의 명세는 그라바타(Gravatars)의 창시자이자, 깃헙(GitHub)의 공동창립자인 톰 프레스턴-베르너(Tom Preston-Werner)가 작성했다. ## 범위 버전의 범위 표현은 SemVer 명세에 포함되어 있지는 않지만, 많은 패키지 매니저들이 이를 지원한다. 기본적으로 `<`, `>`, `<=`, `>=`, `=` 등 비교 연산자를 사용할 수 있으며, `||` 연산자로 두 범위 조건을 결합할 수 있다. 물결(Tilde) 범위는 마이너 버전의 변경을 허용하되, 마이너 버전이 명시된 경우 패치 버전의 변경만을 허용한다. - `~1.2.3`: `>=1.2.3 <1.3.0` - `~1.2`: `>=1.2.0 <1.3.0` (`1.2.x`와 동일) - `~1`: `>=1.0.0 <2.0.0` (`1.x`와 동일) 캐럿(Caret) 범위는 버전에서 가장 왼쪽의 0이 아닌 숫자를 수정하지 않는 변경을 허용한다. 즉, 버전 `1.0.0` 이상에 대해서는 패치와 마이너 버전의 변경을 허용하고, 버전 `0.1.0`보다 큰 `0.x`에 대해서는 패치 버전의 변경을 허용한다. 일반적으로 `0.x` 버전은 초기 개발 단계이기 때문에 `x`가 호환되지 않는 변경을 일으키는 메이저 버전처럼 취급되는 경우가 된다. 따라서 캐럿 범위는 `0.2.4`와 `0.3.0` 버전 사이에 메이저 변경 사항이 포함될 가능성이 있을 때 유용하다. - `^1.2.3`: `>=1.2.3 <2.0.0` - `^0.2.3`: `>=0.2.3 <0.3.0` - `^0.0.3`: `=0.0.3 <0.0.4` `-`, `*`, `x`를 사용할 수도 있다. - `1.2.3 - 2.3.4`: `>=1.2.3 <=2.3.4` - `*`: `>=0.0.0` (모든 버전) - `1.x`: `>=1.0.0 <2.0.0` (메이저 버전 일치) - `1.2.x`: `>=1.2.0 <1.3.0` (메이저, 마이너 버전 일치) ## 참고자료 - [Semantic Versioning](https://semver.org/) - [Online Semver Checker](https://jubianchi.github.io/semver-check)