CEL로 플래그 타겟팅

Common Expression Language (CEL)는 정교한 규칙 기반 플래그 평가를 위한 로직을 제공합니다. 논리 연산자를 사용하여 여러 사용자 또는 요청 속성을 결합하여 정확한 타겟팅 규칙을 만들 수 있습니다.

이 가이드에서는 CEL 규칙으로 플래그를 정의하고 평가 사양을 업데이트하는 방법을 보여줍니다.

기본 요건

시작하기 전에 다음 사항을 확인하세요.

  1. 기능 플래그 배포 빠른 시작을 완료했습니다.
  2. App Lifecycle Manager 리소스를 관리하도록 구성된 gcloud 환경입니다.

논리 연산자 및 구문

CEL은 복잡한 조건을 빌드하기 위해 표준 논리 연산자를 지원합니다.

  • && 논리곱
  • || 논리합
  • ! 논리 부정
  • in 목록에 값이 있는지 확인

속성 정의

CEL 속성은 부울 표현식 내에서 보안 또는 라우팅 정책을 정의하는 데 사용되는 source.ip, 요청 헤더 또는 경로와 같은 특정 데이터 포인트입니다.

CEL 조건에 사용되는 속성은 명시적으로 정의되어야 하며 EvaluationSpec의 속성 배열에 나열되어야 합니다. 속성이 조건에 사용되지만 목록에 없는 경우 API는 요청을 거부합니다.

속성 만들기

App Lifecycle Manager를 사용하여 CEL 속성을 만들 수 있습니다.

계획 속성을 만들려면 다음 명령어를 실행합니다.

gcloud beta app-lifecycle-manager flags attributes create "plan-attr" \
    --key="plan" \
    --attribute-value-type="STRING" \
    --location=global

국가 속성을 만들려면 다음 명령어를 실행합니다.

gcloud beta app-lifecycle-manager flags attributes create "country-attr" \
    --key="country" \
    --attribute-value-type="STRING" \
    --location=global

플랫폼 속성을 만들려면 다음 명령어를 실행합니다.

gcloud beta app-lifecycle-manager flags attributes create "platform-attr" \
    --key="platform" \
    --attribute-value-type="STRING" \
    --location=global

CEL 규칙으로 플래그 구성

플래그를 만들거나 업데이트할 때 evaluation-spec에서 평가 로직을 정의합니다.

예를 들어 이 스니펫은 모바일 앱을 사용하는 독일의 프리미엄 고객을 위한 기능을 사용 설정합니다.

gcloud beta app-lifecycle-manager flags create "advanced-reporting-flag" \
    --key="advanced-reporting-flag" \
    --flag-value-type=BOOL \
    --unit-kind="UNIT_KIND_NAME" \
    --location=global \
    --evaluation-spec='{
      "rules": [{
        "id": "premium_mobile_users_in_germany",
        "condition": "plan == \"premium\" && country == \"DE\" && platform == \"mobile\"",
        "target": "enabled"
      }],
      "defaultTarget": "disabled",
      "attributes": [
        "projects/PROJECT_ID/locations/global/flagAttributes/plan-attr",
        "projects/PROJECT_ID/locations/global/flagAttributes/country-attr",
        "projects/PROJECT_ID/locations/global/flagAttributes/platform-attr"
      ]
    }'

PROJECT_IDUNIT_KIND_NAME을 사용자 값으로 바꿉니다.

애플리케이션 통합

애플리케이션은 런타임에 평가 컨텍스트에 속성을 삽입해야 합니다.

Python 예시:

from openfeature.evaluation_context import EvaluationContext

eval_ctx = EvaluationContext(
    targeting_key=user_id,
    attributes={
        "plan": "premium",
        "country": "DE",
        "platform": "mobile"
    }
)

is_enabled = client.get_boolean_value("advanced-reporting-flag", False, eval_ctx)

권장사항

  • 평가 순서: 규칙은 순차적으로 평가됩니다. true로 평가되는 첫 번째 규칙이 플래그의 값을 결정합니다.
  • 안전한 기본값: 사용자 컨텍스트에 조건에 필요한 속성이 없는 경우 평가 엔진은 해당 특정 규칙을 건너뜁니다.
  • 문자 수 제한: CEL 표현식의 크기는 최대 4,096바이트 (4KB)입니다.

다음 단계