본문 바로가기
Hello World/DevOps

SW 버전 관리를 위한 몇가지 방안 (Versioning strategy)

by Run DaramG 2023. 6. 10.

SW 버전관리는 개발과 운영에 있어서 중요한 역할을 한다.

변경이력을 추적할 수 있고, 여러 개발자가 협업하는 경우 변경사항의 충돌을 방지하고 협력을 원활하게 한다. 또한 문제가 발생했을 때 이전버전으로 쉽게 롤백 할 수 있다. 이 밖에도 확장성이나, 버그수정, 보안 패치 등을 효과적으로 관리하는데 도움을 준다.

 

버전명을 생성하는 방법(Versioning) 은 조직이나 프로젝트의 요구사항에 따라 다를 수 있다. 다만 일반적으로 사용되는 몇가지 버전명 생성 방법을 공유하고자 한다.

 

1. 의미론적 버전 (Sementic Versioning, SemVer) 

<MAJOR>.<MINOR>.<PATCH> 

시메틱 버전은 버전명을 MAJOR.MINOR.PATCH 형식으로 구성하는 표준방법이다. 각 세그먼트의 의미는 아래와 같다.

MAJOR 버전은 하위호환성이 깨지는 변경에 사용된다

MINOR 버전은 하위호환성을 유지하면서 새로운 기능(feature)가 추가될 때 사용한다.

PATCH 버전은 하위호환성을 유지하면서 버그 수정이나, 작은 변경이 발생할 때 사용한다.

예시) 1.0.2, 2.3.31

시멘틱 버전의 경우 가장 많이 사용되는 대표적인 버전관리 방안으로, 버전명을 보고 변경사항의 크기와 영향도를 판단할 수 있다는 장점이 있다. 보통 조직에서는 시멘틱 버전을 기반으로 customize하여 사용한다. 기본적인 형태는 MOJOR.MINOR.PATCH 형태이지만 빌드메타데이터를 추가하거나, pre-release 정보를 포함하는 등 조직의 요구사항에 따라 추가적인 요소를 포함할 수 있다. 

다만 이러한 커스터마이징은 표준 SemVer에 대한 호환성 문제를 일으킬 수 있으므로, 주의해서 버전 전략을 구성해야 한다. 그리고 MAJOR, MINOR, PATCH 버전을 올리는 것은 개발자의 판단이 필요하기에, CICD Pipeline 내에서 Versioing을 자동으로 처리하기는 어렵다. 

 

2. 날짜 기반의 버전 관리

<BUILD DATE>-<BUILD COUNT>

빌드시간에 따라 버전을 관리하는 방법이다. 

예시) 2023.06.10-1

언제 버전이 만들어졌는지 명확하게 알 수 있다. CICD Pipeline 내에서 쉽게 자동화 할 수 있지만, SemVer 처럼 버전명을 보고서 변경사항의 크기나, 호환성 여부, 영향도를 확인할 수는 없다. 빌드 산출물을 저장할 때 많이 쓰이는 방식이며 Ubuntu에서 사용하는 버전명이 이러한 날짜 기반의 버전을 사용한다.(20.04, 18.04, ..)

 

3. Git commit SHA 를 이용한 버전 관리

<Commit SHA>

GIt 커밋 SHA (Commit Revision) 을 사용하여 빌드와 배포 버전을 관리할 수 있다. 어떤 커밋이 배포되어있는지 명확하게 추적할 수 있지만, 이것도 마찬가지로 Sementic Version 만큼 직관적이지는 않다.

 

댓글