콘텐츠로 이동

소프트웨어 버저닝 (Software Versioning)

소프트웨어 버저닝은 소프트웨어의 고유한 상태(버전)에 이름이나 번호를 부여하는 과정입니다. 이를 통해 개발자, 사용자, 패키지 관리자 등 시스템의 모든 참여자가 소프트웨어의 변경 이력과 호환성을 쉽게 파악할 수 있습니다.

1. 시맨틱 버저닝 (Semantic Versioning, SemVer)

가장 널리 사용되는 표준 버저닝 규약입니다. 버전 번호만 보고도 이전 버전과의 호환성 유지 여부, 변경의 규모를 예측할 수 있게 해줍니다.

기본 형식: Major.Minor.Patch (예: 1.4.2)

  1. Major (주 버전, 1.x.x)
    • 기존 버전과 호환되지 않는(Incompatible) API 변경, 큰 아키텍처 변화가 있을 때 올립니다.
    • 사용자가 업데이트할 때 코드를 수정해야 할 수도 있습니다.
    • Major 버전이 0(0.y.z)인 경우, 아직 초기 개발 단계(Alpha)이며 API가 언제든 바뀔 수 있음을 의미합니다.
  2. Minor (부 버전, x.4.x)
    • 기존 버전과 호환되는(Backward-compatible) 새로운 기능이 추가되었을 때 올립니다.
    • Major 버전은 그대로 두고 Minor 버전만 올라갔다면, 기존 사용자는 아무런 코드 수정 없이 업데이트해도 안전해야 합니다.
  3. Patch (수정 버전, x.y.2)
    • 기존 버전과 호환되는 버그 수정(Bug fixes)이 있을 때 올립니다.

추가 라벨 (Prerelease & Build metadata)

  • Prerelease: 1.0.0-alpha, 1.0.0-beta.1, 1.0.0-rc.1 처럼 정식 릴리즈 전의 버전을 표시합니다.
  • Build metadata: 1.0.0+20130313144700 처럼 빌드 시점의 정보(날짜, 커밋 해시 등)를 덧붙입니다.

2. 캘린더 버저닝 (Calendar Versioning, CalVer)

출시 날짜를 기반으로 버전을 매기는 방식입니다. 시간의 흐름이 중요한 소프트웨어(예: 운영체제, 정기적으로 업데이트되는 서비스)에서 주로 사용됩니다.

주요 형식 예시:

  • Ubuntu: YYYY.MM 형식을 사용합니다. (예: Ubuntu 22.04 = 2022년 4월 출시, Ubuntu 24.04 = 2024년 4월 출시)
  • JetBrains IDE: YYYY.MAJOR.MINOR (예: IntelliJ IDEA 2023.1.2)
  • Python (일부 프로젝트): YY.MM.Micro 등 다양한 변형이 존재합니다.

장점: 사용자가 소프트웨어의 "신선도(나이)"를 직관적으로 알 수 있습니다.


3. 버저닝이 중요한 이유

  • 의존성 관리 (Dependency Management): npm, Maven, pip, Gradle 같은 패키지 매니저들이 서로 호환되는 라이브러리 버전을 자동으로 해석하고 다운로드할 수 있게 하는 핵심 기준입니다. (예: "^1.2.0" -> 1.2.0 이상 2.0.0 미만의 버전 허용)
  • 의사 소통 (Communication): 개발팀 내부와 외부 사용자 간에 "이 업데이트를 적용해도 시스템이 망가지지 않을까?"에 대한 명확한 약속(Contract)입니다.
  • 롤백 (Rollback) 및 추적: 특정 버전에서 크리티컬한 버그가 발견되었을 때, 문제없는 이전 버전으로 정확히 되돌릴 수 있는 기준점이 됩니다.