유의적 버전 (Semantic versioning)

개발하는 소프트웨어의 규모가 커지고 외부 라이브러리를 많이 사용할 수록 의존성 지옥에 빠지기 쉬운 이유중 하나는 라이브러리의 버전을 변경할 때 어떤 규칙에 의해서 버전이 매겨지는지 통용되는 명확한 규칙이 없기 때문임.

유의적 버전(Semantic versioning)은 이런 의존성 문제를 해결하고자 나온 라이브러리의 버전 명시 규칙과 요구 사항으로 요약하면 다음과 같다.

먼저 외부에서 사용할 수 있는 공개 API 를 선언하고 라이브러리의 버전은 MAJOR.MINOR.PATCH 와 같은 형식으로 한다. 1)

  • 기존 버전과 호환되지 않게 API가 변경되면 "MAJOR 버전"을 올린다.
  • 기존 버전과 호환되면서 새로운 기능이 추가 되었을 때는 "MINOR 버전"을 올린다.
  • 기존 버전과 호환되면서 버그를 수정했을 경우 "PATCH 버전" 을 올린다.
  • 버전 형식 뒤에 "정식 출시전" 이나 빌드 메타데이타를 위한 레이블을 추가할 수 있다.
정확한 버전1.0.1버전 1.0.1과 일치하는 버전
범위 지정(Range)>=1.01.0 보다 크거나 같은 버전중 마지막 버전. 2.0, 3.1 도 포함
>=1.2 <2.01.2 보다 크거나 같고 2.0 보다 작은 버전중 마지막 버전
물결(Tilde) 연산자(~)~1.2바로 위(>=1.2 <2.0)와 동일한 의미
OR 연산자(|)1.2.3 | 1.3.41.2.3 또는 1.3.4
와일드카드 연산자(*)1.0.*1.0.x 대중 가장 큰 버전으로 1.1 보다는 작은 버전. >= 1.0 < 1.1 과 동일
캐럿(Caret) 연산자(^)^1.2.3>=1.2.3 <2.0 와 동일

역링크