App Lifecycle Manager 기능 플래그를 사용하면 새로운 코드 배포나 인프라 변경 없이 애플리케이션 내 기능의 가용성과 동작을 제어할 수 있습니다.
플래그는 크게 두 가지 방법으로 사용할 수 있습니다.
- 통합: App Lifecycle Manager에서 관리하는 애플리케이션 배포와 플래그 관리를 결합합니다.
- 독립형: 애플리케이션 인프라가 다른 곳에서 관리되는 경우에도 시스템 구성요소를 App Lifecycle Manager 단위로 모델링하여 강력한 플래그 지정 시스템을 독립적으로 사용합니다.
기능 플래그는 단위 및 출시와 같은 App Lifecycle Manager의 핵심 개념과 통합됩니다. 이를 통해 애플리케이션 인프라와 함께 플래그 구성을 관리할 수 있습니다 (통합 접근 방식).
App Lifecycle Manager 단위 또는 출시가 익숙하지 않은 경우 기본 App Lifecycle Manager 개요를 검토하세요.
App Lifecycle Manager 기능 플래그를 사용하는 이유
App Lifecycle Manager로 기능 플래그를 구현하면 SaaS 개발 및 운영 수명 주기에 다음과 같은 여러 이점이 있습니다.
- 코드 배포에서 기능 출시 분리: 기본적으로 기능이 사용 중지된 상태로 새 코드를 프로덕션에 배포합니다. 특정 사용자를 대상으로 기능을 사용 설정하거나 준비가 되면 점진적으로 배포하여 대규모 배포와 관련된 위험을 줄입니다.
- 안전성, 속도, 안정성 향상:
- 제한된 잠재고객을 대상으로 프로덕션에서 기능을 테스트합니다 (카나리아 릴리스).
- App Lifecycle Manager 출시 기능을 사용하여 점진적 출시를 수행하여 잠재적인 문제의 영향을 최소화합니다.
- 허용 목록 및 테넌트 맞춤설정 사용 설정: 테넌트, 서비스 또는 환경을 나타낼 수 있는 단위의 기능을 사용 설정하거나 사용 중지합니다.
- 롤백 간소화: 기능 플래그를 사용 중지하면 이전 버전의 애플리케이션을 배포하는 것보다 훨씬 빠르고 중단이 적습니다. 이 워크플로를 사용하면 바이너리를 롤백하지 않고도 문제가 있는 기능을 사용 중지할 수 있습니다.
- 플래그 구성의 통합 관리: 기능 플래그 정의를 관리하고 이를 사용하여 출시를 구성합니다. 이 워크플로는 기능 플래그 출시를 만들어 애플리케이션의 기능을 변경할 수 있도록 하여 운영 안정성을 제공합니다.
App Lifecycle Manager 기능 플래그 작동 방식
App Lifecycle Manager에서 기능 플래그를 사용하는 데는 관리 영역 (플래그 정의 및 배포)과 데이터 영역 (애플리케이션 내에서 플래그 값 액세스)이라는 두 가지 주요 측면이 있습니다.
App Lifecycle Manager와 통합 사용
App Lifecycle Manager를 사용하여 애플리케이션 배포를 관리하는 경우 (예: Terraform 청사진을 사용하여 인프라 배포):
- 플래그 정의: App Lifecycle Manager 내에서 기능 플래그 리소스를 만들고 고유한
Flag key(예:enable-new-dashboard)를 지정하고 단위 종류와 연결합니다. 불리언 플래그가 지원됩니다. - 플래그 변경사항 프로비저닝: 플래그 변경사항 (생성 또는 업데이트)은 App Lifecycle Manager 출시를 시작할 때까지 적용되지 않습니다. 이렇게 하면 플래그 배포에 일괄 처리, 감독, 안전성 확인과 같은 기능을 사용할 수 있습니다. 출시에서는 타겟팅된 단위와 연결된 플래그 구성을 업데이트합니다.
- 애플리케이션의 액세스 플래그: 프로비저닝된 단위 (예: Cloud Run 또는 Google Kubernetes Engine의 컨테이너) 내에서 실행되는 애플리케이션 코드는
flagd제공자로 구성된 OpenFeature SDK를 사용합니다. 이 제공업체는saasconfig.googleapis.com서비스 엔드포인트에 연결됩니다. App Lifecycle Manager를 사용하여 필요한 단위 식별자를 애플리케이션 환경에 삽입하면 SDK가 해당 단위의 올바른 플래그 값을 가져올 수 있습니다.
이러한 긴밀한 통합을 통해 인프라 수명 주기와 함께 기능 수명 주기를 관리할 수 있습니다. 실제 예시는 기능 플래그 배포 빠른 시작을 참조하세요.
관리 영역
관리 영역과 상호작용하여 플래그를 정의하고 제어합니다. Google Cloud 콘솔, gcloud CLI 또는 App Lifecycle Manager API를 사용하여 다음을 수행할 수 있습니다.
- 플래그 만들기 또는 업데이트: 플래그를 정의하려면
Flag key를 지정하고 단위 종류와 연결하고 유형 및 기본값을 설정합니다. - 출시 만들기: 출시를 시작하여 플래그 변경사항(생성 또는 업데이트)을 플래그의 단위 종류에 속하는 타겟팅된 단위에 배포합니다. 출시는 구성된 정책에 따라 변경사항이 안전하고 안정적으로 적용되도록 합니다.
데이터 영역
애플리케이션 코드는 데이터 영역과 상호작용하여 플래그 값을 사용합니다.
- OpenFeature SDK: 공급업체 중립적인 OpenFeature SDK를 애플리케이션에 통합합니다.
flagd제공업체:flagd제공업체를 사용하도록 OpenFeature SDK를 구성합니다.- 구성:
flagd제공업체를 App Lifecycle Manager 기능 플래그 서비스 엔드포인트(saasconfig.googleapis.com:443)로 가리킵니다. - 타겟팅:
provider_id를 제공하여 플래그 구성을 식별합니다. 이 값은 일반적으로 App Lifecycle Manager 단위의 전체 리소스 이름 (예:projects/PROJECT_ID/locations/LOCATION/featureFlagsConfigs/UNIT_ID)에 해당합니다. - 인증: 제공업체는 애플리케이션 기본 사용자 인증 정보 (ADC)를 사용하여 Google Cloud 서비스 엔드포인트에 대한 요청을 안전하게 인증합니다. 사용되는 서비스 계정에는
roles/saasconfig.viewerIdentity and Access Management 역할이 필요합니다. - 플래그 평가: 코드에서 표준 OpenFeature 메서드 (
client.get_boolean_value(...))를 사용하여 플래그 값을 확인합니다. 제공업체는 서비스에서 배포된 최신 구성을 가져오는 작업을 처리합니다.
App Lifecycle Manager는 데이터 영역과 통합하기 위한 참조 구현과 예시를 제공합니다.
기능 플래그 값 유형
App Lifecycle Manager 기능 플래그는 표준 사용/사용 중지 불리언 평가 이상의 기능을 지원합니다. STRING, INTEGER 또는 DOUBLE 값으로 플래그를 정의하여 런타임 기준점, 테마 매개변수, 구성 한도와 같은 복잡한 운영 변수를 제어할 수 있습니다.
불리언 플래그와 달리 불리언이 아닌 플래그는 생성 중에 명시적으로 정의하여 가능한 반환 유형의 범위를 지정해야 합니다.
문자열 플래그
문자열 플래그는 구성 식별자를 연결된 클라이언트에 직접 전달합니다.
gcloud beta app-lifecycle-manager flags create "feature-mode" \
--key="feature-mode" \
--flag-value-type=STRING \
--location="global" \
--unit-kind="UNIT_KIND_ID" \
--variants='[{"id": "standard", "stringValue": "STANDARD"}, {"id": "advanced", "stringValue": "ADVANCED"}]' \
--evaluation-spec='{"defaultTarget": "standard"}'
정수 플래그
정수 플래그는 정확한 숫자 한도와 페이로드 경계를 제어합니다.
gcloud beta app-lifecycle-manager flags create "max-retry-count" \
--key="max-retry-count" \
--flag-value-type=INTEGER \
--location="global" \
--unit-kind="UNIT_KIND_ID" \
--variants='[{"id": "low", "integerValue": 3}, {"id": "high", "integerValue": 10}]' \
--evaluation-spec='{"defaultTarget": "low"}'
이중 플래그
Double 플래그는 확률 기준점 또는 부동 소수점 매개변수에 사용되는 고정밀도 값을 제공합니다.
gcloud beta app-lifecycle-manager flags create "sampling-rate" \
--key="sampling-rate" \
--flag-value-type=DOUBLE \
--location="global" \
--unit-kind="demo-test-unitkind" \
--variants='[{"id": "minimal", "doubleValue": 0.01}, {"id": "full", "doubleValue": 1.0}]' \
--evaluation-spec='{"defaultTarget": "minimal"}'
출시를 사용하여 기능 플래그 프로비저닝
App Lifecycle Manager는 출시를 사용하여 기능 플래그 업데이트를 프로비저닝함으로써 대규모로 안전한 변경 또는 업데이트를 보장합니다.
단계적 출시가 없으면 사소한 플래그 구성 변경 (예: 사용자의 1% 에 대해 기능 사용 설정)이 모든 애플리케이션 인스턴스에 즉시 전파됩니다. 이 기능으로 인해 회귀가 발생하면 전체 인프라에서 동시에 문제가 발생할 수 있습니다. 이러한 전역 전파는 광범위한 서비스 영향의 위험을 크게 높입니다.
App Lifecycle Manager 출시는 플래그 변경사항을 점진적이고 제어된 방식으로 배포하여 예상치 못한 문제의 잠재적 범위를 제한함으로써 이러한 위험을 완화합니다.
기능 플래그 세트
기능 플래그 집합은 여러 기능 플래그를 함께 그룹화하고 단일 논리적 리소스로 관리할 수 있게 해줍니다. 이는 여러 플래그를 조정해야 하는 기능을 출시할 때 유용합니다.
매니페스트
매니페스트를 사용하면 JSON 파일을 사용하여 기능 플래그를 정의하고 관리할 수 있습니다. 이러한 정의를 App Lifecycle Manager API에 푸시하거나 기존 구성을 가져와 애플리케이션의 유형 안전 접근자를 생성할 수 있습니다.
복잡한 타겟팅
Common Expression Language (CEL)를 사용하여 사용자 또는 요청 속성을 기반으로 정교한 타겟팅 규칙을 만들어 어떤 사용자가 어떤 기능을 볼지 정확하게 제어할 수 있습니다.
멀티 테넌트 아키텍처
라벨 또는 테넌트를 사용하여 특정 단위 또는 단위 그룹을 타겟팅하는 경우 App Lifecycle Manager에서 멀티 테넌트 배포를 사용할 수 있습니다. 또한 테넌트 Fleet 전반에 점진적 출시를 구현할 수 있습니다.
기능 플래그 할당
할당 (예: 실험 또는 기준)을 정의하고 트래픽 분할을 사용하여 테스트 또는 무작위 출시를 수행합니다.
다음 단계
- 기능 플래그 배포 빠른 시작을 사용하여 App Lifecycle Manager 관리형 배포와 플래그를 통합해 보세요.
- 플랫폼을 처음 사용하는 경우 기본 App Lifecycle Manager 개요를 검토하세요.