Overview
Semantic Versioning (SemVer)는 소프트웨어의 버전을 의미 있게 관리할 수 있도록 도와주는 버전 체계이다.
단순한 숫자 나열이 아니라 버전 번호에 의미를 부여함으로써, 사용자와 개발자 모두가 변경의 영향 범위를 쉽게 파악할 수 있도록 설계되었다.
SemVer는 다음과 같은 형식으로 구성된다.
MAJOR.MINOR.PATCH
MAJOR
: 호환되지 않는 변경이 있을 때 증가MINOR
: 호환되는 새로운 기능이 추가될 때 증가PATCH
: 호환되는 버그 수정이 이루어졌을 때 증가
이러한 규칙은 버전의 일관성을 유지하면서도, 팀 간 협업 및 라이브러리 소비자와의 신뢰 있는 계약(contract) 을 제공하는 데 핵심 역할을 한다.
또한, alpha, beta, rc
와 같은 Pre-release 버전, 그리고 +build
와 같은 빌드 메타데이터를 통해 개발 과정에서의 다양한 상태를 명확하게 표현할 수 있다.

Semantic Versioning (SemVer)란?
Semantic Versioning(SemVer)은 소프트웨어 릴리스에 의미 있는 버전 번호를 할당하는 데 사용되는 버전 관리 체계이다. 이는 개발자와 사용자가 새 릴리스의 변경 사항과 프로젝트에 미치는 잠재적 영향을 이해하는 데 도움이 된다.
SemVer 형식
SemVer의 버전 번호는 다음 형식을 따른다.
MAJOR.MINOR.PATCH
- MAJOR: 호환되지 않는 변경을 수행할 때 증가
- 예: 1.0.0 → 2.0.0
- MINOR: 이전 버전과 호환되는 기능을 추가하면 증가
- 예: 1.0.0 → 1.1.0
- PATCH: 이전 버전과 호환되는 버그를 수정하면 증가
- 예: 1.0.0 → 1.0.1
주요 개념
Backward Compatibility
- MAJOR 릴리스로 인해 기존 통합이 중단될 수 있다.
- MINOR 릴리스는 기존 동작을 중단하지 않고 새로운 기능을 추가한다.
- PATCH 릴리스는 새로운 기능을 추가하거나 중단하지 않고 문제를 해결한다.
Pre-release Versions
- 하이픈과 식별자를 추가하여 표시:
1.0.0-alpha
,1.0.0-beta.1.
- 버전이 아직 안정적이지 않으며 테스트용임을 나타낸다.
Build Metadata
- '+' 및 메타데이터:
1.0.0+build123
을 추가하여 표시된다. - 빌드 또는 배포 관련 세부 정보에 사용된다(버전 우선 순위에서는 무시됨).
SemVer의 규칙
초기 개발
- 버전은
0.y.z
(예:0.1.0
)에서 시작된다. - 첫 번째 안정 릴리스(
1.0.0
)까지는 브레이킹 체인지가 자주 발생할 것으로 예상된다.
버전 우선순위
- 우선순위는 숫자로 계산된다.
- 예:
1.0.0
>0.9.9
1.2.3-alpha
<1.2.3
버전 안정성
- MAJOR 번호의 변경은 주요 변경 사항이 포함된 새 버전을 나타낸다.
- MINOR 업데이트는 프로젝트와 호환되지 않는 종속성을 도입하지 않는 한 채택해도 안전하다.
SemVer를 사용해야 하는 이유
- 명확성: 변경 사항의 유형과 영향을 명확하게 이해할 수 있다.
- 호환성: 종속성 간의 원활한 통합을 보장한다.
- 자동화: 종속성 관리자와 같은 도구를 사용하여 버전 업데이트를 자동으로 처리할 수 있다.
마무리
버전 번호는 단순한 숫자가 아니다.
의미 있는 버전 관리 체계인 SemVer를 도입하면, 프로젝트의 유지보수성, 협업 효율성, 그리고 사용자 신뢰도 모두 크게 향상될 수 있다.
특히 오픈소스 라이브러리나 마이크로서비스 환경에서는,
호환성 보장과 안전한 자동화 배포를 위해 SemVer는 사실상의 표준이라고 할 수 있다.
다음 프로젝트에서 1.0.0을 선언하기 전에, 진짜로 API가 안정적인지 다시 한번 돌아보자.
그리고 2.0.0을 내보낼 때, 사용자에게 어떤 변화가 생기는지 꼭 문서로 함께 알려주자.
버전은 약속이며, SemVer는 그 약속을 지키는 방법입니다.
Reference
'IT 용어' 카테고리의 다른 글
[IT 용어 5.] CI/CD란? (2) | 2024.11.25 |
---|---|
[IT 용어 3.] JWT(JSON Web Tokens)란? (0) | 2024.11.18 |
[IT 용어 2.] 어플라이언스(Appliance)란? (4) | 2024.11.17 |
[IT 용어 1.] Devops, SRE, Cloud/System Engineer (8) | 2024.11.14 |