liminfo

SemVer Calculator

Semantic Versioning 버전 비교/범위 검증 도구

비교 결과

1.2.3 < 1.3.0

SemVer Calculator 소개

SemVer 계산기는 semver.org에서 정의하고 npm, Cargo, Composer 등 대부분의 현대 패키지 관리자에서 사용하는 시맨틱 버전 관리(SemVer) 표준을 다루기 위한 무료 도구입니다. 두 가지 모드를 제공합니다: 버전 A가 버전 B보다 크거나, 작거나, 같은지를 판단하는 버전 비교 모드, 그리고 ^1.2.0, ~2.3.1, >=3.0.0 같은 범위 조건을 버전 문자열이 만족하는지 확인하는 범위 테스트 모드.

패키지 관리자, DevOps 엔지니어, 오픈 소스 유지 관리자들은 소프트웨어 릴리즈의 변경 성격을 전달하기 위해 SemVer에 의존합니다. 메이저 버전 증가(1.x.x에서 2.x.x)는 호환성이 깨지는 변경을 의미하고, 마이너 버전 증가(x.1.x에서 x.2.x)는 하위 호환 새 기능을 의미하며, 패치 버전 증가(x.x.1에서 x.x.2)는 버그 수정을 의미합니다. 캐럿(^)과 틸드(~) 같은 범위 연산자를 이해하는 것은 package.json, Cargo.toml, composer.json 파일에서 올바른 의존성 제약을 작성하는 데 필수적입니다.

기술적으로, 도구는 v?MAJOR.MINOR.PATCH[-사전릴리즈][+빌드] 패턴에 대해 버전 문자열을 파싱하고 숫자 구성 요소를 순서대로(메이저, 마이너, 패치) 비교합니다. 사전 릴리즈 식별자는 버전의 우선순위를 낮춥니다 — 따라서 1.0.0-alpha는 1.0.0보다 낮습니다. 캐럿(^) 연산자는 가장 왼쪽의 0이 아닌 자릿수를 수정하지 않는 변경을 허용하며, 틸드(~) 연산자는 메이저와 마이너가 모두 지정된 경우 패치 수준 변경을 허용합니다.

주요 기능

  • 버전 비교 모드 — 버전 A가 버전 B보다 크거나, 작거나, 같은지 즉시 표시
  • 범위 테스트 모드 — ^, ~, >=, <=, >, = 연산자를 사용하여 버전이 범위를 만족하는지 확인
  • 캐럿(^) 범위: 동일한 메이저 버전을 유지하면서 마이너 및 패치 변경 허용
  • 틸드(~) 범위: 동일한 major.minor 버전 내에서 패치 수준 변경만 허용
  • 사전 릴리즈 식별자 지원 — 1.0.0-alpha, 1.0.0-beta, 1.0.0 같은 버전을 올바른 순서로 정렬
  • v 접두사 유무에 관계없이 버전 입력 허용 (예: v1.2.3과 1.2.3 모두 유효)
  • 실시간 결과 — 입력하는 즉시 비교 및 범위 결과 업데이트
  • 100% 클라이언트 사이드 계산 — 서버로 데이터가 전송되지 않음

자주 묻는 질문

시맨틱 버전 관리(SemVer)란 무엇인가요?

시맨틱 버전 관리는 버전 번호가 MAJOR.MINOR.PATCH 형식을 갖는 버전 관리 관례입니다. 호환되지 않는 API 변경 시 MAJOR를, 하위 호환 방식으로 기능을 추가할 때 MINOR를, 하위 호환 버그 수정 시 PATCH를 증가시킵니다. 사전 릴리즈 버전은 하이픈으로 표시할 수 있습니다(예: 1.0.0-alpha).

^ 연산자와 ~ 연산자의 차이는 무엇인가요?

캐럿(^)은 가장 왼쪽의 0이 아닌 자릿수를 수정하지 않는 변경을 허용합니다. 예를 들어 ^1.2.3은 >=1.2.3이고 <2.0.0인 모든 버전을 허용합니다. 틸드(~)는 마이너가 지정된 경우 패치 수준 변경을 허용합니다: ~1.2.3은 >=1.2.3이고 <1.3.0을 허용합니다. 캐럿이 더 관대하고(마이너 증가 허용), 틸드가 더 제한적입니다(패치만).

사전 릴리즈 버전의 비교는 어떻게 동작하나요?

SemVer 명세에 따르면 사전 릴리즈 버전은 연관된 정상 버전보다 우선순위가 낮습니다. 따라서 1.0.0-alpha < 1.0.0-alpha.1 < 1.0.0-alpha.beta < 1.0.0-beta < 1.0.0-beta.2 < 1.0.0-rc.1 < 1.0.0 순서입니다. 계산기는 major.minor.patch 구성 요소가 같을 때 사전 릴리즈 식별자를 사전 순으로 비교합니다.

^0.x.x는 ^1.x.x와 같은 방식으로 동작하나요?

아니요. 메이저 버전이 0이므로 가장 왼쪽의 0이 아닌 자릿수는 마이너 버전입니다. 따라서 ^0.2.3은 >=0.2.3이고 <0.3.0(1.0.0이 아님)을 허용합니다. 이는 0.x 버전이 불안정한 것으로 간주되고 마이너 증가에 호환성이 깨지는 변경이 포함될 수 있기 때문입니다. 마찬가지로 ^0.0.3은 >=0.0.3이고 <0.0.4만 허용합니다.

빌드 메타데이터 식별자란 무엇이고 버전 순서에 영향을 미치나요?

빌드 메타데이터는 플러스 기호 뒤에 추가됩니다(예: 1.0.0+20240101). SemVer 명세에 따르면 빌드 메타데이터는 버전 우선순위에 영향을 미치지 않습니다. 빌드 메타데이터만 다른 두 버전은 비교 목적으로 동일한 것으로 간주됩니다. 계산기는 빌드 메타데이터가 있는 버전 입력을 허용합니다.

설치된 패키지 버전이 package.json의 범위를 만족하는지 어떻게 확인하나요?

범위 테스트 모드로 전환하고, 범위 필드에 package.json의 범위(예: ^4.17.1)를 입력하고, 테스트 버전 필드에 설치된 버전을 입력하세요. 결과가 즉시 일치(Match) 또는 불일치(No Match)로 표시됩니다. 초록색 Match는 설치된 버전이 선언된 의존성 제약을 만족함을 의미합니다.

2.0.0이 ^1.2.3 범위를 만족하지 않는 이유는 무엇인가요?

캐럿 범위 ^1.2.3은 >=1.2.3이고 <2.0.0인 모든 버전을 허용합니다. 버전 2.0.0은 정확히 배타적 상한 경계에 있으므로 범위를 만족하지 않습니다. 이는 의도적인 것입니다. 메이저 버전 증가는 호환성이 깨지는 변경을 의미하며, 캐럿 연산자는 메이저 버전 경계를 넘는 것에 대해 의도적으로 보수적입니다.

유효하지 않은 버전 문자열을 입력하면 어떻게 되나요?

도구는 선택적 사전 릴리즈 및 빌드 메타데이터 접미사가 있는 MAJOR.MINOR.PATCH 형식의 버전을 기대합니다. 이 패턴과 일치하지 않는 문자열(예: "1.2"만 있거나 "latest")을 입력하면 비교에 "유효하지 않은 버전"이 표시되고 범위 테스트는 불일치를 반환합니다. 전체 세 부분 숫자 형식을 사용해야 합니다.