서버 측 애플리케이션을 위한 Datadog Feature Flags를 사용하면 기능 가용성을 원격으로 제어하고, 실험을 실행하며, 새로운 기능을 안심하고 출시할 수 있습니다. 서버 측 SDK는 플래그 구성을 수신하고 로컬에서 플래그를 평가합니다. 일부 SDK는 구성 전달 또는 텔레메트리를 위해 Datadog 트레이서를 사용합니다.
Datadog Feature Flags는 Feature Flags API를 위한 공급업체 중립적 오픈 소스 사양인 OpenFeature 표준을 기반으로 구축되었습니다. 공급자, 평가 컨텍스트, 후크와 같은 OpenFeature 개념을 처음 접하는 경우 OpenFeature 개념 문서를 참조하세요.
구성 전달
Agentless 구성 전달은 이를 지원하는 서버 SDK 버전의 기본값입니다. SDK는 HTTPS를 통해 Datadog 관리 CDN에서 직접 플래그 구성을 가져온 다음 로컬에서 플래그를 평가합니다. 플래그 구성을 위해 Datadog Agent는 필요하지 않습니다.
기본 소스는 모든 트레이서 설치에 대해 Feature Flags 트래픽을 활성화하지 않습니다. Agentless 폴링은 애플리케이션 코드가 Datadog OpenFeature 공급자를 초기화하거나 액세스할 때만 시작됩니다. remote_config를 명시적으로 선택하면 Feature Flags Remote Configuration 구독이 활성화됩니다. 두 소스를 통한 요청 모두 서버 Feature Flags 요금 청구에 포함됩니다.
초기 Node.js Agentless 릴리스는 구성 전달 및 로컬 플래그 평가만 지원합니다. 평가 메트릭이나 노출 이벤트를 내보내지 않습니다. Java 및 Python Agentless 전달은 구성 소스만 변경합니다. Java와 Python은 지원되는 Datadog Agent나 Serverless 텔레메트리 경로 없이는 이러한 신호를 내보내지 않습니다.
Agentless 전달은 나열된 SDK 및 버전에서 사용할 수 있습니다. 기타 서버 SDK는 Agent Remote Configuration을 사용합니다.
언어 선택
SDK별 설정 지침을 보려면 언어 또는 프레임워크를 선택하세요.
Serverless 런타임의 경우, 에이전트 없는 설정, 버전 요구 사항 및 초기 텔레메트리 제한 사항에 대해서는 Serverless 환경을 참조하세요.
전제 조건
요구 사항은 선택한 SDK 및 구성 소스에 따라 다릅니다. 표준 요구 사항은 다음과 같습니다.
Java CDN 전달은 애플리케이션 프로세스에 Java 에이전트가 필요합니다. APM 트레이싱이나 별도의 Datadog Agent 서비스는 필요하지 않습니다.
소스별 필수 요구 사항은 다음과 같습니다.
소스
필수 요구 사항
agentless (지원되는 경우 기본값)
애플리케이션 프로세스에서 DD_API_KEY, DD_SITE 및 DD_ENV를 구성하세요. Feature Flags 구성을 위해 Agent는 필요하지 않습니다.
remote_config
Remote Configuration이 활성화된 Datadog Agent 7.55 이상, 에이전트에 구성된 API 키, Organization Settings에서 조직에 대해 활성화된 Remote Configuration이 필요합니다. Java는 호환되는 dd-openfeature 및 dd-java-agent 버전도 필요합니다.
Remote Configuration은 Agent 7.47.0 이상에서 기본적으로 활성화되어 있습니다. 에이전트에서 Remote Configuration이 비활성화된 경우, DD_REMOTE_CONFIGURATION_ENABLED=true를 설정하거나 datadog.yaml에 remote_configuration.enabled: true를 추가하여 다시 활성화하세요.
DD_EXPERIMENTAL_FLAGGING_PROVIDER_ENABLED=true를 사용하는 기존 Java, Node.js 및 Python 구현은 마이그레이션 기간 동안 Remote Configuration으로 유지됩니다. 해당 설정은 더 이상 사용되지 않습니다. Remote Configuration을 명시적으로 유지하거나 Agentless 전달로 이동하려면 레거시 공급자 설정에서 마이그레이션을 참조하세요.
Remote Configuration 폴링 간격
Agent는 구성 가능한 간격으로 Datadog에 구성 업데이트를 폴링합니다.
# Optional: Configure the Agent polling interval (default: 60s)DD_REMOTE_CONFIGURATION_REFRESH_INTERVAL=10s
고급 애플리케이션 구성
표준 Datadog 환경 변수로 애플리케이션을 구성하세요. 이는 모든 서버 측 SDK에서 공통적으로 사용됩니다.
# Required: Service identificationDD_SERVICE=<YOUR_SERVICE_NAME>
DD_ENV=<YOUR_ENVIRONMENT>
DD_VERSION=<YOUR_APP_VERSION>
# Optional: Disable Feature Flags and both delivery paths# DD_FEATURE_FLAGS_ENABLED=false# Optional: Enable flag evaluation metrics# See "Set Up Server-Side Flag Evaluation Metrics" documentation
위에 나열된 Java, Node.js 및 Python 버전에서 DD_FEATURE_FLAGS_ENABLED 기본값은 true이므로 설정할 필요가 없습니다. 이를 false (으)로 설정하면 공급자, CDN 폴링 및 Feature Flags Remote Configuration 구독이 비활성화됩니다. 기타 서버 SDK는 해당 언어 페이지에 문서화된 활성화 설정을 계속 사용합니다.
이를 지원하는 SDK 및 전달 모드의 경우, 서버 측 Feature Flags 평가 메트릭 설정을 참조하여 feature_flag.evaluations 메트릭을 활성화하세요. 초기 Node.js Agentless 릴리스는 평가 메트릭이나 노출 이벤트를 내보내지 않습니다. Java 및 Python이 이러한 신호를 내보내려면 지원되는 Datadog Agent 또는 Serverless 텔레메트리 경로가 필요합니다. 사용 가능한 그래프 작성에 대한 자세한 내용은 Feature Flag 그래프를 참조하세요. 필터링 및 실험을 위해 Feature Flags 평가 데이터를 APM 트레이스에 첨부하려면 Feature Flags에 대한 APM 트레이스 보강 설정을 참조하세요.
인메모리 공급자로 테스트
Datadog은 다음과 같은 테스트 접근 방식을 지원합니다.
통합 테스트: DatadogProvider를 전용 테스트 환경으로 지정하고 Datadog UI에서 플래그 값을 제어합니다. 이는 실제 공급자와 선택된 구성 소스를 엔드투엔드로 실행합니다.
단위 테스트: DatadogProvider를 OpenFeature 표준 InMemoryProvider(해당 언어에서 인메모리 공급자를 사용할 수 없는 경우, 이에 상응하는 테스트 스텁)으로 교체하고 테스트 코드에서 플래그 값을 직접 설정합니다. 이렇게 하면 테스트가 외부 환경과 격리되고 오프라인 상태로 유지됩니다.
이 섹션에서는 인메모리 접근 방식을 다룹니다. OpenFeature API는 런타임에 공급자를 교체할 수 있도록 설계되었으므로 애플리케이션 코드는 변경되지 않으며, 테스트 설정 중에 등록된 공급자만 변경됩니다.
일반적인 테스트는 다음 패턴을 따릅니다.
테스트 설정에서 플래그 키와 변형의 맵을 빌드합니다.
OpenFeature API를 통해 해당 맵으로 InMemoryProvider를 등록합니다.
테스트 중인 단위에서 OpenFeature 클라이언트를 호출합니다. InMemoryProvider는 테스트 설정에서 구성된 플래그 할당을 반환합니다.
테스트 종료 시 공급자를 재설정하여 테스트 간 상태 누출을 방지합니다.
구체적인 테스트 예시는 해당 언어의 SDK 페이지(이 페이지 상단에서 선택)를 참조하세요.
컨텍스트 속성 요구 사항
평가 컨텍스트 속성은 중첩되지 않은 원시 값(문자열, 숫자, 부울)이어야 합니다. 중첩된 객체와 배열은 지원되지 않으며 이를 사용하면 노출 이벤트가 별도 경고 없이 폐기됩니다.
// These attributes will cause exposure events to be dropped
constevaluationContext={targetingKey:req.session?.userID,company:{id:req.session?.companyID},// nested object - NOT SUPPORTED
roles:['admin','user']// array - NOT SUPPORTED
};