← 패키지 목록

Semver

인증된 제출자

composer/semver

제출자 이우진
최신 v3.4.4라이센스 MIT배포 2026년 7월 6일
DevOps

버전 비교 라이브러리로, 유틸리티, 버전 제약 파싱 및 유효성 검사 기능을 제공합니다.

composer/semver README

버전 비교 라이브러리로, 유틸리티, 버전 제약 파싱 및 유효성 검사를 제공합니다.

가능한 한 semver(시맨틱 버저닝) 규칙을 따르지만, PHP의 version_compare 동작 및 하위 호환성으로 인해 semver 사양을 완전히 엄격하게 구현하지는 않습니다.

원래 composer/composer 프로젝트의 일부로 작성되었으며, 현재는 독립 라이브러리로 분리되어 제공됩니다.

Continuous Integration PHP Lint PHPStan


설치

아래 명령어로 최신 버전을 설치합니다:

composer require composer/semver

요구 사항

  • PHP 5.3.2 이상 (최신 버전의 PHP 사용을 강력히 권장합니다)

버전 비교 방식

버전이 어떻게 비교되는지에 대한 자세한 내용은 getcomposer.org 문서의 Versions 항목을 참고하세요.


기본 사용법

유효성 검사 / 정규화

Composer\Semver\VersionParser 클래스는 버전 및 제약 조건의 파싱, 정규화, 유효성 검사를 위한 메서드를 제공합니다.

숫자 버전은 내부적으로 4개 구성 요소 형식으로 정규화됩니다 (예: 1.2.31.2.3.0). 이는 version_compare와의 호환성 및 내부 일관성을 위한 처리이며, 정규화된 버전 문자열은 최종 사용자에게 그대로 노출하지 않는 것이 좋습니다.

버전 관련 메서드:

  • isValid($version)
  • normalize($version, $fullVersion = null)
  • normalizeBranch($name)
  • normalizeDefaultBranch($name)

제약 조건 관련 메서드:

  • parseConstraints($constraints)

안정성 관련 메서드:

  • parseStability($version)
  • normalizeStability($stability)

버전 비교

Composer\Semver\Comparator 클래스는 두 버전을 비교하는 정적 메서드를 제공합니다:

  • greaterThan($v1, $v2)$v1 > $v2
  • greaterThanOrEqualTo($v1, $v2)$v1 >= $v2
  • lessThan($v1, $v2)$v1 < $v2
  • lessThanOrEqualTo($v1, $v2)$v1 <= $v2
  • equalTo($v1, $v2)$v1 == $v2
  • notEqualTo($v1, $v2)$v1 != $v2

각 메서드는 두 버전 문자열을 인수로 받아 bool 값을 반환합니다. 사용 예시:

use Composer\Semver\Comparator; // 1.25.0 이 1.24.0 보다 큰지 확인 Comparator::greaterThan('1.25.0', '1.24.0'); // true

Semver

Composer\Semver\Semver 클래스는 버전 제약 조건 충족 여부 확인 및 정렬 메서드를 제공합니다:

  • satisfies($version, $constraints) — 특정 버전이 제약 조건을 만족하는지 확인
  • satisfiedBy(array $versions, $constraint) — 버전 배열 중 제약 조건을 만족하는 항목 반환
  • sort($versions) — 버전 배열을 오름차순 정렬
  • rsort($versions) — 버전 배열을 내림차순 정렬

Intervals

Composer\Semver\Intervals 정적 클래스는 복잡한 제약 조건을 다루거나, 제약 조건에서 버전 구간 정보를 읽을 때 유용한 유틸리티를 제공합니다:

use Composer\Semver\Intervals; // $candidate가 $constraint의 부분집합인지 확인 Intervals::isSubsetOf(ConstraintInterface $candidate, ConstraintInterface $constraint); // $a와 $b의 교집합 존재 여부 확인 ($a->matches($b)와 동일) Intervals::haveIntersections(ConstraintInterface $a, ConstraintInterface $b); // 복잡한 멀티 제약 조건을 가능한 한 작은 단위로 병합하여 최적화 // 단, 처리 속도가 느릴 수 있으며 결과 제약 조건에는 사람이 읽기 좋은 // prettyConstraint가 설정되지 않습니다 Intervals::compactConstraint(ConstraintInterface $constraint); // 주어진 제약 조건을 숫자 구간 배열과 브랜치 제약 배열로 변환 Intervals::get(ConstraintInterface $constraint); // 제약 조건 처리가 끝난 후 메모이제이션 캐시 초기화 Intervals::clear();

각 메서드의 상세 동작은 클래스의 docblock 주석을 참고하세요.


라이선스

composer/semver는 MIT 라이선스를 따릅니다. 자세한 내용은 LICENSE 파일을 확인하세요.