# 타겟팅 설정하기

## 개요

핵클은 특정 속성을 가진 사용자, 특정 A/B 테스트 혹은 기능 플래그에 참여한 사용자에 한정하여 A/B 테스트에 참여하도록 설정하는 기능, 즉 타겟팅(Targeting)을 제공합니다.\
예를 들어 모바일 운영체제 중 안드로이드 사용자만을 대상으로 A/B 테스트에 참여하도록 설정할 수 있습니다.

단, 수동할당 대상이 된 사용자는 타겟 설정 대상이 될 수 없습니다.

{% hint style="info" %}
A/B 테스트에 참여하는 사용자는 트래픽 할당의 대상이 되며, 트래픽 할당된 경우 테스트 그룹 분배 대상이 될 수 있습니다. 자세한 내용은[테스트 그룹 분배 과정](/ab-test/group-distribution/ab-variation.md) 문서를 참고하세요.
{% endhint %}

## 정책

1. **설정 가능 시점**\
   A/B 테스트 생성부터 \~ 종료까지, 즉 **`준비`**, **`진행중, 일시정지`**, **`종료`** 상태일 때 설정하거나 설정을 변경할 수 있습니다.
2. **기본값**\
   타겟팅을 설정하지 않을 경우 \*\*`모든 사용자`\*\*가 A/B 테스트 참여 대상이 됩니다.
3. **환경**\
   \*\*`운영, 개발 환경`\*\*에서 설정할 수 있습니다.
4. **규칙**\
   특정 사용자로 타겟을 제한하고자 할 경우, 최소 1개의 규칙이 필요합니다.\
   타겟에 대한 규칙은 최대 10개를 가질 수 있습니다. 각 규칙은 OR 연산자가 적용되어, 해당 규칙 중 하나만 만족하면 타겟이 됩니다.\
   예를 들어 신상품을 구매한 소비자를 타겟으로 정한다고 한다면 "'신상품' 카테고리에 속한 상품을 구매한 사용자" 라는 규칙과 "상품명에 '신상'이 들어가는 상품을 구매한 사용자"라는 규칙을 정하고, 이 중 하나만 만족하면 타겟이 되도록 설정할 수 있습니다.
5. **조건**\
   규칙은 생성과 동시에 1개의 조건을 가지며, 최대 10개의 조건을 가질 수 있습니다.\
   각 조건은 AND 연산자가 적용되어, 해당 조건을 모두 만족하는 경우에 타겟이 됩니다.\
   예를 들어 모바일 운영체제 중 안드로이드 사용자이면서 연령대가 30대인 사용자를 타겟으로 한다면 "모바일 운영체제가 안드로이드인 사용자" 라는 조건과 "연령대가 30대인 사용자" 라는 조건을 모두 만족해야 합니다.
6. **속성**\
   조건은 속성을 활용하여 설정할 수 있습니다. 따라서 속성을 지원하는 핵클 SDK를 연동하고 최소한 타겟 규칙에 정의한 사용자의 속성을 수집할 수 있어야 합니다.\
   속성에 대한 자세한 내용은 \[속성]\(../../이벤트 관리/intro-property/index.md) 문서를 참고하세요.\
   또한, A/B 테스트, 기능 플래그를 활용한 조건 설정도 가능합니다.

## 규칙 및 조건의 구성

{% hint style="warning" %}
규칙과 조건은 아래의 조합으로 구성될 수 있습니다.

(1) **`속성명 + 연산자 + 속성값`**

(2) **`A/B 테스트 (기능 플래그) + 연산자 + A/B 테스트 그룹 (기능 플래그 상태 값)`**

(3) **`타겟팅 그룹 + 연산자 + 사용자 그룹 키`**
{% endhint %}

예를 들어 사용자의 운영체제를 osName이라는 속성명으로 수집하고 있던 상황에서 모바일 운영체제 중 안드로이드 사용자를 타겟으로 설정하고 싶은 경우 아래와 같은 조합을 만들 수 있습니다.

* 속성명: osName
* 연산자: 다음 중 하나
* 속성값: Android, android

최초로 만들어진 조합은 첫 번째 규칙이 됩니다. 이러한 규칙에 또 다른 조합을 AND로 추가하느냐 OR로 추가하느냐에 따라 전혀 다른 성격의 타겟을 만들 수 있습니다.

