본문 바로가기
developStudy

앱 버전 쓰는 방법 (Semantic Versioning)

by holaf 2021. 1. 19.
반응형

카카오톡 설정에 들어가서 지금 설치한 앱의 버전 정보를 확인해보세요. '최신 버전을 사용중입니다'라는 메시지와 함께 9.1.7 버전을 사용중이라는 정보가 뜹니다. 여기서 9.1.7은 무엇을 의미하는 걸까요?

이 글은 버전을 어떻게 써야하는지, 버전을 어떻게 해석하는지, 그리고 왜 규칙에따라 버전을 업데이트해야하는지에 대해 정리한 내용입니다.

주요 서비스 버전

 

버전 규칙 Semantic Versioning

Semantic Versioning (aka SemVer)은 버전을 체계적으로 관리하기 위해 만들어진 규칙입니다. 매일 쏟아지는 애플리케이션과 그 버전을 알아보기 위해선 통일된 시스템이 필요합니다. 이 규칙은 깃허브의 아버지 Tom Preston-Werner가 만들었습니다.

(좌) 처럼 할 수 없기 때문에 톰 프레스턴-위너는 셈버를 만들었습니다


버전은 (.)을 기준으로 세파트로 나뉩니다: Major.Minor.Patch.
Semver 공식문서를 보면 아래와 같이 기준을 명시합니다.
1. MAJOR version when you make incompatible API changes
2. MINOR version when you add functionality in backwards compatible manner
3. PATCH version when you make backwards compatible bug fixes

즉,
1. MAJOR는 API를 바꾸는 주요한 업데이트가 있을 때
2. MINOR는 기존 API를 바꾸지 않는 주요 업데이트가 있을 때
3. PATCH는 짜잘한 버그 픽스를 할 때,

각 숫자를 하나씩 올려줍니다.

더 자세한 규칙이 궁금하면 공식문서를 참고해보세요. 예를 들면, 음수 절대 사용금지, 한번 배포한 SemVer 절대 수정금지 같은 룰이 있습니다.

 

카카오톡 버전 9.1.7은 그럼 어떻게 해석하면 좋을지 감이 오시나요? 아마도 9번의 대대적인 업데이트 (그것은 아마 사용자도 체감할 정도의 업데이트지 않을까) 혹은 내부적으로 대대적인 API 수정, 그리고 이 최신 9번째 버전에서는 1번의 주요 업데이트와 7번의 버그 픽스가 있었나봅니다. 다 궁금하신 분은 카카오톡 업데이트 문서를 참고하보세요. 어떤 이유때문에 버전의 몇번째 자리를 업데이트했는지 볼 수 있습니다. 스크린샷이 없는건 아쉽네요.

 

버전 해석하기

첫번째 버전은 어떻게 써야할까? 무조건 1.0.0일까?

아직 개발중인 애플리케이션의 경우엔 0.1.0을 쓰면 됩니다. 이러한 초기 개발단계를 SemVer에서는 0.y.z initial development phase라고 칭하는데요. 0.1.0으로 시작해서, 이후 0.2.0 이런식으로 애플리케이션을 발전시켜나가는 것을 추천합니다. SemVer에 따르면 0.100.0까지도 가능한거죠. 이후 API를 제대로 갖춘 서비스를 시작하게 되면 1.0.0으로 버전을 업데이트하면 됩니다.

 

버전규칙이 필요했던 이유

버전 락이 걸리면 원하는 기능을 추가하는게 매우 어렵습니다. 모든게 얽혀있기 때문이죠. 따라서 체계가 필요합니다. 저는 이 체계를 Semantiv Versioning이라 칭하기로 했습니다. 셈버를 따라서 버전을 바꾸는 것은 버전에 의미를 부여하기 때문에, 버전만 보고도 무엇을 바꿨는지 트래킹이 가능합니다.

Version lock
is the inability to upgrade a package without having to release new versions of every dependent package. Dependency hell is where you are when version lock and/or version promiscuity prevent you from easily and safely moving your project forward.

As a solution to this problem, I propose a simple set of rules and requirements that dictate how version numbers are assigned and incremented. I call this system “Semantic Versioning.” Under this scheme, version numbers and the way they change convey meaning about the underlying code and what has been modified from one version to the next.
반응형

'developStudy' 카테고리의 다른 글

[Python] Sum  (0) 2021.09.11
[Python] Range  (0) 2021.09.11
[Python] Map, Lambda, Zip  (0) 2021.02.18
[Javascript] 상도덕편 🚮  (0) 2021.02.16
[Flutter] Dart 기본 중에 기본 #변수 #함수 #클래스  (0) 2021.01.13

댓글