기능 플래그 결정
기능 플래그는 SDK 버전 2.0.0 이상인 경우 사용 가능합니다.
기능 플래그를 사용하시는 경우 의존성 추가 시 SDK 버전을 2.0.0 이상으로 적용하시기 바랍니다.
기능 플래그는 켜짐(on) 상태와 꺼짐(off) 상태가 있습니다. 각 상태에 따라 다른 기능을 설정하게 됩니다.
기능 플래그를 적용한 기능에 어떤 사용자가 접근할 경우 켜짐 혹은 꺼짐 상태를 받을 수 있어야 합니다. 이 상태 결정을 핵클 SDK를 통해 진행할 수 있습니다.
isFeatureOn
isFeatureOn()
메소드에 기능 키를 전달하면 사용자에 대한 상태 결과를 전달받을 수 있습니다. 이후 상태에 따른 로직을 구현합니다.
아래 예제 코드에서는 기능 키 42를 전달하고 있으며, 상태를 받을 사용자의 사용자 식별자는 "ae03e1adf" 입니다.
import io.hackle.sdk.HackleClient
// 기능 키가 42인 기능 플래그에서 사용자의 상태를 결정합니다.
// 결정하지 못하는 상황인 경우 false(꺼짐 상태)를 반환합니다.
boolean isFeatureOn = hackleClient.isFeatureOn(42, "ae03e1adf");
if (isFeatureOn) {
// ON 기능
} else {
// OFF 기능
}
import io.hackle.sdk.HackleClient
// 기능 키가 42인 기능 플래그에서 사용자의 상태를 결정합니다.
// 결정하지 못하는 상황인 경우 false(꺼짐 상태)를 반환합니다.
val isFeatureOn: Boolean = hackleClient.isFeatureOn(42, "ae03e1adf")
if (isFeatureOn) {
// ON 기능
} else {
// OFF 기능
}
featureFlagDetail
featureFlagDetail()
메소드는 isFeatureOn()
메소드와 동일하게 동작하고 추가로 상태 결정에 대한 사유를 같이 제공합니다. 수동할당이 잘 되고 있는지 알아보거나 설정한 트래픽 할당 대비 결과 비중이 이상하다고 여길 때 유용하게 활용할 수 있습니다.
파라미터로 기능 키를 전달해야 합니다. 아래 예제 코드의 경우 기능 키 42를 전달하고 있습니다.
import io.hackle.sdk.HackleClient
import io.hackle.sdk.common.decision.FeatureFlagDecision
FeatureFlagDecision decision = hackleClient.featureFlagDetail(42, "ae03e1adf");
// 기능 on/off 여부
boolean isFeatureOn = decision.isOn();
// 상태 결정 사유
DecisionReason reason = decision.getReason();
import io.hackle.sdk.HackleClient
import io.hackle.sdk.common.decision.FeatureFlagDecision
val decision: FeatureFlagDecision = hackleClient.featureFlagDetail(42, "ae03e1adf")
// 기능 on/off 여부
val isFeatureOn: Boolean = decision.isOn()
// 상태 결정 사유
val reason: DecisionReason = decision.getReason()
상태 결정 사유는 SDK_NOT_READY
와 같은 형태로 받게 됩니다. 자세한 내용은 아래 표를 참고해주세요.
사유 | 설명 | 분배 결과 |
---|---|---|
SDK_NOT_READY | SDK 사용 준비가 되지 않았습니다. (예: 잘못된 SDK 키로 초기화 시도) | 기본 상태(꺼짐/off) |
FEATURE_FLAG_NOT_FOUND | 전달한 기능 키에 대한 기능 플래그를 찾을 수 없습니다. 기능 키가 잘못되었거나 해당 기능 플래그가 보관 상태일 수 있습니다. | 기본 상태(꺼짐/off) |
FEATURE_FLAG_INACTIVE | 기능 플래그가 꺼짐 상태입니다 | 기본 상태(꺼짐/off) |
INDIVIDUAL_TARGET_MATCH | 개별 타겟팅에 매치 되었습니다. | 개별 타겟팅으로 설정한 상태 |
TARGET_RULE_MATCH | 사용자 타겟팅에 매치 되었습니다. | 사용자 타겟팅으로 설정한 상태 |
DEFAULT_RULE | 개별 타겟팅, 사용자 타겟팅 중 어디에도 매치 되지 않았습니다. | 기본 룰로 설정한 상태 |
EXCEPTION | 알 수 없는 오류가 발생했습니다. | 기본 상태(꺼짐/off) |
노출 이벤트 중복 제거
Java/Kotlin SDK를 사용하는 경우 동일한 사용자가 1분 이내에 연속으로 발생시킨 동일한 기능플래그 분배결과에 대한 노출 이벤트를 제거합니다. 1분 이내의 이벤트는 1회로 계산됩니다.
기능 플래그 파라미터
featureFlagDetail()
메소드를 통해 상태 결정에 대한 파라미터 값도 같이 제공받을 수 있습니다.featureFlagDetail()
메소드를 통해 전달받은 FeatureFlagDecision 인스턴스에는 전체 파라미터 설정 정보가 담긴ParameterConfig
객체가 존재합니다.- 핵클의 기능 플래그 화면에서 설정한 파라미터 값이 key, value 형태로 존재하기 때문에, 설정한 파라미터 유형에 따라 아래 메소드를 사용하여 설정한 파라미터 값을 받아 활용할 수 있습니다.
- 기능 플래그의 파라미터 설정화면에서 값을 유동적으로 변경할 수 있습니다.
파라미터 설정은 SDK 버전 2.8.0 이상인 경우 사용 가능합니다.
getString
- STRING, JSON 유형으로 설정된 parameter값을 반환합니다.
- 상태 결정에 따라 False 또는 True에 설정된 값을 반환합니다.
import io.hackle.sdk.HackleClient
import io.hackle.sdk.common.decision.FeatureFlagDecision
import io.hackle.sdk.common.ParameterConfig
FeatureFlagDecision decision = hackleClient.featureFlagDetail(42, “ae03e1adf”);
ParameterConfig config = decision.getConfig();
String strValue = decision.getString(“parameter_key_string_type”, “defaultValue”);
String strValueInConfig = config.getString(“parameter_key_string_type”, “defaultValue”);
String jsonValue = decision.getString(“parameter_key_json_type”, “defaultValue”);
String jsonValueInConfig = config.getString(“parameter_key_json_type”, “defaultValue”);
import io.hackle.sdk.HackleClient
import io.hackle.sdk.common.decision.FeatureFlagDecision
import io.hackle.sdk.common.ParameterConfig
val decision: FeatureFlagDecision = hackleClient.featureFlagDetail(42, “ae03e1adf”)
val config: ParameterConfig = decision.config
val strValue: String = decision.getString(“parameter_key_string_type”, “defaultValue”)
val strValueInConfig: String = config.getString(“parameter_key_string_type”, “defaultValue”)
val jsonValue: String = decision.getString(“parameter_key_json_type”, “defaultValue”)
val jsonValueInConfig: String = config.getString(“parameter_key_json_type”, “defaultValue”)
getInt
- Number 유형으로 설정된 parameter 값을 Int 타입으로 반환합니다.
- 상태 결정에 따라 False 또는 True에 설정된 값을 반환합니다.
import io.hackle.sdk.HackleClient
import io.hackle.sdk.common.decision.FeatureFlagDecision
import io.hackle.sdk.common.ParameterConfig
FeatureFlagDecision decision = hackleClient.featureFlagDetail(42, “ae03e1adf”);
ParameterConfig config = decision.getConfig();
int intValue = decision.getInt(“parameter_key_number_type”, 0);
int intValueInConfig = config.getInt(“parameter_key_number_type”, 0);
import io.hackle.sdk.HackleClient
import io.hackle.sdk.common.decision.FeatureFlagDecision
import io.hackle.sdk.common.ParameterConfig
val decision: FeatureFlagDecision = hackleClient.featureFlagDetail(42, “ae03e1adf”)
val config: ParameterConfig = decision.config
val intValue: Int = decision.getInt(“parameter_key_number_type”, 0)
val intValueInConfig: Int = config.getInt(“parameter_key_number_type”, 0)
getDouble
- Number 유형으로 설정된 parameter 값을 Double 타입으로 반환합니다.
- 상태 결정에 따라 False 또는 True에 설정된 값을 반환합니다.
import io.hackle.sdk.HackleClient
import io.hackle.sdk.common.decision.FeatureFlagDecision
import io.hackle.sdk.common.ParameterConfig
FeatureFlagDecision decision = hackleClient.featureFlagDetail(42, “ae03e1adf”);
ParameterConfig config = decision.getConfig();
double doubleValue = decision.getDouble(“parameter_key_number_type”, 0.0);
double doubleValueInConfig = config.getDouble(“parameter_key_number_type”, 0.0);
import io.hackle.sdk.HackleClient
import io.hackle.sdk.common.decision.FeatureFlagDecision
import io.hackle.sdk.common.ParameterConfig
val decision: FeatureFlagDecision = hackleClient.featureFlagDetail(42, “ae03e1adf”)
val config: ParameterConfig = decision.config
val doubleValue: Double = decision.getDouble(“parameter_key_number_type”, 0.0)
val doubleValueInConfig: Double = config.getDouble(“parameter_key_number_type”, 0.0)
getLong
- Number 유형으로 설정된 parameter 값을 Long 타입으로 반환합니다.
- 상태 결정에 따라 False 또는 True에 설정된 값을 반환합니다.
import io.hackle.sdk.HackleClient
import io.hackle.sdk.common.decision.FeatureFlagDecision
import io.hackle.sdk.common.ParameterConfig
FeatureFlagDecision decision = hackleClient.featureFlagDetail(42, “ae03e1adf”);
ParameterConfig config = decision.getConfig();
long longValue = decision.getLong(“parameter_key_number_type”, 0L);
long longValueInConfig = config.getLong(“parameter_key_number_type”, 0L);
import io.hackle.sdk.HackleClient
import io.hackle.sdk.common.decision.FeatureFlagDecision
import io.hackle.sdk.common.ParameterConfig
val decision: FeatureFlagDecision = hackleClient.featureFlagDetail(42, “ae03e1adf”)
val config: ParameterConfig = decision.config
val longValue: Long = decision.getLong(“parameter_key_number_type”, 0L)
val longValueInConfig: Long = config.getLong(“parameter_key_number_type”, 0L)
getBoolean
- Boolean 유형으로 설정된 parameter값을 반환합니다.
- 상태 결정에 따라 False 또는 True에 설정된 값을 반환합니다.
import io.hackle.sdk.HackleClient
import io.hackle.sdk.common.decision.FeatureFlagDecision
import io.hackle.sdk.common.ParameterConfig
FeatureFlagDecision decision = hackleClient.featureFlagDetail(42, “ae03e1adf”);
ParameterConfig config = decision.getConfig();
boolean booleanValue = decision.getBoolean(“parameter_key_boolean_type”, false);
boolean booleanValueInConfig = config.getBoolean(“parameter_key_boolean_type”, false);
import io.hackle.sdk.HackleClient
import io.hackle.sdk.common.decision.FeatureFlagDecision
import io.hackle.sdk.common.ParameterConfig
val decision: FeatureFlagDecision = hackleClient.featureFlagDetail(42, “ae03e1adf”)
val config: ParameterConfig = decision.config
val booleanValue: Boolean = decision.getBoolean(“parameter_key_boolean_type”, false)
val booleanValueInConfig: Boolean = config.getBoolean(“parameter_key_boolean_type”, false)
Updated 11 months ago