All Articles

Semantic versioning

MochaJS라는 오픈소스 프로젝트에 기여하면서, PR에 semver-patch 등의 label이 붙는 것을 보았다. 대략 “다음 버전에 포함되어 릴리즈 예정인가보다.” 정도로 이해했지만, 이를 좀 더 제대로 이해하기 위해 찾아본 결과를 정리한다.

SemVer가 뭐야?

주(major), 부(minor), 수(patch) 세 가지 숫자를 조합해서 버전을 관리하는 것을 의미한다. package.json을 보면 SemVer에 의해 버전이 관리되는 것을 알 수 있다.

버전의 숫자를 매기는 규칙

major.minor.patch

  • 주 버전(major version): 기존 버전과 호환되지 않게 변경한 경우
  • 부 버전(minor version): 기존 버전과 호환되면서 기능이 추가된 경우
  • 수 버전(patch version): 기존 버전과 호환되면서 버그를 수정한 경우

버전의 범위를 명시하는 규칙

  • 특정 버전으로 지정하는 방식

    "dependencies": {
    "react": "16.8.4"
    }
  • 부등호(>, >=, =<, <)를 사용해 구간으로 나타내는 방식

    "dependencies": {
    "react": ">=16.8.4"
    }
  • 틸드(~)와 캐럿(^)을 사용해 구간으로 나타내는 방식

    "dependencies": {
    "react": "~16.8.4", // >= 16.8.4 < 16.9.0
    "mocha": "^7.0.0"   // >= 7.0.0 < 8.0.0
    }
    • 틸드(~): 현재 지정한 버전의 마지막 자리 내의 범위에서만 자동으로 업데이트한다.
    • 캐럿(^): 현재 지정한 버전에 대해 하위호환성이 지켜지는 범위에서 자동으로 업데이트한다. 즉, minorpatch에 대해 업데이트를 허용한다. 단, 버전이 1.0.0 미만인 경우(SemVer에서는 pre-release라고 부름) API 변경이 수시로 일어남을 감안하여 예외가 적용된다.

[참고자료]
https://blog.outsider.ne.kr/1041