반응형
버저닝
버전 번호는 소프트웨어의 변경사항을 나타내며,
개발자와 사용자가 소프트웨어의 상태를 쉽게 이해하고 관리할 수 있도록 도와준다.
일반적인 버전 번호는 보통 세부분으로 나누어지며 아래와 같은 형태를 가진다.
MAJOR.MINOR.PATCH
1.2.20
세상엔 정말 다양한 버전 관리 방법이 있으며, 그 중 Semantic Versioning이 특히 오픈 소스 프로젝트에서 매우 널리 사용된다.
그래서 오늘은 이것에 대해 정리해보고자 한다.
유의적 버전 (Semantic Versioning)
위의 시맨틱 버저닝의 경우, 깃헙의 공동창업자인 Tom Preston-Werner이 만든 규칙이며, 아래 공식사이트에서 상세한 내용들을 읽어볼 수 있다.
이 글에선 이에 대해 요약해보려한다.
기본 규칙
버전 번호는 MAJOR.MINOR.PATCH 형식을 따른다.
- MAJOR: 주요 변경 사항을 나타낸다. 이전 버전과 호환되지 않는 변경이 있을 때 증가한다.
- MINOR: 새로운 기능이 추가되었지만, 이전 버전과 호환되는 경우 증가한다.
- PATCH: 버그 수정이나 보안 업데이트와 같은 작은 변경 사항이 있을 때 증가한다.
상세 규칙
- 0.y.z 버전 : 초기 개발 단계에서는 버전 번호는 0.y.z로 설정한다. 여기서 y와 z는 초기 개발 단계에서 적절히 증가한다.
0.y.z 버전은 안정적인 API를 제공하지 않는다는 것을 의미한다. - 1.0.0 버전 : 1.0.0 버전은 공개 API가 안정적이라는 것을 의미한다. 이 시점부터 Semantic Versioning 규칙이 엄격히 적용된다.
- MAJOR 버전 증가 : MAJOR 버전이 증가할 때는 이전 버전과 호환되지 않는 변경 사항이 포함된다. 예를 들어, API의 중요한 부분이 변경되거나 제거될 때 MAJOR 버전이 증가한다.
- MINOR 버전 증가 : MINOR 버전이 증가할 때는 새로운 기능이 추가되지만, 이전 버전과 호환성을 유지한다. 이 경우 새로운 기능은 기존의 기능을 방해하지 않는다.
- PATCH 버전 증가 : PATCH 버전이 증가할 때는 버그 수정이나 보안 패치와 같은 작은 변경 사항이 포함된다. 이러한 변경 사항은 기존의 기능을 방해하지 않고, 호환성을 유지한다.
- 사전 릴리즈 (Pre-release Versions) : 사전 릴리즈 버전은 정식 릴리즈 전에 공개되는 버전이다. 이는 일반적으로 -alpha, -beta, -rc(release candidate) 등의 접미사를 붙여 나타낸다. 예를 들어, 1.0.0-alpha, 1.0.0-beta, 1.0.0-rc.1 등이 있다.
- 사전 릴리즈 버전은 정식 릴리즈보다 낮은 우선순위를 가집니다. 예를 들어, 1.0.0-alpha는 1.0.0보다 낮은 버전이다.
- 접미사는 점(.)으로 구분하여 추가 정보를 제공할 수 있다. 예를 들어, 1.0.0-alpha.1과 1.0.0-alpha.2는 첫 번째와 두 번째 알파 릴리즈를 나타냅니다.
- 빌드 메타데이터 (Build Metadata) 빌드 메타데이터는 빌드나 배포 정보를 추가로 포함할 수 있다. 이는 + 기호 뒤에 추가되며, 버전 우선순위에는 영향을 미치지 않는다. 예를 들어, 1.0.0+build2012는 1.0.0과 동일한 버전이지만, 추가 빌드 정보를 포함한다.
사전 릴리즈 (Pre-release Versions) 에 대한 내용들
위에서 언급된 사전릴리즈에 관련하여,,
오픈소스 프로젝트들을 둘러보면 아래와 같은 단어들이 버전에 붙는 것을 자주 볼 수 있다.
1.0.0-alpha.1, 1.0.0-beta, 1.0.0-rc.1
이들은 각각 다음과 같은 뜻을 가진다.
Alpha (알파)
- 사용 시기: 소프트웨어의 초기 테스트 단계에서 사용된다. 이 단계에서는 새로운 기능이 첫 번째로 테스트되며, 많은 버그와 미완성 기능이 존재할 수 있다.
- 목적: 초기 사용자 피드백을 얻고, 크고 근본적인 문제를 해결하기 위해 사용된다.
- 예시: 1.0.0-alpha, 1.0.0-alpha.1 (첫 번째와 두 번째 알파 릴리즈)
Beta (베타)
- 사용 시기: 알파 테스트를 통과한 후, 소프트웨어가 더 넓은 범위의 사용자에게 테스트되는 단계이다. 이 단계에서는 기능이 거의 완성되고, 세부적인 버그 수정과 최적화가 주로 이루어진다.
- 목적: 더 넓은 사용자 기반으로부터의 실제 사용 사례를 통해 추가 피드백을 수집하고, 소프트웨어의 안정성을 높이기 위함.
- 예시: 1.0.0-beta, 1.0.0-beta.2 (첫 번째와 두 번째 베타 릴리즈)
Release Candidate (릴리즈 후보, RC)
- 사용 시기: 베타 테스트를 통과한 후, 최종 릴리즈 전에 발견될 수 있는 마지막 버그를 수정하기 위한 단계이다. 이 단계에서는 모든 기능이 완성되어 있으며, 주로 버그 수정과 성능 향상에 초점을 맞춘다.
- 목적: 최종 사용자 릴리즈 전에 소프트웨어의 안정성을 확보하는 것.
- 예시: 1.0.0-rc.1, 1.0.0-rc.2 (첫 번째와 두 번째 릴리즈 후보)
Nightly Builds (나이틀리 빌드)
- 사용 시기: 매일 개발 중인 최신 코드를 자동으로 빌드하여 생성되는 버전이다. 이 빌드는 개발이 진행되는 동안 지속적으로 업데이트되며, 가장 최신의 기능이나 수정 사항을 포함한다.
- 목적: 개발자들이 최신 변경 사항에 대해 빠르게 테스트하고 반응할 수 있게 하기 위함.
- 예시: 빌드 메타데이터를 사용하여 날짜나 빌드 번호를 포함시킬 수 있다. 예를 들어, 1.0.0+20240623 (2024년 6월 23일의 나이틀리 빌드)
예시
- 0.1.0: 초기 개발 단계. 안정적인 API를 제공하지 않음.
- 1.0.0: 첫 번째 안정 버전. 공개 API가 확립됨.
- 1.1.0: 새로운 기능이 추가된 버전. 기존 기능과 호환됨.
- 1.1.1: 버그가 수정된 버전. 기존 기능과 호환됨.
- ex) 기존 버전과 호환되며, 검색 기능이 추가됨.
- 2.0.0: 주요 변경 사항이 포함된 버전. 이전 버전과 호환되지 않음.
- ex) 기존 인증 시스템을 완전히 새로운 시스템으로 교체하여 이전 버전과 호환되지 않음
- 1.0.0-alpha: 1.0.0 버전의 알파 릴리즈.
- 1.0.0-beta: 1.0.0 버전의 베타 릴리즈.
- 1.0.0-rc.1: 1.0.0 버전의 첫 번째 릴리즈 후보.
- 1.0.0+202406231600: 1.0.0 버전과 동일하지만, 빌드 메타데이터가 포함된 버전 *(2024년 6월 23일의 나이틀리 빌드)
npm 사용 예시
npm으로 버전관리를 할 경우,
아래 명령어들을 통해 각각의 버전을 올릴수 있다.
npm version major
npm version minor
npm version patch
보통 릴리즈 브랜치로 코드가 올라가기 직전 위 명령어를 통해 코드의 브랜치를 관리한다.
반응형
'제가 왜 코딩을 하고 있을까요? > other' 카테고리의 다른 글
composer 설치 명령어 (0) | 2024.11.26 |
---|---|
Homebrew 설치 명령어 (0) | 2024.11.26 |
git submodule 당겨오기 (0) | 2024.06.19 |
docker 설치 명령어들 정리 (0) | 2024.06.12 |
IntelliJ RDS 연결 오류 with ssh 터널링, clusterInstanceHostPattern enableClusterAwareFailover (0) | 2024.05.29 |
댓글