소프트웨어 버저닝 (Software Versioning)¶
소프트웨어 버저닝은 소프트웨어의 고유한 상태(버전)에 이름이나 번호를 부여하는 과정입니다. 이를 통해 개발자, 사용자, 패키지 관리자 등 시스템의 모든 참여자가 소프트웨어의 변경 이력과 호환성을 쉽게 파악할 수 있습니다.
1. 시맨틱 버저닝 (Semantic Versioning, SemVer)¶
가장 널리 사용되는 표준 버저닝 규약입니다. 버전 번호만 보고도 이전 버전과의 호환성 유지 여부, 변경의 규모를 예측할 수 있게 해줍니다.
기본 형식: Major.Minor.Patch (예: 1.4.2)
- Major (주 버전,
1.x.x)- 기존 버전과 호환되지 않는(Incompatible) API 변경, 큰 아키텍처 변화가 있을 때 올립니다.
- 사용자가 업데이트할 때 코드를 수정해야 할 수도 있습니다.
- Major 버전이 0(
0.y.z)인 경우, 아직 초기 개발 단계(Alpha)이며 API가 언제든 바뀔 수 있음을 의미합니다.
- Minor (부 버전, x.
4.x)- 기존 버전과 호환되는(Backward-compatible) 새로운 기능이 추가되었을 때 올립니다.
- Major 버전은 그대로 두고 Minor 버전만 올라갔다면, 기존 사용자는 아무런 코드 수정 없이 업데이트해도 안전해야 합니다.
- Patch (수정 버전, x.y.
2)- 기존 버전과 호환되는 버그 수정(Bug fixes)이 있을 때 올립니다.
추가 라벨 (Prerelease & Build metadata)
- Prerelease:
1.0.0-alpha,1.0.0-beta.1,1.0.0-rc.1처럼 정식 릴리즈 전의 버전을 표시합니다. - Build metadata:
1.0.0+20130313144700처럼 빌드 시점의 정보(날짜, 커밋 해시 등)를 덧붙입니다.
2. 캘린더 버저닝 (Calendar Versioning, CalVer)¶
출시 날짜를 기반으로 버전을 매기는 방식입니다. 시간의 흐름이 중요한 소프트웨어(예: 운영체제, 정기적으로 업데이트되는 서비스)에서 주로 사용됩니다.
주요 형식 예시:
- Ubuntu:
YYYY.MM형식을 사용합니다. (예:Ubuntu 22.04= 2022년 4월 출시,Ubuntu 24.04= 2024년 4월 출시) - JetBrains IDE:
YYYY.MAJOR.MINOR(예:IntelliJ IDEA 2023.1.2) - Python (일부 프로젝트):
YY.MM.Micro등 다양한 변형이 존재합니다.
장점: 사용자가 소프트웨어의 "신선도(나이)"를 직관적으로 알 수 있습니다.
3. 버저닝이 중요한 이유¶
- 의존성 관리 (Dependency Management): npm, Maven, pip, Gradle 같은 패키지 매니저들이 서로 호환되는 라이브러리 버전을 자동으로 해석하고 다운로드할 수 있게 하는 핵심 기준입니다. (예:
"^1.2.0"-> 1.2.0 이상 2.0.0 미만의 버전 허용) - 의사 소통 (Communication): 개발팀 내부와 외부 사용자 간에 "이 업데이트를 적용해도 시스템이 망가지지 않을까?"에 대한 명확한 약속(Contract)입니다.
- 롤백 (Rollback) 및 추적: 특정 버전에서 크리티컬한 버그가 발견되었을 때, 문제없는 이전 버전으로 정확히 되돌릴 수 있는 기준점이 됩니다.