아래에서 연산자와 AND/OR에 대해 좀 더 자세히 알아보겠습니다.

### 연산자

연산자는 조건을 설정할 때 사용되며, 속성명과 속성값의 관계를 설명하는 역할을 합니다.\
핵클은 총 22가지의 연산자를 제공하며, **선택한 속성명이 갖는 속성값의 타입에 따라 적절한 연산자를 선택해야** 합니다.

보다 자세한 내용은 아래 표를 참고하세요.

| 연산자                | 속성값 타입  | 속성값 선택 가능 개수               |
| ------------------ | ------- | -------------------------- |
| 다음 중 하나            | String  | 복수 선택 가능                   |
| 다음 중 하나가 아닌        | String  | 복수 선택 가능                   |
| 다음 중 하나로 시작하는 것    | String  | 복수 선택 가능                   |
| 다음 중 하나로 시작하지 않는 것 | String  | 복수 선택 가능                   |
| 다음 중 하나로 끝나는 것     | String  | 복수 선택 가능                   |
| 다음 중 하나로 끝나지 않는 것  | String  | 복수 선택 가능                   |
| 다음 중 하나를 포함하는 것    | String  | 복수 선택 가능                   |
| 다음 중 하나를 포함하지 않는 것 | String  | 복수 선택 가능                   |
| =                  | Number  | 복수 선택 가능                   |
| ≠                  | Number  | 복수 선택 가능                   |
| >=                 | Number  | 단일 항목 선택                   |
| <=                 | Number  | 단일 항목 선택                   |
| >                  | Number  | 단일 항목 선택                   |
| <                  | Number  | 단일 항목 선택                   |
| 참일 경우              | Boolean | 선택 불가 (연산자에 속성값 '참'이 포함됨)  |
| 거짓일 경우             | Boolean | 선택 불가 (연산자에 속성값 '거짓'이 포함됨) |
| version =          | Version | 단일 항목 선택                   |
| version ≠          | Version | 단일 항목 선택                   |
| version >          | Version | 단일 항목 선택                   |
| version ≥          | Version | 단일 항목 선택                   |
| version <          | Version | 단일 항목 선택                   |
| version ≤          | Version | 단일 항목 선택                   |

#### 예시

광역시에 거주하는 사용자를 타겟으로 하고 싶다면 여섯 개의 광역시 중 한 곳에 거주하면 되므로 다음과 같이 규칙을 정의할 수 있습니다.

{% hint style="success" %}
\[광역시에 거주하는 사용자] 규칙 만들기

* 속성: 거주지 (해당 속성의 속성명은 residence, 속성값 타입은 String이라고 가정)
* 연산자: 다음 중 하나
* 연산자에서 말하는 '다음'에 들어갈 속성값: "인천광역시", "대전광역시", "대구광역시", "울산광역시", "부산광역시", "광주광역시"
  {% endhint %}

### AND 및 OR

AND 및 OR은 두 개의 조합을 피연산자로 가지며, 다음과 같은 의미를 지닙니다.

1. **AND**\
   피연산자를 둘 다 만족시켜야 타겟에 포함됩니다.\
   예를 들어 '모바일 운영체제 중 안드로이드 사용자 **AND** 주소지가 서울인 사용자' 라면, 안드로이드 운영체제를 가진 모바일 기기를 사용하는 사용자 **중에서** 주소지가 서울인 사용자만 타겟이 됩니다.
2. **OR**\
   피연산자 중 하나만 만족시키면 타겟에 포함됩니다.\
   예를 들어 '모바일 운영체제 중 안드로이드 사용자 **OR** 주소지가 서울인 사용자' 라면, 안드로이드 운영체제를 가진 모바일 기기를 사용하는 사용자**이거나** 주소지가 서울인 사용자가 타겟이 됩니다.

{% hint style="info" %}
타겟팅에서 AND, OR의 쓰임새

