모듈 버전 번호

모듈 버전 번호

모듈 개발자는 버전 번호의 각 부분을 써서 그 버전의 안정성하위 호환성을 알려 줍니다. 새 릴리스를 낼 때마다 모듈의 릴리스 버전 번호는 직전 릴리스 이후 모듈에 어떤 변화가 있었는지를 구체적으로 반영해요. 외부 모듈을 쓰는 코드를 개발할 땐 버전 번호로 그 모듈의 안정성을 가늠할 수 있고, 내 모듈을 개발할 땐 내 버전 번호가 다른 개발자에게 내 모듈의 안정성과 하위 호환성을 알려 주는 역할을 합니다. 이 글에서는 모듈 버전 번호가 무엇을 의미하는지 정리합니다.

출처: Go 공식 문서

시맨틱 버저닝 모델

릴리스된 모듈은 시맨틱 버저닝(semantic versioning) 모델의 버전 번호와 함께 게시됩니다. 버전 번호의 각 부분이 모듈의 안정성과 하위 호환성을 어떻게 나타내는지는 아래 표와 같습니다.

버전 단계 예시 개발자에게 전하는 메시지
개발 중 (In development) v0.x.x 모듈이 아직 안정적이지 않으니, API가 바뀔 수 있다. 안정적인 API를 원한다면 아직 쓰지 않는 게 좋다.
사전 릴리스 (Pre-release) vx.x.x-beta.2 이 버전은 아직 준비 중이며, 이전 버전과 호환되지 않을 수 있다.
Minor 버전 vx.4.x 새 기능이 추가되지만 이전 버전과 하위 호환된다.
Patch 버전 vx.x.1 하위 호환되는 버그 수정이 들어 있다.
Major 버전 v2.0.0 이전 버전과 호환되지 않는 변경이 있다.

버전 번호의 역할

개발자가 자신의 코드에서 외부 모듈을 사용할 때, 업그레이드를 고려한다면 버전 번호로 외부 모듈의 안정성을 파악할 수 있습니다. 내 모듈을 개발할 때는 그 반대로, 내 버전 번호가 다른 개발자들에게 내 모듈의 안정성과 하위 호환성을 신호로 전달하죠.

시맨틱 버저닝 모델에서 각 부분을 살펴볼게요.

  • Major 버전 — 하위 호환되지 않는 변경이 있을 때 올라갑니다. 예를 들어 모듈의 메이저 버전이 올라가면 사용자는 자기 코드를 바꿔야 할 수 있어요. 메이저 버전 2 이상이 되면 모듈 경로에도 메이저 버전이 붙습니다.
module example.com/mymodule/v2 v2.0.0
  • Minor 버전 — 하위 호환되는 새 기능이 추가될 때 올라갑니다.
vx.4.x
  • Patch 버전 — 하위 호환되는 버그 수정이 있을 때 올라갑니다.
vx.x.1

v0과 사전 릴리스

  • v0 번호(v0.x.x) — 메이저 버전 0은 모듈이 아직 안정적이지 않다는 뜻입니다. 이 시점에는 언제든 호환되지 않는 변경이 일어날 수 있어요.
  • 사전 릴리스 버전 — 안정성이 보장되지 않는 준비 중인 릴리스입니다.
vx.x.x-beta.2

더 알아보기 (Learn more)

  • 코드에서 외부 패키지를 사용할 때 의존성을 관리하는 법은 'Managing dependencies'를 보세요.
  • 모듈을 게시할 때 버전 번호를 달고 저장소에 태그를 거는 절차는 "Publishing a module"을 참고하세요.
  • 시맨틱 버저닝 자체에 대한 자세한 규칙은 semver.org를 확인하세요.