본문 바로가기
디자인패턴/Convention

소프트웨어/앱 빌드버전 관리 규칙, Semantic Versioning (시맨틱 버저닝)

by 굿햄 2022. 6. 4.

버전 관리 어떻게 해야할까?

커링 관련 라이브러리 Arrow-kt 의 Releases 리스트

안드로이드 앱을 개발하거나 소프트웨어 등을 만들면 보면 항상 명시하는 것들이 있죠 (앱 이름, 제작자, 라이센스 등)

그 중 오늘 찾아본 버전(Version) 관련 내용을 기록해보려합니다.

 

사실 버전은 소프트웨어가 동작하는데에는 영향을 미치지 않지만, 이 프로그램이 언제 만들어졌는지, 어떠한 기능이 추가되고 바뀌었는지, 패키지의 변화를 구분하기 위해서 반드시 필요한 존재입니다.

파이썬2로 만들어진 프로그램이 파이썬3에선 안돌아가듯 이를 구분짓는 좌표니까요

 

그런데 이 버전 마음대로 만들어도 되는것인지 묻는다면.. 개인이 만든 소프트웨어면 상관없을지 몰라도 기업에서 공동으로 제작하거나, 혹은 라이브러리를 배포하면 사용하는 개발자 입장에선 의미를 이해하고 적절한 버전을 사용하게 해야할 것 입니다.

 

이에 따라 혼란이 발생하지 않도록 Github의 공동창업자인 '톰 프레스턴-베르너(Tom Preston-Werner)'가 Semantic Versioning 명세서를 작성하여 현재 많이 사용되고있습니다.

npm docs에서 권장하는 시맨틱 버저닝 스펙

본 글에서는 이해를 돕고자 중요한 내용만 서술합니다.

Semantic Versioning Spec

버전의 모습을 대부분 아래와 같은 모습을 갖고 있습니다.

 

Major.Minor.Patch 또는 Major.Minor.Patch+Build

예시) 2.30.55 라면 2는 Major, 30은 Minor, 55는 Patch 입니다

 

  • Major : 기존 버전과 호환되지 않으며, API가 변경됨
  • Minor : 기존 버전과 호환되며, 새로운 기능이 추가됨
  • Patch : 기존 버전과 호환되며, 버그가 수정됨

명세서 본문에서는 아래와 같이 이야기합니다.

<valid semver> ::= <version core>
                 | <version core> "-" <pre-release>
                 | <version core> "+" <build>
                 | <version core> "-" <pre-release> "+" <build>

<version core> ::= <major> "." <minor> "." <patch>

이 때 1.02.1과 같은 첫자리수에 0이 들어가는 것은 자제해야합니다.

게시된 패키지의 버전 증가

해당 라이브러리에 의존하는 개발자를 위해 아래와 같은 방법으로 증가시키는 것을 권장합니다.
Code status(코드 상태) Stage(상태) Rule(규칙) Example version(예시)
Before release (배포 전) 배포 전 Major을 0으로 시작합니다 0.1.0
First release (첫 릴리즈) 새로운 소프트웨어 1.0.0으로 시작합니다 1.0.0
Backward compatible bug fixed (이전과 호환되는 버그 픽스) 패치 릴리즈 Patch를 증가합니다. 1.0.1
Backward compatible new features
(이전과 호환되는 새로운 기능)
마이너 릴리즈 Minor를 증가시키고 Patch를 0으로 수정 1.2.0
Changes that break backward compatibility
(이전과 호환되지않는 변경)
메이저 릴리즈 Major를 올리고 나머지를 0으로 수정 2.0.0

 

버전별 우선순위

  • 버전별 우선순위는 Major > Minor > Patch 순으로 정해집니다.  1.0.0 < 2.0.0 < 2.1.0 < 2.1.1
  • 위 세개가 동일 할 때 정식배포 전 버전(alpha, beta, rc)가 포함한 경우 우선순위가 낮습니다. 1.0.0-alpha < 1.0.0
  • 숫자로만 구성된 식별자가 달렸다면 문자와 붙힘표가 있는 식별자보다 우선순위가 낮습니다. 1.2.1-1 < 1.2.1-alpha
  • 식별자가 모두 같으면 배포 전 버전과 필드 수가 더 많은 쪽이 우선순위를 갖습니다.

예시) 1.0.0-alpha < 1.0.0-alpha.1 < 1.0.0-alpha.beta < 1.0.0-beta < 1.0.0-beta.2 < 1.0.0-beta.11 < 1.0.0-rc.1 < 1.0.0 < 1.0.0+0.2.1 < 1.2.1+build.1 < 1.2.1

 

 

더욱 자세한 내용이 알고싶다면 https://semver.org/ 이곳에서 정보를 볼 수 있습니다.

 

ⓒ 굿햄 2022. daryeou@gmail.com all rights reserved.

댓글