App Lifecycle Manager 기능 플래그 할당은 트래픽 비율을 분할하여 애플리케이션을 테스트하는 데 도움이 됩니다. 이를 통해 일부 사용자는 애플리케이션의 한 버전을 보고 다른 사용자는 다른 버전을 볼 수 있으므로 어떤 버전이나 기능이 더 성공적인지 확인할 수 있습니다 (이 프로세스를 A/B 테스트라고도 함). 기능 플래그 할당을 사용하면 트래픽을 분할하는 방법을 정의하고 할당된 변형을 애플리케이션과 통합할 수 있습니다.
이 가이드에서는 변형을 정의하고, 트래픽 분할을 구성하고, 변형을 애플리케이션과 통합하는 방법을 보여줍니다.
추적 및 분석을 간소화하려면 변형에 설명이 포함된 문자열 ID (예: '실험', '기준')를 할당하고 코드 및 분석 파이프라인에서 이러한 이름을 직접 사용해야 합니다.
기본 요건
시작하기 전에 다음 사항을 확인하세요.
- 기능 플래그 배포 빠른 시작 또는 기능 플래그 사용 (독립형 빠른 시작)을 완료했습니다.
- App Lifecycle Manager 리소스를 관리하도록 구성된 Google Cloud CLI 환경
기능 플래그 할당 구성
실험용 기능 플래그를 구성하려면 다음 단계를 따르세요.
각 사용자의 일관된 환경을 보장하기 위해 고정 버킷팅에 사용될 무작위 속성 (예:
userID)을 정의합니다.gcloud beta app-lifecycle-manager flags attributes create "user-id-attr" \ --key="userID" \ --attribute-value-type="STRING" \ --location=global할당을 사용하여 분할을 정의하고 (예: 50/50) 설명 변형 ID를 참조합니다.
# Create a flag with explicitly named variants for the experiment and a 50/50 allocation referencing the custom IDs gcloud beta app-lifecycle-manager flags create "search-algo-test" \ --key="search-algo-test" \ --flag-value-type=BOOL \ --location="global" \ --unit-kind="demo-test-unitkind" \ --variants='[ { "id": "experimental", "booleanValue": true }, { "id": "baseline", "booleanValue": false } ]'\ --evaluation-spec='{ "allocations": [{ "id": "search-split-50-50", "randomizedOn": "userID", "slots": [ {"variant": "baseline", "weight": 50}, {"variant": "experimental", "weight": 50} ] }], "defaultTarget": "search-split-50-50", "attributes": ["projects/PROJECT_ID/locations/global/flagAttributes/user-id-attr"] }'백엔드 서비스에서 OpenFeature SDK를 초기화하고 평가 컨텍스트에
userID를 삽입합니다.BooleanValueDetails(또는 언어에 해당하는 메서드) 메서드를 사용하여 애플리케이션에서variantID(문자열)을 검색합니다. 이렇게 하면 불리언 값뿐만 아니라 설명이 포함된 이름을 기반으로 백엔드 로직을 전환할 수 있습니다.// 1. Prepare evaluation context evalCtx := map[string]any{"userID": currentUser.ID} // 2. Fetch evaluation details to get the variant name details, err := client.BooleanValueDetails(ctx, "search-algo-test", false, evalCtx) // 3. Execute logic based on the Variant ID (string name) if details.Variant == "experimental" { results = search.ExperimentalV2(query) } else { results = search.BaselineV1(query) }감사 및 분석에서 문서가 자동으로 생성되도록 설명이 포함된 변형 이름을 사용하세요. 평가를 감사하려면 실적 측정항목과 함께
details.Variant문자열을 로깅하세요.startTime := time.Now() // ... perform search ... duration := time.Since(startTime) // Audit: Log the descriptive variant name ("experimental" or "baseline") logger.Info("Search performed", "variant", details.Variant, "latency_ms", duration.Milliseconds(), )'실험' 그룹과 '기준' 그룹의 측정항목을 비교하면 전체 출시를 진행하기 전에 새 알고리즘이 백엔드 효율성 또는 검색 관련성을 개선하는지 수동으로 분석할 수 있습니다.
다음 단계
- 문제 해결에 대해 알아봅니다.