Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

제품 릴리스 의존 관계

extensions.product-dependencies는 제품 릴리스(Product Release)가 다른 제품의 어떤 버전과 함께 동작할 수 있는지 선언합니다. Apollo는 여러 릴리스의 매니페스트로 의존 관계를 구성하고, 배포 환경의 버전들이 선언한 제약을 만족하는지 평가합니다. 새 버전으로 바꿀 때도 관련 제약을 계속 충족해야 합니다.

필드와 예시

다음은 PostgreSQL의 특정 버전 범위를 요구하는 선언 예시입니다.

extensions:
  product-dependencies:
    - product-group: org.postgresql
      product-name: postgresql
      minimum-version: 9.3.6
      maximum-version: 9.6.x
      optional: false

목록의 순서는 의미가 없습니다. 실제 제품의 그룹과 이름을 사용해야 합니다.

필드의미
product-group의존 제품의 매니페스트에 선언한 그룹입니다. 필수입니다.
product-name의존 제품의 이름입니다. 필수입니다.
minimum-version포함되는 최저 버전입니다. 비교 가능한 버전을 사용합니다.
maximum-version포함되는 상한을 지정하는 버전 매처입니다.
recommended-version권장 버전입니다. 지정하면 상하한 범위를 만족해야 합니다.
optional선택적 의존 관계 여부입니다. 기본값은 false입니다.

운영 선언에서는 필요한 상하한을 명시하여 허용 범위를 분명히 합니다. 기존 extensions의 차트와 아티팩트 선언은 그대로 유지합니다.

버전 범위 판정

후보 버전 v는 하한 이상이어야 합니다. 상한은 maximum-version 매처와 일치하는 Release 버전 upper-bound 중 upper-bound >= v인 값이 있는지로 판정합니다. 두 조건을 모두 만족해야 합니다.

위의 9.3.6 이상, 9.6.x 이하 예시에서는 다음과 같이 구분됩니다.

판정버전
허용9.3.6, 9.4.0, 9.4.2-rc1, 9.6.0-rc1, 9.6.1-22-g1a2b3c4
하한 미달9.2.0
상한 초과10.0.0, 11.1.2-rc2, 9.7.0-1-gabcdef
비교 불가9.5.0-custom-branch

상한이 정확한 1.2.3이면 1.2.3과 1.2.3-rc4는 허용하지만 1.2.4와 1.2.3-4-gabcdef는 허용하지 않습니다. 같은 기본 버전의 일반 스냅샷은 Release보다 더 크기 때문입니다.

선택적 의존 관계

optional: true이면 의존 제품이 환경에 없어도 됩니다. 그러나 실제 설치되어 있으면 버전 범위를 만족해야 합니다. 관리 대상으로 선언만 하고 아직 설치하지 않은 제품은 존재하는 선택적 의존성으로 취급하기에 충분하지 않습니다. 선택적 의존 관계는 대상 개체의 설치 제거를 막지 않습니다.

선택적 의존 관계 목록이 애플리케이션의 모든 유효한 구성을 설명하지는 않습니다. 가상의 nice-service가 PostgreSQL 또는 Cassandra 중 하나에 데이터를 저장한다고 가정하면, 둘을 각각 선택적 의존성으로 선언하여 없는 쪽이 배포를 막지 않도록 할 수 있습니다. 그래도 둘 다 없는 구성이 동작한다는 뜻은 아닙니다.

제품 편집자는 유효한 구성 조합을 별도로 정의해야 합니다. 환경 편집자는 실제로 사용하는 저장소를 관리 대상으로 지정하고 설치하여 그 버전 제약을 적용해야 합니다.

설치 순서

  • 순환 관계에 포함되지 않은 필수 의존성은 먼저 정상 설치되어야 합니다. A가 B를 필수로 요구하고 B에서 A로 이어지는 의존 경로가 없으면 B를 먼저 설치합니다.
  • A가 B와 C를 요구하되 B와 C 사이에 관계가 없으면 B와 C 중 어느 것을 먼저 설치할지는 보장하지 않습니다.
  • 선택적 의존성은 본 제품보다 먼저 설치된다는 보장이 없습니다. A가 B를 선택적으로 요구하면 A가 먼저 설치될 수 있습니다.
  • A가 B, B가 C, C가 A를 필수로 요구하는 순환 관계에는 설치 순서를 보장하지 않습니다.

버전 제약과 설치 순서 보장은 별개이므로 선택적 또는 순환 의존성을 이용해 시작 순서를 강제하지 않습니다.