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가 특정 단위의 올바른 플래그 값을 가져오도록 합니다.
이 심층 통합을 통해 인프라 수명 주기와 함께 기능 수명 주기를 관리할 수 있습니다. 실제 예시는 기능 플래그 배포 빠른 시작을 참고하세요.
관리 영역
관리 영역과 상호작용하여 플래그를 정의하고 제어합니다. 콘솔, gcloud CLI 또는 App Lifecycle Manager API를 사용하여 다음 작업을 할 수 있습니다. Google Cloud
- 플래그 만들기 또는 업데이트: 플래그를 정의하려면
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 기능 플래그는 표준 on/off 불리언 평가보다 더 많은 것을 지원합니다. 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"}'
배정밀도 플래그
배정밀도 플래그는 확률 임곗값 또는 부동 소수점 매개변수에 사용되는 고정밀도 값을 제공합니다.
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 개요를 검토하세요.