semver - Semantic Versioning
소프트웨어 버전 작성 (Software Versioning)
소프트웨어 버전 작성은 소프트웨어의 특정 상태를 식별하고 추적하기 위한 체계적인 방법입니다. 개발 과정에서 발생할 수 있는 혼란을 줄이고, 사용자 및 개발자 간의 소통을 원활하게 하기 위해서 일관된 버전 작성 기준이 필요합니다.
여러 버전 관리 방법 중 Semantic Versioning (유의적 버전 관리)이 가장 널리 사용되고 있습니다. 이번 글에서는 Semantic Versioning의 개념과 규칙을 자세히 알아보겠습니다.
Semantic Versioning이란?
Semantic Versioning(세만틱 버저닝)은 GitHub 공동 창립자인 Tom Preston-Werner가 제안한 소프트웨어 버전 관리 규칙입니다. 현재 공식 사양은 2.0.0 버전입니다.
버전은
주.부.수 (MAJOR.MINOR.PATCH)
형식으로 관리하며, 공개 API의 변경 사항에 따라 규칙적으로 버전을 증가시킵니다.예: 1.4.2→ Major: 1, Minor: 4, Patch: 2
🔢 버전 번호의 의미
버전 | 의미 | 예시 |
MAJOR | 하위 호환되지 않는 변경 발생 시 | 1.0.0 → 2.0.0 |
MINOR | 하위 호환되는 기능 추가/개선 시 | 1.0.0 → 1.1.0 |
PATCH | 버그 수정 등 사소한 변경 시 | 1.0.0 → 1.0.1 |
상세 규칙 정리
- 공개 API 정의 필수
- 공개 API는 코드나 문서로 명시되어야 하며, 이 변경 여부에 따라 버전이 올라갑니다.
- 버전 형식
X.Y.Z
형식 (모두 0 이상의 정수)- 예:
2.5.1
- 증가 규칙
- MAJOR 변경 시:
X
증가,Y
와Z
는 0으로 초기화 - MINOR 변경 시:
Y
증가,Z
는 0으로 초기화 - PATCH 변경 시:
Z
만 증가
- 불변성 (Immutability)
- 공개된 버전은 절대 수정하지 않아야 하며, 변경은 새로운 버전으로만 가능
- 0.x 버전의 의미
0.Y.Z
는 초기 개발 단계이며, API는 안정적이지 않음
- 버전 변화 기준
PATCH
: 버그 수정 (하위 호환 유지)MINOR
: 새 기능 추가, 개선, 하위 호환되는 deprecateMAJOR
: 하위 호환되지 않는 변경 (삭제, 변경 등)
- 선행(pre-release) 버전
alpha
,beta
,rc
등으로 표기- 예:
1.0.0-alpha
,1.0.0-rc.1
- 정식 버전보다 낮은 우선순위
- 빌드 메타데이터
+
기호로 표기, 정렬 순서에는 영향을 주지 않음- 예:
1.0.0+build.123
예시로 이해하기
1.0.0 # 첫 번째 안정 버전 1.0.1 # 버그 수정 1.1.0 # 새로운 기능 추가 2.0.0 # 하위 호환되지 않는 변경 2.0.0-alpha # 다음 주요 버전의 사전 배포 2.0.0+202308 # 빌드 메타 정보 포함
요약
- 버전은
주(主).부(部).수(修)
형식 (MAJOR.MINOR.PATCH
)
- 하위 호환을 깨뜨리는 변경 → MAJOR
- 새로운 기능, 개선 (호환 유지) → MINOR
- 버그 수정 → PATCH
- 사전 배포 / 메타 정보는 및
+
로 추가