# 유저와 기기간의 관계

## 개요 <a href="#overview" id="overview"></a>

* Marketap SDK는 이벤트와 메시징의 정확도를 위해 **기기(Device)**&#xC640; **유저(User)** 간의 관계를 추적합니다.
* 이 문서에서는 앱 실행부터 로그아웃까지, 기기와 유저가 어떤 방식으로 연결되고 해제되는지 상세히 설명합니다.

## 1. 기본 개념 정리

<table><thead><tr><th width="179.5">용어</th><th>설명</th></tr></thead><tbody><tr><td>기기 (Device)</td><td>앱이 설치된 단말을 의미하며, device_id로 식별됩니다. 웹에서는 cookie id, 앱에서는 idfv(iOS)와 gaid(Android)로 결정합니다.</td></tr><tr><td>유저 (User)</td><td>회원을 말하며, user_id로 식별됩니다.</td></tr></tbody></table>

* **기기 1개**는 **유저 0명 또는 1명**과 연결될 수 있습니다.
* **유저 1명**은 **0개 이상의 기기**를 가질 수 있습니다.
* 이 관계는 SDK의 `identify()` 또는 `login()` 호출 여부에 따라 결정됩니다.

## 2. 상태 흐름도 및 단계별 동작

### 2-1. 초기 상태 (앱 실행 직후 – 유저 미식별)

* SDK는 아직 어떤 유저인지 식별하지 못한 상태입니다.
* 이때 기기의 **user\_id 필드(기기의 소유주)** 는 비어 있습니다.
* 콘솔에서는 해당 기기를 **익명 사용자로 분류**합니다.

### 2-2. 유저 식별 (`identify()` 또는 `login()` 호출 시)

유저가 식별된 시점에 SDK는 아래와 같은 동작을 수행합니다.

* 이후 모든 이벤트에 `user_id`가 포함됨
* 해당 **기기의 소유주로 해당 user\_id가 연결됨**

### 2-3. 식별 해제 (`resetIdentity()` 또는 `logout()` 호출 시)

식별 해제가 되는 시점에 SDK는 아래와 같은 동작을 수행합니다.

* 이후 이벤트에는 `user_id`가 포함되지 않음
* Marketap의 기기 DB에서 user\_id 필드가 제거됨

## 3. 기기–유저 관계가 중요한 이유

### 3-1. 푸시 메시지 전송 대상 결정

* 캠페인에서 특정 `user_id`에 푸시를 보내는 경우,
* 해당 유저와 연결된 **모든 기기**에 푸시가 발송됩니다.
* 이 연결 정보는 `identify()`를 통해 SDK가 업데이트한 **기기 user\_id 필드(소유주)**&#xB97C; 기준으로 합니다.

```
예: user_1234에게 푸시 전송
→ 기기 A, B가 user_1234와 연결되어 있다면 둘 다 수신
→ 기기A에서 로그아웃을 함
→ 로그아웃 시 연결 해제되므로 푸시 대상에서 제외됨 (다음 푸시메세지 발송은 기기B에만 도달)
```

### 3-2. 오디언스 분석 정확도 확보

* “30일 내 구매한 20대 남성”처럼 유저 속성과 이벤트를 조합한 오디언스를 만들기 위해선,
* **이벤트가 어떤 유저의 것인지 식별 가능해야** 합니다.
* `identify()`가 호출되지 않으면 해당 이벤트는 익명 처리되며, 조건 오디언스에서 제외됩니다.

## 4. 이벤트 수집 예시

<table><thead><tr><th>시점</th><th width="407.88671875">이벤트에 포함되는 정보</th><th>구분</th></tr></thead><tbody><tr><td>식별 전</td><td><code>device_id</code>만 포함 (<code>user_id</code> 없음)</td><td>비회원 이벤트</td></tr><tr><td>식별 후 (identify)</td><td><code>device_id</code> + <code>user_id</code> 포함</td><td>회원 이벤트</td></tr><tr><td>식별 해제 (resetIdentity)</td><td><code>device_id</code>만 포함 (<code>user_id</code> 없음)</td><td>비회원 이벤트</td></tr></tbody></table>
