# 문제 해결

자주 발생하는 연동 이슈와 해결 방법을 정리했습니다.

{% hint style="success" %}
문제가 생기면 아래부터 확인해 주세요.

* `variation`과 `track`에 같은 사용자 식별자를 쓰고 있는지 확인합니다.
* JavaScript SDK에서는 사용자 정보를 객체 형태로 넘겼는지 확인합니다.
* 브라우저 캐시 때문에 이전 설정이 남아 있지 않은지 확인합니다.
* 실시간 노출 현황과 목표 지표의 집계 기준이 다른지 확인합니다.
  {% endhint %}

### 1. `variation` 호출 시 사용자 식별자 에러가 발생합니다

#### 원인

JavaScript SDK는 사용자 정보를 객체 형태로 받습니다. 문자열만 넘기면 에러가 발생할 수 있습니다.

#### 해결 방법

아래처럼 사용자 정보를 객체로 전달해 주세요.

```javascript
hackleClient.variation(6, "user_id") // 잘못된 사례
hackleClient.variation(6, { id: "user_id" }) // 올바른 사례
```

### 2. 사용자 지정 식별자를 쓰는데 지표가 이상합니다

#### 확인할 항목

`variation`과 `track` 둘 다 같은 식별자를 전달해야 합니다. 한쪽만 식별자를 넘기면 서로 다른 사용자로 집계될 수 있습니다.

#### 잘못된 사례

```javascript
hackleClient.variation(7, { id: "12345" })
hackleClient.track("purchase")
```

#### 올바른 사례

```javascript
// 1안. 사용자 지정 식별자 사용
hackleClient.variation(7, { id: "12345" })
hackleClient.track("purchase", { id: "12345" })

// 2안. SDK가 관리하는 디바이스 식별자 사용
hackleClient.variation(7)
hackleClient.track("purchase")
```

{% hint style="warning" %}
식별자 전달 방식은 사용자 분배와 이벤트 전송에서 반드시 같아야 합니다.
{% endhint %}

### 3. 같은 사용자인데 실시간 노출 현황이 계속 증가합니다

정상 동작입니다.

* 실시간 노출 현황은 `variation` 호출 횟수를 그대로 집계합니다.
* 중복 제거를 하지 않은 전체 노출 수입니다.
* 목표 지표는 중복을 제거한 UV 기준으로 계산합니다.

**즉, 실시간 노출 현황과 목표 지표는 숫자가 다를 수 있습니다.**

### 4. 테스트 종료 후 모든 트래픽이 Winner 그룹으로 갑니다

정상 동작입니다. Winner 그룹을 선택하면 이후 트래픽은 해당 그룹으로 향합니다.

#### 권장 순서

1. 대시보드에서 A/B 테스트를 종료합니다.
2. Winner 그룹을 선택합니다.
3. 운영 환경에서 테스트 관련 코드를 제거합니다.
4. 대시보드에서 테스트를 보관 처리합니다.

### 5. JavaScript SDK에서 수동 할당이 바로 반영되지 않습니다

JavaScript SDK는 성능을 위해 설정 값을 캐시합니다. 그래서 수동 할당 결과가 바로 보이지 않을 수 있습니다.

#### 해결 방법

1. 크롬에서 강력 새로고침을 실행합니다.
2. 그래도 안 되면 개발자 도구를 엽니다.
3. 새로고침 버튼을 우클릭합니다.
4. **캐시 비우기 및 강력 새로고침**을 선택합니다.

![크롬 브라우저의 캐시 비우기 및 강력 새로고침](/files/AYFVs2bLUG8FXM6krTLV)

### 6. 테스트 그룹 A에만 몰리는 것 같습니다

테스트 그룹 A는 기본 그룹입니다. 아래 경우에는 A 그룹으로 들어갈 수 있습니다.

* 테스트에 할당되지 않은 경우
* 수동 할당 대상인 경우
* 에러가 발생한 경우

관련 동작은 아래 문서에서 자세히 확인할 수 있습니다.

* [테스트 그룹 분배 과정](/ab-test/group-distribution/ab-variation.md)
* [테스트 그룹 분배 원리](/ab-test/group-distribution/ab-bucketing.md)

#### 원인 파악 방법

일부 SDK는 `variationDetail` 메소드를 지원합니다.

이 메소드는 특정 그룹으로 분배된 이유도 함께 반환합니다. 원인 분석이 필요하면 이 메소드를 우선 확인해 주세요.


---

# 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/development-guide/troubleshooting.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.
