Skip to content

Latest commit

 

History

History
73 lines (48 loc) · 4.72 KB

semantic-versioning.md

File metadata and controls

73 lines (48 loc) · 4.72 KB

Versioning

Versioning이란 컴퓨터 소프트웨어의 특정 상태에 대한 버전을 결정하는 과정이다. 새롭게 개발된 소프트웨어에 알맞게 번호를 증가시킨다. 그렇다면 대중적인 앱들은 어떤식으로 Versioning 하는지 살펴보자. 아래는 각각 당근마켓, 토스, 유튜브의 앱스토어 Versioning에 대한 스크린샷이다.

세 개의 앱이 Versioning 하는 방법에는 공통점은 X.Y.Z의 형태이다. 이는 소프트웨어의 Versioning에서 많이 사용되는 Semantic Versioning이다.

 

Semantic Versioning

Semantic Versioning의 스펙을 알아보기 전에, 어떠한 문제를 해결하기 위해 Semantic Versioning이 제안됐는지 알아보자. 이는 Semantic Versioning의 공식 홈페이지인 semver.orgIntroduction에 상세히 설명돼있다. Introduction의 대략적인 내용은 다음과 같다. 우리가 만든 시스템이 종속성이 많다면 새 패키지 버전을 릴리즈하는 것은 악몽이 될 수 있다. 왜냐하면 종속성 규격이 너무 엄격하면 버전 잠금의 위험이 있다. 반대로 종속성이 너무 느슨하면 불가피하게 버전 혼탁에 시달린다. 버전 잠금 또는 혼탁으로 인해 프로젝트를 쉽고 안전한게 개발할 수 없는 경우 종속성 지옥이 발생한다. 이 문제에 대한 해결책으로 Semantic Versioning이 제안된다.

  • 버전 잠금 : 모든 종속 패키지의 새 버전을 릴리즈하지 않으면 패키지를 업그레이드 할 수 없음
  • 버전 혼탁 : 현재 버전보다 미래 버전과의 호환성을 가정

 

Form

Semantic Versioning은 버전을 X.Y.Z 형태로 결정한다. X, Y, Z의 의미는 아래와 같다.

  • X : 주(Major) 버전으로 이전 버전과 호환되지 않은 변경 사항이 있을 경우 증가시킨다. 0(0.Y.Z)은 어떤 것이든 언제든지 바뀔 수 있어서 안정적이지 않은 초기 개발을 위한 버전이다. 따라서 공용 API는 1.0.0 버전으로 릴리즈 한다.
  • Y : 부(Minor) 버전으로 이전 버전과 호환되는 변경 사항이 있을 경우 증가시킨다. 예를 들어, 기존의 기능이 더 이상 사용되지 않는 것으로 표시(Deprecate), 새로운 메서드 혹은 타입, 개인 코드의 개선 사항 등이 있다.
  • Z : 패치(Patch) 버전으로 이전 버전과 호환되는 버그 수정이 있을 경우 증가시킨다.

만약 버전을 증가시킨 경우 하위 버전을 0으로 재설정해야 한다. 예를 들어, 주 버전을 증가시킨 경우 부 버전과 패치 버전을 0으로 재설정해야 한다.

1.3.7 -> 2.0.0

그리고 X, Y, Z 모두 음이 아닌 정수이며 선행 0을 포함하면 안된다.

1.-1.7 (X)
7.06.4 (X)

 

사전 릴리즈 버전

사전 릴리즈 버전은 X.Y.Z 뒤에 -와 일련의 점으로 구분된 식별자를 추가하여 나타낼 수 있다. 식별자는 하이픈[0-9A-Za-z-], ASCII 영숫자로 구성되어야 한다.

1.0.0-alpha, 1.0.0-alpha.1, 1.0.0-0.3.7, 1.0.0-x.7.z.92, 1.0.0-x-y-z.--.

식별자는 비워둘 수 없다.

1.0.0- (X)

숫자 식별자는 선행 0을 포함하면 안된다.

1.0.0-02 (X)

사전 릴리즈 버전은 불안정하고 일반 버전에서 표시하는 대로 의도된 호환성을 충족하지 못할 수 있음을 나타낸다. 따라서 일반 버전보다 우선 순위가 낮다.

 

빌드 메타데이터

빌드 메타데이터는 X.Y.Z 뒤에 + 기호와 점으로 구분된 식별자를 추가하여 나타낼 수 있다. 식별자는 하이픈[0-9A-Za-z-]와 ASCII 영숫자로 구성되어야 한다.

1.0.0-alpha+001, 1.0.0+20130313144700, 1.0.0-beta+exp.sha.5114f85, 1.0.0+21AF26D3----117B344092BD.

식별자를 비워둘 수 없는 점과 숫자 식별자는 선행 0을 포함하면 안되는 점은 사전 릴리즈 버전을 나타낼 때와 동일하다. 빌드 메타데이터는 우선 순위에 포함되지 않으며, 빌드 메타데이터 버전 간에는 동일한 우선 순위를 가진다.