SemVer
시맨틱 버저닝(SemVer, Semantic versioning) 또는 유의적 버전은 소프트웨어의 버전을 효과적으로 관리하기 위한 규칙이다. 버전을 <major>.<minor>.<patch> 형식으로 표현하고, 기존 버전과 호환되지 않는 변경이 있다면 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(메이저, 마이너 버전 일치)
참고자료
이 문서를 인용한 문서
- 주제문서
- 패키지 모노레포를 위한 브랜치 전략
-
a와b는 서로 다른 주체가 운영하는 패키지이며, 모두 SemVer를 엄격히 준수한다.
-
- 소프트웨어 개발 현장에서의 수학
-
문제 상황은 SemVer를 따르는 라이브러리의 메이저 버전을 위해 마이그레이션을 지원하는 것이다.
-
- 피어 의존성
-
Rust의 Cargo는 SemVer 기반으로 호환 가능한 버전을 발견하면 의존성을 하나로 통합한다.
-