* AND 연산자는 **규칙에 조건을 추가할 때** 사용합니다. 여러 조건을 모두 만족시켜야 타겟에 포함되므로 AND 연산자를 많이 사용할 수록 타겟의 범위가 좁아집니다.
* OR 연산자는 **규칙을 추가할 때** 사용합니다. 여러 규칙 중 하나만 만족시키면 타겟에 포함되므로 OR 연산자를 많이 사용할 수록 타겟의 범위가 넓어집니다.
  {% endhint %}

## 대시보드에서 타겟팅 설정하기

### A/B 테스트 생성후

A/B 테스트 상세의 상단 공통 영역에서 A/B 테스트 타겟팅 설정 정보를 볼 수 있습니다.\
설정 정보 우측을 보면 \*\*`타겟팅 설정하기`\*\*라는 버튼을 누르면 아래 스크린샷과 같이 첫 번째 규칙의 첫 번째 조건을 설정할 수 있습니다.

설정할 때 입력 혹은 선택할 값 및 각 버튼의 설명은 다음과 같습니다.

1. 속성명
2. 연산자. 속성명이 갖는 타입을 고려하여 선택하시기 바랍니다.
3. 속성값. 연산자에 따라 선택할 수 없는 경우도 있고 여러 개 선택할 수 있는 경우도 있습니다.
4. 규칙을 삭제합니다.
5. 조건을 추가합니다.
6. 규칙을 추가합니다.

5의 **`+ AND 조건 추가하기`** 버튼을 누르면 아래 스크린샷과 같이 규칙 1에 조건이 추가되며, 이어서 6의 **`+ 규칙 추가하기`** 버튼을 누르면 규칙 2가 추가됩니다.

![](/files/7oMVxN20elmHhaoU0puk)

앞서 언급한 바와 같이, 규칙은 최대 10개의 조건을 가질 수 있으며, 타겟팅은 최대 10개의 규칙을 가질 수 있습니다.\
조건을 추가할 때는 AND 연산자이며, 규칙을 추가할 때는 OR 연산자라는 것을 잊지 마세요.

## 대시보드에서 설정 보기

A/B 테스트 상세의 상단 공통 영역에서 A/B 테스트 타겟팅 설정 정보를 볼 수 있습니다.

### 타겟팅 미설정 (규칙 없음)

타겟팅을 설정하지 않은 경우, 즉 규칙이 없는 경우는 A/B 테스트에 참여할 사용자를 제한하지 않은 것이므로 **모든 사용자**를 대상으로 합니다.

**A/B 테스트 상태가 준비 중인 경우**

![](/files/b55xc010IhdUqeoYU0C4)

①에서 모든 사용자 대상임을 보여줍니다.\
②의 타겟팅 설정하기 버튼을 통해 설정 할 수 있습니다.\
③에서 규칙 예시를 볼 수 있습니다. 이는 실제 규칙이 아니며 규칙을 설정할 경우 이런 식으로 보인다는 것을 보여주는 사례입니다.

**A/B 테스트 상태가 준비 중이 아닌 경우**

![](/files/XuX8pswDiCa38OqFy5a8)

①에서 모든 사용자 대상임을 보여줍니다.

### 타겟팅 설정 (규칙 1개 이상)

타겟이 설정된 경우 A/B 테스트에 참여할 사용자를 제한한 것이므로 1개 이상의 규칙을 갖고 있습니다.

**A/B 테스트 상태가 준비 중인 경우**

![](/files/geuUK8QS2KuoQI62Uqxx)

①에서 몇 개의 규칙이 설정된 상태인지 보여줍니다.\
②는 규칙을 접어놓은 상태임을 의미합니다. 기본적으로 전체 규칙을 보여주지 않고 접어둡니다.\
③의 타겟팅 설정하기 버튼을 통해 타겟 설정을 할 수 있습니다.\
④에서 규칙 미리보기가 가능합니다. 규칙 1의 조건 1을 보여줍니다. 추가 정보를 보기 위해서는 ②를 클릭해서 펼쳐야 합니다.

아래는 펼친 사례입니다.

![](/files/BxTsPfB0a0ZVl1Urfh66)

펼친 경우 ① 및 ③은 동일하지만 ②의 방향이 바뀌어있습니다. 펼쳐진 상태임을 의미합니다.\
또한 ④에서 모든 규칙을 볼 수 있습니다.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.hackle.io/ab-test/create-and-configure/ab-targeting.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
