큰 꿈은 파편이 크다!!⚡️

시맨틱 버전 관리 (Semantic Versioning) 본문

기타 CS

시맨틱 버전 관리 (Semantic Versioning)

wood.forest 2021. 9. 27. 09:55

소프트웨어 프로젝트를 배포(Release)할 때 버전 관리를 어떻게 할까?

팀마다 정해진 규칙이 있겠지만, 알려진 버전 변경 규칙 중 하나인 Semantic Versioning (Semver) 에 대해 알아보려 한다. Semantic이란 '의미론적'이라는 뜻인데, 즉 각 버전 넘버에 의미를 부여하고 있음을 나타낸다고 생각한다.

해당 포맷은 Major.Minor.Patch 을 따르며, Node.js, npm 등에서 사용하고 있다.

 

종류

Major version: 이 버전을 올리면 뒤의 Minor, Patch 버전은 0으로 설정한다. (1.4.9 -> 2.0.0) 하위 호환되지 않는 API 변경사항이 포함된다.

Minor version: 하위 호환성이 보장되는 업데이트이며, 주로 신규 기능이 추가되었을 때 Minor 버전을 올린다. 이 버전을 올리면 Patch 버전은 0으로 설정한다. (1.2.33 -> 1.3.0) 

Patch Versions: 주로 버그 수정 시 업데이트한다. 즉, 기능적 수정은 포함되지 않는다. 의외로 헷갈리게 되는 부분이, . 이하 숫자를 '소수점'으로 보는것이 아니라는 점이다. 만약 2.6.9 버전 이후 버그를 수정하면 2.7.0이 아니라, 2.6.10으로 업데이트한다. 마찬가지로, 1.0.2와 1.0.10 사이에서는 1.0.10이 더 최신 버전임을 의미한다.

 

💡 주의점

- 1.0.0이 최초의 프로덕션 배포 버전이며, 0.x.x 버전은 모두 development draft를 의미한다.

- 최초의 버전은 0.0.1이 아닌 0.1.0이다. 아무런 버그 수정이 일어나지 않았기 때문이다.

- Pre-release 하는 경우 patch 버전 뒤에 -(하이픈)를 붙이고, Build 버전은 +를 추가하여 관리한다. (1.0.0-alpha.1, 1.0.0+build.1)

 

 

 

 

버전 범위 지정

package.json에서 ^ 또는 ~가 prefix된 버전을 본 적이 있을 것이다. 두 기호는 버전의 범위를 나타낸다.

^ 캐럿 (Caret)

가장 왼쪽에 0이 아닌 버전의 하위 범위 변경을 허용한다.

  • ^1.x.x: minor, patch 버전 업데이트 허용
  • ^0.1.x: patch 업데이트 허용
  • ^0.0.1: 업데이트를 허용하지 않음

 

~ 틸드 (Tilde) 

Minor version이 지정되어 있다면 patch 버전 변경을 허용

Minor version이 지정되어 있지 않다면 minor 버전 변경을 허용 

  • ~1.1.x : patch 버전 업데이트 허용 (1.1.0 <= ~1.1.x < 1.2.0)
  • ~2: minor 버전이 지정되어있지 않으므로 minor 변경을 허용  (2.0.0 <= ~2 < 3.0.0)

 

 

 

 

npm에서 알아보기

실제 SemVer을 사용하는 패키지들을 여기에서 확인할 수 있다

npm i react --save: ^최신 버전으로 설치됨 (^2.0.0)

npm i react --save-exact: 최신 버전으로 설치됨 (2.0.0)

 

 

 

 

참고

- https://www.geeksforgeeks.org/introduction-semantic-versioning/

- https://velog.io/@iamjoo/Semantic-Versioning%EC%9D%B4%EB%9E%80

반응형