Home Semantic Versioning(SemVer)
Post
Cancel

Semantic Versioning(SemVer)

어느 정도 규모가 있는 소프트웨어를 개발할 때면 외부 라이브러리를 사용하게된다. 그리고 자연스럽게 라이브러리 의존성 문제를 접하게 된다. 의존성 문제는 라이브러리가 버전 문제로 서로 충돌하여 사용할 수 없게 되는 것이라 이해하면 쉽다.

이 문제를 해결하고자 나온 라이브러리 버전 명시 규칙이 있다.

라이브러리의 버전은 보통 a.b.c로 표기된다.

  • 첫 번째 a(Major) 버전이 오르면 기존 버전과 호환되지 않음
  • 두 번째 b(Minor) 버전이 오르면 새로운 기능이 추가된 경우
  • 세 번째 c(Patch) 버전이 오르면 자잘한 버그 수정이 있는 경우

예를 들면,

libC 1.2.1은 새로운 버전인 libC 2.1.1과 서로 호환되지 않는 API로 구성되어 있을 것이다.

libC 1.2.1 버전을 사용하는 A 라는 프로그램이 있다고 가정해보자. A 프로그램은 libC의 버전이 2.1.1로 오르더라도 계속해서 libC 1.2.1 버전을 사용하면서 프로그램의 안정성을 유지할 수 있다.

NPM package.json 의 SemVer

NodeJS에서 관리하는 라이브러리(패키지)의 버전 관리를 어떻게 하는지 알아보자.

  • ^2.2.1 : 2.2.1 이상 3.0.0 미만 (2.2.1 이상이면서 같은 Major 버전)
  • ~2.2.1 : 2.2.1 이상 2.3.0 미만 (2.2.1 이상이면서 같은 Major 버전)
  • >2.2.1 : 2.2.1 초과 (2.2.2 이상의 버전 사용)
  • 2.2.1 - 3.0.0 : 2.2.1 이상 3.0.0 이하

Tild(~)와 Caret(^)의 차이점

Tild(~)가 쓰였을 경우 버그가 수정된 최신 버전으로 업데이트 한다. ~2.2.1 버전이라면 2.2.* 의 버전을 가져온다.

Caret(^)이 쓰였을 경우 호환 가능한 최신 버전으로 업데이트 한다. ^2.2.1 버전이라면 2.. 의 버전을 가져온다.

npm semver calculator

This post is licensed under CC BY 4.0 by the author.