Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

Apollo의 제품, 릴리스와 버전

Apollo 제품(Product)은 배포할 수 있는 소프트웨어 구성 요소입니다. 배포 환경에 설치되는 개별 서비스 등을 표현할 수 있으며, 제품의 각 버전은 제품 릴리스(Product Release)로 게시합니다.

릴리스에는 제품의 코드와 Apollo가 제품을 관리할 때 사용하는 메타데이터가 포함됩니다. 제품의 정의, 특정 버전의 릴리스, 환경에서 실행되는 배포 개체는 서로 다른 대상입니다.

제품과 실행 인스턴스의 구분

대상의미
제품배포할 소프트웨어 구성 요소의 식별 단위
제품 릴리스코드와 관리 메타데이터를 담은 특정 버전
배포 개체환경에 존재하는 제품의 개별 인스턴스

가상의 제품을 두 환경에 설치했다면 제품의 식별자는 같아도 각 환경의 배포 개체와 실제 실행 버전은 다를 수 있습니다. 현재 버전을 조사할 때에는 제품의 최신 릴리스 목록과 개별 대상이 보고한 상태를 함께 구분해서 봅니다.

Maven 좌표로 식별하기

Apollo는 Maven 좌표(Maven coordinates)를 사용하여 제품과 릴리스를 식별합니다. 전체 좌표는 다음 형식입니다.

group:artifactId:version
구성 요소의미예
group제품을 소유하는 조직을 나타내는 그룹 이름com.palantir
artifactId그룹 안에서 제품을 식별하는 이름wordpress, apollo-demo-app
version배포 개체에서 실행할 제품 버전1.1.0, 1.1.0-rc1

같은 그룹에 여러 제품을 둘 수 있으며, artifactId는 그룹 안에서 고유해야 합니다. 운영에서 혼동을 줄이기 위해 Apollo 전체에서도 알아보기 쉬운 고유한 제품 이름을 사용하는 편이 좋습니다.

다음은 좌표의 형식을 보여 주는 예입니다.

com.palantir.apollo-developers:apollo-demo-app:1.0.0
com.helmcharts.bitnami.redis:redis:1.1.3-rc1
com.hashicorp:vault:15.8.6

실제 사용할 좌표는 게시한 제품과 릴리스의 값으로 정합니다.

제품 식별자

제품은 좌표의 group:artifactId 부분으로 고유하게 식별하며, 이를 ProductId라고 합니다.

com.palantir.example:new-product

ProductId는 제품을 가리키고, 여기에 버전을 붙인 전체 Maven 좌표는 특정 릴리스를 가리킵니다.

Apollo는 Helm charts와 Assets를 제품 유형으로 지원합니다. 제품은 내부 저장소에서 가져와 CI 파이프라인의 일부로 게시하거나, 오픈 소스 아티팩트 저장소에서 가져올 수 있습니다.

각 제품에는 소유 팀이 있습니다. 팀 구성원은 제품의 유지보수 시간대와 승격 파이프라인 구성 등의 관리 책임을 맡습니다.

제품 릴리스

제품 릴리스는 버전을 가진 코드 산출물이며 제품 카탈로그에 게시됩니다. 같은 제품의 다른 릴리스는 ProductId는 같고 버전 부분이 다릅니다.

com.palantir.apollo-developers:apollo-demo-app:1.0.0
com.palantir.apollo-developers:apollo-demo-app:1.1.0
com.palantir.apollo-developers:apollo-demo-app:1.2.0

제품 홈에서는 같은 ProductId로 게시된 릴리스들을 함께 볼 수 있습니다. 일반적으로 같은 제품의 여러 릴리스를 같은 팀이 책임집니다.

왼쪽 메뉴에서 제품 이름을 선택한 뒤 Releases 탭을 열면 해당 제품의 릴리스 목록을 확인할 수 있습니다.

릴리스를 게시하는 일, 채널에 추가하는 일, 특정 환경에서 그 버전으로 업그레이드하는 일은 다른 단계입니다. 환경이 구독하는 채널과 제약 조건에 따라 실제로 적용할 수 있는 릴리스가 결정됩니다.

제품 카탈로그

제품 카탈로그(Product catalog)는 Apollo 허브에 게시된 제품과 릴리스의 목록입니다. 개별 릴리스에 대해 의존 관계, 회수 정보와 속한 릴리스 채널 등의 정보를 제공합니다.

왼쪽 메뉴의 Products에서 제품 카탈로그를 탐색할 수 있습니다. 연락을 담당하는 팀이 없는 제품, Palantir 제품, 특정 연락 팀과 연결된 제품 등으로 목록을 필터링할 수 있습니다.

카탈로그의 릴리스를 사용하려면 회수 여부, 필요한 의존 관계의 충족 여부와 환경이 구독하는 채널을 함께 확인합니다.

비교 가능한 버전 형식

Apollo가 버전의 선후 관계를 판단하려면 버전이 비교 가능한 형식이어야 합니다. 예를 들어 배포 개체가 보고한 버전과 후보 릴리스를 비교할 수 있어야 업그레이드할 수 있는 새 버전을 판단할 수 있습니다.

지원하는 비교 가능 형식은 다음과 같습니다.

버전 유형예형식
Release1.0.0^[0-9]+\.[0-9]+\.[0-9]+$
Release Snapshot1.0.0-1-gaaaaaaa^[0-9]+\.[0-9]+\.[0-9]+-[0-9]+-g[a-f0-9]+$
Release Candidate1.0.0-rc1^[0-9]+\.[0-9]+\.[0-9]+-rc[0-9]+$
Release Candidate Snapshot1.0.0-rc1-1-gaaaaaaa^[0-9]+\.[0-9]+\.[0-9]+-rc[0-9]+-[0-9]+-g[a-f0-9]+$

정규식의 rc와 g 같은 문자를 임의로 바꾸지 않습니다. 일반적인 버전 이름처럼 보이더라도 Apollo가 비교할 수 있는 형식인지 구분해야 합니다.

서로 다른 유형의 버전은 다음과 같은 순서로 비교됩니다.

1.0.0-rc1
< 1.0.0-rc2
< 1.0.0-rc2-4-gaaaaaaa
< 1.0.0-rc2-5-gccccccc
< 1.0.0
< 1.0.1
< 1.1.0
< 2.0.0
< 2.0.0-3-gbbbbbb
< 2.0.0-4-gaaaaaa
< 2.1.0-rc1

버전의 순서를 비교할 수 있다는 사실과 그 버전을 특정 환경에 배포해도 된다는 사실은 별개입니다. 실제 변경에는 채널과 의존 관계 및 운영 제약이 추가로 적용됩니다.

각 숫자 구성 요소는 2,147,483,647을 넘을 수 없습니다. 같은 숫자 구성 요소를 가진 스냅샷은 커밋 해시가 달라도 비교상 같은 순위입니다. 버전 매처, 정확한 비교 순서와 비교 불가능한 문자열은 제품 버전 규칙에 설명되어 있습니다.

Foundry 제품과의 차이

Foundry의 제품은 온톨로지, 데이터 파이프라인, 모델이나 업무 화면 같은 리소스를 묶어 설치하는 단위입니다. Apollo의 제품은 환경에 배포하는 소프트웨어 구성 요소를 나타냅니다.

둘 다 제품, 버전과 설치라는 말을 사용하지만 무엇을 버전 관리하고 어디에 적용하는지가 다릅니다. 통합 운영을 설명할 때에는 Foundry 제품인지 Apollo 제품인지 명시하여 리소스 설치와 소프트웨어 배포를 구분합니다.