Semantic Versioning이 생겨난 이유
소프트웨어 개발에서는 새로운 기능을 추가하거나 버그를 수정할 때마다 버전이 변경된다. 하지만 버전 관리에 일관된 기준이 없다면, 사용자나 개발자는 버전 숫자만 보고 어떤 변화가 있었는지 알기 어렵다. 이 문제를 해결하기 위해 Tom Preston-Werner(엄청난 사람인듯 하다.) 라는 사람이 만들었다고 한다. 그렇다면 Semantic Versioning이 버전 관리의 문제를 어떻게 해결하는지 자세히 알아보자.
Semantic Versioning(유의적 버전 관리, SemVer)이란?
Semantic Versioning(줄여서 SemVer)이란 소프트웨어 버전 번호를 체계적으로 관리하는 방식이다. 유의적이다 라는 말이 생소할 수 있는데 쉽게 풀의해보자면 "의미를 가지고 있다" 라는 뜻으로, 유의적 버전 관리란 버전 번호가 의미를 가지도록 관리하는 방식를 말한다.
그렇다면 Semantic Versioning은 어떤 형식으로 이루어져 있으며 어떻게 관리되는지 알아보자.
Semantic Versioning 형식
Semantic Versioning은 x.y.z 형식으로, 각 숫자는 점(.)을 기준으로 구분되며 각각의 의미를 가진다.
이 숫자들을 MAJOR.MINOR.PATCH로 나누어 설명할 수 있으며, 각 숫자의 의미는 다음과 같다.
- MAJOR (주 버전) : 하위 호환이 되지 않는 변경이 있을 때 증가
- MINOR (부 버전) : 하위 호환이 유지되는 기능이 추가될 때 증가
- PATCH (패치 버전) : 하위 호환이 유지되는 버그 수정이 이루어질 때 증가
Semantic Versioning의 버전 증가 규칙
아래 표와 같은 규칙을 기반으로 버전을 증가하게 되는데 문장으로 정리하자면 하위 호환성이 유지되면 MINOR 또는 PATCH 버전을 증가시켜며, 하위 호환이 깨지는 변경이 있다면 반드시 MAJOR 버전을 증가해야 한다.
변경 유형 | 예시 | 변경 이유 |
MAJOR 증가 | 1.0.0 → 2.0.0 | 이전 버전과 하위 호환되지 않는 변경이 포함됨 |
MINOR 증가 | 1.0.0 → 1.1.0 | 새로운 기능 추가, 기존 기능은 하위 호환됨 |
PATCH 증가 | 1.0.0 → 1.0.1 | 버그 수정, 기존 기능과 하위 호환됨 |
*Semantic Versioning의 BNF 문법 사용
BNF(Backus-Naur Form)란 문법을 형식적으로 표현하는 방법을 말한다. 규칙의 집합으로 이루어져 있으며, ::=(정의) 기호를 사용하여 구성 요소를 정의한다.
<규칙이름> ::= <정의된 내용>
// 예시
<문장> ::= <주어> <동사> <목적어>
<주어> ::= "Benjie는" | "그녀는" | "그는"
<동사> ::= "먹는다" | "본다" | "쓴다"
<목적어> ::= "사과를" | "책을" | "편지를"
// 예시를 통한 결과값
Benjie는 사과를 먹는다.
그녀는 책을 본다.
그는 편지를 쓴다.
하지만 자세한 내용은 아래 링크에 더 잘나와있다.!
유의적 버전 2.0.0
Semantic Versioning spec and website
semver.org
'코딩 > 개발지식 공부' 카테고리의 다른 글
SSE(Server-Sent Events)와 소켓(WebSockets)의 차이 (0) | 2025.01.30 |
---|---|
인터프리터(interpreter)와 컴파일러(compiler)에 대한 이야기 (4) | 2024.10.16 |
FLUX 아키텍쳐에 대해 알아보자 (2) | 2024.10.14 |
SOLID : 객체지향 설계 5가지 원칙 (6) | 2023.11.18 |