소프트웨어 릴리즈 버전 넘버에 대한 네이밍 시스템
버전 관리를 함에 있어서 정해진 규칙 없이 제각각의 방식으로 관리하지 않고 규칙을 정해서 관리하기 위해 제안 됨.
아래와 같은 형태를 가진다.
> "devDependencies": {
"pimatic-meross": "^0.1.1",
"react-test-renderer": "^16.13.0",
"react-zeroconfig": "^3.27.2-alpha.2"
>
- 2 (version)
3 = MAJOR
- 기존 API 변경 및 삭제 되거나 하위 호환이 되지 않는 버전
4 = MINOR
- 신규 기능이 추가되거나 개선되었고 하위 호환이 되는 버전
2 = PATCH
- 버그 수정이 되었고 하위 호환이 되는 버전
(1) 패치 버전(Z)은 하위 호환 되며 버그 수정 시 올라간다.
(2) 작은 버전(Y)는 기존 공개 API가 하위 호환되고 새로운 기능, 개선이 추가되거나 공개 API 하나 이상이 deprecated(더 이상 사용 되지 않는)가 되어도 올라가야 한다. 이 때 작은 버전이 올라가면 패치 버전은 꼭 0 이 되어야 한다.
(3) 하위 호환이 되지 않는 변화가 추가될 때 반드시 올라가야 한다. 이는 패치 수준과 작은 수준의 변화를 포함할 수 있으나, 주요 버전이 올라가면 나머지 버전은 모두 0이 되어야 한다.
(1) 숫자로만 이루어진 식별자는 숫자로 비교
(2) 문자와 대시가 포함된 식별자는 ASCII 정렬 순서대로 비교. 숫자 식별자는 숫자가 아닌 식별자보다 낮은 우선순위를 가진다.
ex) 1.0.0-alpha < 1.0.0-alpha.1 < 1.0.0-beta.2 < 1.0.0-beta.11 < 1.0.0-rc.1+build.1 < 1.0.0 < 1.0.0+0.3.7 < 1.3.7+build 등등..
일반 범위
- < 명시된 버전보다 낮은 버전
- <= 명시된 버전보다 같거나 낮은 버전
- '>' 명시된 버전보다 높은 버전 (''제외)
- => 명시된 버전보다 같거나 높은 버전
고급 범위 지정 (Advanced Range Syntax)
- ~ 사용하는 Hyphen Ranges X.Y.Z - A.B.C
- x 를 사용하는 X-Ranges 1.2.x 1.X 1.2.*
- ~를 사용하는 Tilde Ranges ~1.2.3 ~1.2 ~1
- ^를 사용하는 Caret Ranges ^1.2.3 ^0.2.5 ^0.0.4
참고 링크
https://semver.org/lang/ko/#spec-item-7
https://spoqa.github.io/2012/12/18/semantic-versioning.html
좋은 글 감사합니다.