유의적 버전이란?

유의적 버전이란 버전을 통해서 API의 변경을 표현하는 명세이다. 버전은 X.Y.Z(주.부.수)로 표현한다.


유의적 버전을 사용하는 이유

시스템 규모가 커질수록 더 많은 API를 사용하게 된다. 이에 따라 소프트웨어의 의존성이 점점 더 높아지고 있다. 이러한 상황에서 API의 버전이 올라가는 경우 의존성이 깨지는지 확인을 해 주어야 하는데 직접 하나하나 확인을 하기에는 힘들다. 그래서 버전만 보고도 의존성이 깨지는지 아닌지를 판단 할수 있도록 하기 위해서 사용하게 되었다.


유의적 버전

버전은 3부분으로 나뉘어 진다.

  1. 주버전(MAJOR) : 기존 버전과 호환되지 않게 변경되는 경우
  2. 부버전(MINOR) : 기존 버전과 호환되면서 기능이 추가된 경우
  3. 수버전(PATCH) : 기존 버전과 호환되면서 버그를 수정한 경우

유의적 버전 사용 방법

  1. 유의적 버전을 쓰는 소프트웨어는 반드시 공개 API를 선언한다.
  2. 버전 번호는 반드시 X.Y.Z의 형태로 하고, X, Y, Z는 각각 자연수이고, 절대로 0이 앞에 붙어서는 안 된다. 그리고 반드시 증가하는 수여야 한다.
  3. 한번 배포가 되면 그 버전의 내용은 변경이 되어서는 안된다. 변경사항 있으면 새로운 버전으로 배포되어야 한다.
  4. 주부전이 0인 경우는 초기 개발을 위해서 사용한다. 아무때나 바뀔수 있다. 이 버전은 안전판으로 보지 않는게 좋다.
  5. 1.0.0 버전은 공개 API를 제공한다.
  6. 수(PATCH)버전은 반드시 그 이전 버전 API와 호환되는 버그 수정의 경우에만 버전을 올린다. 버그 수정이란 잘못된 내부기능을 수정하는 것을 말한다.
  7. 공개 API에 기존과 호환되는 기능을 추가하는 경우에는 반드시 부(MINOR)버전을 올린다.
  8. 공개 API에 기존과 호환되지 않는 기능을 추가하는 경우에는 주(MAJOR)버전을 올린다.
  9. 상위 버전에서는 하위 버전의 변화를 포함할수 있다.
  10. 상위 버전이 올라갈 경우 하위 버전은 0으로 초기화한다.
  11. 수 버전 뒤에 -나 .을 붙여서 pre-release 버전을 표기할수 있다.

자세한 사용방법은 https://semver.org/lang/ko/ 여기를 참고 하도록 하자.


FAQ

초기 개발 단계는 버전 관리는 어떻게 하는가

가장 간단한 방법은 최초개발을 0.1.0으로 하고, 이후 배포마다 부버전을 올린다.

언제 1.0.0을 배포해야 하는가

소프트웨어가 실서버에 사용하기 시작했다면 1.0.0이라고 할수 있다. 사용자들이 믿고 쓸수 있는 안정한 API 라면 1.0.0이라 할만하다.

아주 사소한 부분이 하위호환이 되지 않는 경우 매번 주버전을 올릴경우, 주버전이 매우 높아진다

의존하는 코드가 많은 소프트웨어에, 호환되지 않는 변화를 가볍게 도입해서는 안된다. 주버전을 업그레이드 하는데 필요한 비용이 어마어마하게 증가하게 된다. 바뀌는 부분에 대한 여파를 충분히 평가해야 한다.

실수로 부버전에 호환되지 않은 변경사항이 추가된 경우는 어떻게 하는가

이 경우 즉시 호환성이 깨진 부분을 수정하여 새로운 부버전을 배포한다. 이 경우라도 기존에 배포한 버전을 수정해서는 안된다.