기능 플래그 결정

📘

기능 플래그는 SDK 버전 2.0.0 이상인 경우 사용 가능합니다.

기능 플래그를 사용하시는 경우 의존성 추가 시 SDK 버전을 2.0.0 이상으로 적용하시기 바랍니다.

기능 플래그는 켜짐(on) 상태와 꺼짐(off) 상태가 있습니다. 각 상태에 따라 다른 기능을 설정하게 됩니다.
기능 플래그를 적용한 기능에 어떤 사용자가 접근할 경우 켜짐 혹은 꺼짐 상태를 받을 수 있어야 합니다. 이 상태 결정을 핵클 SDK를 통해 진행할 수 있습니다.

useFeature

핵클이 제공하는 Hooks API를 사용하여 사용자에 대한 상태 결과를 전달받을 수 있습니다. 이 때 기능 키를 전달해야 하며, 이후 상태에 따른 로직을 구현합니다.

아래 예제 코드에서는 기능 키 42를 전달하고 있습니다.

function App() {
  return (
    // 기능 키가 42인 기능 플래그에서 사용자의 상태를 결정합니다.
    // 결정하지 못하는 상황인 경우 false(꺼짐 상태)를 반환합니다.
    <Feature featureKey={42}>
      {(featureOn) =>
        featureOn ? (
          <SuperAwesomeFeature /> // 켜짐 상태일 때의 기능
        ) : (
          <AwesomeFeature /> // 꺼짐 상태일 때의 기능
        )
      }
    </Feature>
  )
}
function App() {
  // 기능 키가 42인 기능 플래그에서 사용자의 상태를 결정합니다.
  // 결정하지 못하는 상황인 경우 false(꺼짐 상태)를 반환합니다.
  const featureOn = useFeature(42)
  return (
    <>
    {
      featureOn ? (
        <SuperAwesomeFeature /> // 켜짐 상태일 때의 기능
      ) : (
        <AwesomeFeature /> // 꺼짐 상태일 때의 기능
      )
    }
    </>
  )
}

useFeatureFlagDetail

useFeatureFlagDetail() Hooks API는 useFeature()와 동일하게 동작하고 추가로 상태 결정에 대한 사유를 같이 제공합니다. 수동할당이 잘 되고 있는지 알아보거나 설정한 트래픽 할당 대비 결과 비중이 이상하다고 여길 때 유용하게 활용할 수 있습니다.

파라미터로 기능 키를 전달해야 합니다. 아래 예제 코드의 경우 기능 키 42를 전달하고 있습니다.

// 분배 결정 상세
const decision = useFeatureFlagDetail(42)

// 분배 그룹
const isOn = decision.isOn

// 분배 결정 사유
const reason = decision.reason

상태 결정 사유는 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

개별 타겟팅, 사용자 타겟팅 중 어디에도 매치 되지 않았습니다.

기본 룰로 설정한 상태

INVALID_INPUT

입력 값이 유효하지 않습니다.
(예: 숫자 타입을 넣어야 하는 파라미터에 문자 타입 입력)

기본 상태(꺼짐/off)

EXCEPTION

알 수 없는 오류가 발생했습니다.

기본 상태(꺼짐/off)


Did this page help you?