버전 관리 어떻게 해야할까?
안드로이드 앱을 개발하거나 소프트웨어 등을 만들면 보면 항상 명시하는 것들이 있죠 (앱 이름, 제작자, 라이센스 등)
그 중 오늘 찾아본 버전(Version) 관련 내용을 기록해보려합니다.
사실 버전은 소프트웨어가 동작하는데에는 영향을 미치지 않지만, 이 프로그램이 언제 만들어졌는지, 어떠한 기능이 추가되고 바뀌었는지, 패키지의 변화를 구분하기 위해서 반드시 필요한 존재입니다.
파이썬2로 만들어진 프로그램이 파이썬3에선 안돌아가듯 이를 구분짓는 좌표니까요
그런데 이 버전 마음대로 만들어도 되는것인지 묻는다면.. 개인이 만든 소프트웨어면 상관없을지 몰라도 기업에서 공동으로 제작하거나, 혹은 라이브러리를 배포하면 사용하는 개발자 입장에선 의미를 이해하고 적절한 버전을 사용하게 해야할 것 입니다.
이에 따라 혼란이 발생하지 않도록 Github의 공동창업자인 '톰 프레스턴-베르너(Tom Preston-Werner)'가 Semantic Versioning 명세서를 작성하여 현재 많이 사용되고있습니다.
본 글에서는 이해를 돕고자 중요한 내용만 서술합니다.
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.
'디자인패턴 > Convention' 카테고리의 다른 글
코딩 스타일/프로그래밍 네이밍 표기법 종류와 규칙 (Naming Convention) (0) | 2022.05.06 |
---|
댓글