[SemVer] 시맨틱 버저닝, 소프트웨어 버전 관리
semantic versioning
소프트웨어 개발에서 여러 프로그램이 서로 연결되어 작동하는 의존성은 복잡한 문제들을 만들기도 한다.
이를 의존성 지옥이라고 부르기도 하는데 이런 문제 때문에 개발자들이 어려움을 겪는다.
이러한 문제를 해결하기 위해 등장한 것이 바로 시맨틱 버저닝(Semantic Versioning, SemVer)이다.
SemVer는 버전 번호를 통해 소프트웨어 변경 사항을 명확하게 전달하는 표준화된 시스템이다.
1. 시맨틱 버저닝이란?
SemVer는 MAJOR.MINOR.PATCH (X.Y.Z) 형식의 버전 번호를 사용한다.
여기서 X, Y, Z는 음수가 아닌 정수이며 앞에 0이 붙지 않는다.
이 형식은 버전 번호를 컴퓨터가 쉽게 인식할 수 있게 하여 자동으로 의존성을 관리하는 데 도움을 준다.
2. 버전 번호, 어떻게 올리나?
SemVer의 핵심은 프로그램의 공개 API 변경에 따라 버전 번호 각 부분을 올리는 규칙에 있다.
- MAJOR (X)
- API가 크게 변경되어 기존 방식이 작동하지 않을 때
- MINOR와 PATCH는 0으로 재설정
- 예:
1.x.x → 2.0.0
- MINOR (Y)
- 기존 기능과 호환되는 새로운 기능 추가
- 기존 기능을 deprecated 처리할 때도 포함
- PATCH는 0으로 재설정
- 예:
1.1.x → 1.2.0
- PATCH (Z)
- 기존 기능과 호환되는 버그 수정
- 예:
1.1.1 → 1.1.2
버전 증분 규칙 표:
| 버전 요소 | 올리는 시점 | API 영향 | 하위 버전 재설정 여부 | 예시 |
|---|---|---|---|---|
| MAJOR (X) | 호환 불가 변경 | 기존 API 사용 불가 | MINOR, PATCH 0으로 재설정 | 1.2.3 → 2.0.0 |
| MINOR (Y) | 새로운 기능 추가 | 기존 API와 호환 | PATCH만 0으로 재설정 | 1.2.3 → 1.3.0 |
| PATCH (Z) | 버그 수정 | 기존 API와 호환 | 없음 | 1.2.3 → 1.2.4 |
3. 특별한 규칙
- 초기 개발 (0.y.z): 언제든 변경 가능, 안정적이지 않음
- 안정적 시작 (1.0.0): API가 완성되고 안정적 사용 가능
- 릴리스 불변성: 한번 공개된 버전은 수정 불가, 변경 시 새로운 버전 부여
- 사전 릴리스 & 빌드 메타데이터
1.0.0-alpha: 정식 전 불안정 버전1.0.0+build.123: 빌드 정보 포함
4. 버전 우선순위
버전 우선순위는 MAJOR → MINOR → PATCH 순으로 숫자를 비교하여 결정한다. 사전 릴리스 버전은 일반 버전보다 우선순위가 낮다. 패키지 관리자가 올바른 버전을 선택하는 데 필수적인 규칙이다.
5. SemVer를 사용해야 하는 이유
- 명확한 의사소통: 버전 번호만으로 변화 내용을 파악 가능
- 간소화된 의존성 관리: 버전 불일치로 인한 문제 감소
- 책임 있는 개발: API 변경 시 더 신중하게 결정
6. SemVer 적용 실용 팁
- 저장소만 있고 외부 공개 안 한다면 엄격히 지키지 않아도 무방
- 초기 개발 단계라도 SemVer 적용을 권장
- 시작 버전은
0.1.0으로 설정 - 기능 추가 시 MINOR 증가 (
0.2.0,0.3.0등) - 버그 수정 시 PATCH 증가 (
0.1.1,0.1.2등) - 정식 공개 및 안정성 보장 시
1.0.0으로 변경 후 규칙 지속 적용
Git 태그로 릴리스 버전 관리 (예:
git tag v0.2.0). Conventional Commits, semantic-release 사용 (버전 자동 증가 + changelog 생성). README에 버전 관리 방식을 명확히 기록
결론
시맨틱 버저닝은 소프트웨어 버전 관리를 위한 강력하고 예측 가능한 틀을 제공한다. 명확한 의사소통, 효율적인 의존성 관리, 책임 있는 개발을 가능하게 하여 소프트웨어 생태계의 건강과 안정성에 기여한다.
모든 프로젝트에서 SemVer를 채택하는 것은 더 나은 개발 관행과 신뢰할 수 있는 소프트웨어 구축의 중요한 약속이다.
참고자료
- SemVer 공식 스펙 (버전 규칙, 버전 증가 조건 등) (semver.org)
- 버전 체계 개념에 대한 위키 설명 (en.wikipedia.org)
- What is Semantic Versioning? - Syntax 팟캐스트 클립 (YouTube)
