Apollo 모듈과 구성 재사용
Apollo 모듈(Module)은 함께 설치하는 제품들을 묶은 구성입니다. 여러 제품을 배포 환경에 하나씩 설치하는 대신, 제품과 필요한 구성을 모듈로 정의하여 함께 설치할 수 있습니다.
모듈을 만들 때에는 그 모듈의 설치에 적용할 구성을 지정합니다. 특정 설치에서 달라져야 하는 값은 변수로 남겨 둘 수 있습니다.
모듈에 포함되는 배포 개체
모듈의 배포 개체(Entity) 정의는 설치할 제품과 그 제품에 적용할 구성을 나타냅니다. 모듈을 설치하면 Apollo는 정의된 배포 개체들을 해당 환경에 설치합니다.
가상의 업무 서비스가 웹 애플리케이션, 처리 서비스와 캐시 제품으로 구성된다고 가정하겠습니다. 모듈에 이 제품들의 배포 개체 정의와 구성을 함께 담으면, 환경마다 같은 구성을 반복해서 만들지 않고 재사용할 수 있습니다.
모듈로 함께 관리한다는 사실만으로 모든 작업의 원자적 실행이나 실패 시의 처리 방식까지 결정되는 것은 아닙니다. 개별 배포 대상과 변경 계획의 상태는 따로 확인해야 합니다.
모듈 변수
모듈 변수(Variable)는 생성 시점에 모든 값을 고정하지 않도록 해 줍니다. 배포 개체 정의와 모듈 구성에서 사전 지정한 값 대신 변수를 사용할 수 있으며, 실제 값은 모듈을 설치할 때 지정합니다.
변수는 설정 재정의(config override)를 포함한 배포 개체 정의의 각 부분에서 사용할 수 있습니다. 동일한 모듈을 여러 환경에 설치하면서 환경별로 필요한 값을 제공하는 방식입니다.
| 구분 | 값을 정하는 시점 |
|---|---|
| 고정된 모듈 구성 | 모듈을 정의할 때 |
| 모듈 변수 | 모듈을 설치할 때 |
예를 들어 동일한 제품 구성을 사용하되 환경별 서비스 주소나 운영 구분 값이 달라야 하는 경우 변수를 활용할 수 있습니다. 어떤 값을 변수로 사용할지는 제품의 구성 인터페이스와 환경의 요구에 맞춰 정합니다.
복합 모듈
복합 모듈(Composite Module)은 기존 모듈들을 조합한 모듈입니다. 큰 구성을 작은 재사용 단위로 나누고, 필요한 조합을 상위 모듈로 관리할 수 있습니다.
제품을 모듈에 묶는 것과 모듈을 다시 모듈에 묶는 것은 다른 구성 수준입니다. 개별 제품의 버전과 설정, 모듈의 구성과 릴리스를 구분해서 관리해야 합니다.
모듈 릴리스
모듈의 각 버전도 모듈 릴리스(Module Release)로 게시합니다. 제품 릴리스와 마찬가지로 Maven 좌표를 사용하여 식별합니다. 모듈 릴리스에는 릴리스 채널과 회수 기능을 사용할 수 있습니다.
모듈 설치본은 릴리스 채널을 추적합니다. Apollo는 설치본이 추적하는 채널로 승격된 릴리스에 대해서만 업데이트를 제안합니다.
기본적으로 모듈 설치본은 배포 환경의 기본 릴리스 채널을 따릅니다. 필요하면 개별 설치본에서 다른 채널을 지정할 수 있습니다.
모듈 릴리스 회수
모듈 릴리스를 회수하면 Apollo는 해당 버전으로의 업데이트를 제안하지 않습니다. 이미 열려 있는 변경 요청 가운데 그 버전으로 업데이트하려는 요청도 취소합니다.
다만 제품 릴리스 회수와 중요한 차이가 있습니다. 모듈 릴리스를 회수해도 Apollo가 기존 설치본을 그 버전에서 다른 버전으로 자동 전환하지는 않습니다.
| 회수 대상 | 기존 사용 대상에 관한 구분 |
|---|---|
| 제품 릴리스 | 회수된 버전에서 벗어나도록 변경을 조정하는 흐름이 존재한다. |
| 모듈 릴리스 | 새 업데이트 제안과 해당 버전으로 향하는 열린 변경 요청을 제한하지만, 기존 설치본을 자동으로 다른 버전으로 옮기지는 않는다. |
따라서 회수 후에는 해당 모듈 버전을 이미 사용하는 설치본을 확인하고 필요한 후속 변경을 별도로 판단해야 합니다.
Workshop 모듈과의 차이
Workshop 모듈은 업무 화면의 구성과 위젯 및 변수 연결을 저장하는 애플리케이션 리소스입니다. Apollo 모듈은 함께 설치할 소프트웨어 제품과 구성을 묶은 배포 단위입니다.
두 기능 모두 모듈과 변수를 사용하지만 실행 대상과 구성 목적이 다릅니다. 하나의 플랫폼 운영 체계를 설명할 때에는 Workshop 모듈인지 Apollo 모듈인지 명시합니다.