Semantic Versioning

샤워실의 바보·2024년 4월 27일
0
post-thumbnail

Semantic Versioning(의미론적 버전 관리)은 소프트웨어의 버전을 체계적으로 관리하기 위한 규칙 체계입니다. 이 방식은 소프트웨어의 버전을 명확히 하여, 개발자들이 의존하는 라이브러리나 패키지의 업데이트가 어떠한 영향을 미칠지 예측할 수 있도록 도와줍니다. 버전 번호는 세 부분으로 구성되며, 각각 Major, Minor, Patch 레벨을 나타냅니다.

Semantic Versioning의 구조

  1. Major 버전 (X.y.z):

    • 호환되지 않는 API 변경이 발생했을 때 증가합니다.
    • 예를 들어, 기존 함수의 매개변수를 변경하거나 제거하는 경우, 기존의 코드와 호환되지 않기 때문에 Major 버전을 올립니다.
  2. Minor 버전 (x.Y.z):

    • 기존 버전과 호환되면서 새로운 기능이 추가될 때 증가합니다.
    • 기존 API는 그대로 유지하면서 새로운 기능을 추가하는 경우가 이에 해당합니다.
  3. Patch 버전 (x.y.Z):

    • 기존 버전과 호환되는 버그 수정이 이루어졌을 때 증가합니다.
    • 소프트웨어의 안정성을 높이는 변경사항(예: 버그 수정, 보안 강화 등)이 포함됩니다.

의미론적 버전 관리의 중요성

Semantic Versioning을 사용하는 것의 주된 이유는 소프트웨어 관리의 예측 가능성을 높이는 것입니다. 이 시스템을 사용함으로써, 개발자는 단순히 버전 번호만 보고도 해당 업데이트가 기존 시스템에 어떤 영향을 미칠 수 있는지 파악할 수 있습니다. 예를 들어, Major 버전이 변경되었다면 주의 깊게 업데이트를 고려해야 할 것입니다.

사용 예

  • 1.0.01.0.1: Patch 레벨 증가, 버그 수정이 주를 이룸.
  • 1.0.01.1.0: Minor 레벨 증가, 새로운 기능이 추가되었지만 기존 기능과의 호환성은 유지됨.
  • 1.0.02.0.0: Major 레벨 증가, 기존 버전과 호환되지 않는 큰 변화가 있었음.

이런 체계적인 버전 관리 방식은 소프트웨어의 안정성을 유지하고, 대규모 프로젝트에서 여러 의존성을 관리하는 데 매우 중요합니다. 이로 인해 개발자는 업데이트에 따른 위험을 더 잘 관리하고, 필요한 경우 적절한 대응을 준비할 수 있습니다.

Semantic Versioning에서 ^ 기호는 주로 패키지 매니저에서 사용되며, 해당 버전 또는 그 이상의 버전 중 Major 버전이 동일한 최신 버전을 사용할 수 있도록 지정합니다. 즉, 처음 지정한 버전과 API 호환성을 유지하면서 최신 버전을 사용하고자 할 때 사용합니다.

^ 기호의 동작 방식:

  • ^1.2.31.2.3에서 시작하여 2.0.0 전까지의 모든 버전을 포함합니다. 여기서 1.x.x의 최신 버전까지 허용되지만, 2.0.0은 제외됩니다.
  • 이는 Minor와 Patch 레벨에서의 변경사항(예: 1.3.0, 1.2.4 등)은 허용하지만, Major 레벨 변경사항은 허용하지 않는다는 의미입니다.

사용 예시:

  • ^1.2.31.2.3, 1.2.4, 1.3.0, 1.5.9 등을 포함할 수 있지만, 2.0.0은 포함하지 않습니다.
  • ^0.3.00.3.0에서 시작하여 0.4.0 전까지의 모든 버전을 포함합니다. 0.x.x 범위 내에서만 허용됩니다.

^ 기호 사용의 중요성:

^ 기호를 사용하면 패키지의 호환성을 유지하면서도 자동으로 최신 패치와 마이너 업데이트를 받을 수 있으므로 보안 패치나 기능 개선 등을 쉽게 반영할 수 있습니다. 이는 소프트웨어가 최신 상태로 유지되면서도 큰 변경 없이 안정적으로 운영될 수 있게 돕습니다.

profile
공부하는 개발자

0개의 댓글