# Amplitude Identify call

사용자 속성을 갱신하는 Identify call의 5가지 연산자(set·setOnce·add·append·prepend·unset)의 차이와 실무 사용법. 단순 덮어쓰기·첫 기록·누적·배열 추가·속성 제거의 의도를 정확히 분리.

- 카테고리: Amplitude 이벤트 택소노미
- 소요 시간: 약 8분
- 난이도: 중간
- 업데이트: 2026.06.01
- 원문: /wiki/playbook/amplitude-event-taxonomy-checklist/how-to-use-amplitude-identify-call

## 목차

- [Identify call의 의미](#concept)
- [5가지 연산자](#operators)
- [set — 값 덮어쓰기](#set)
- [setOnce — 한 번만](#setOnce)
- [add — 누적](#add)
- [append / prepend — array에 추가](#append-prepend)
- [unset — 속성 제거](#unset)
- [호출 순서가 중요](#order)
- [자주 묻는 질문](#faq)

Amplitude의 사용자 속성(User Property)을 갱신할 때 쓰는 게 **Identify call**입니다. 단순히 값을 덮어쓰는 게 아니라 *set·setOnce·add·append·prepend·unset* 다섯 연산자로 ‘**어떻게 갱신할지**’를 명시할 수 있는 게 Amplitude의 강점입니다. 이 글은 그 연산자들의 차이와 실무 사용법을 정리합니다.

## Identify call의 의미

이벤트는 `amplitude.track()`으로 보내고, 사용자 속성은 `amplitude.identify()`로 갱신합니다. 두 API는 하는 일이 다릅니다.

|  | `track()` | `identify()` |
| --- | --- | --- |
| 목적 | “이런 이벤트가 발생했다”를 기록 | “이 사용자의 상태가 이렇게 바뀌었다”를 기록 |
| 데이터 | 이벤트 이름 + 이벤트 속성 | 사용자 속성 |
| 차트에서 | Event Segmentation의 ‘무엇이 일어났나’ | 모든 차트의 ‘누구에게 일어났나’ 필터·분류축 |
| 소급 적용 | 없음 — 발생 시점의 정보 그대로 | 설정 시점 이후 이벤트부터 적용 |

> **팁**
>
> **호출 형태.**
>
> ```
> const identify = new amplitude.Identify();
> identify.set('plan', 'Pro');
> identify.add('purchase_count', 1);
> amplitude.identify(identify);
> ```

## 5가지 연산자 한눈에

| 연산자 | 역할 | 흔한 사용처 |
| --- | --- | --- |
| `set` | 값을 덮어쓰기. 매번 새 값으로 갱신. | 현재 plan, 마지막 로그인 시각, 현재 도시 |
| `setOnce` | 처음 한 번만 설정. 이미 값이 있으면 무시. | signup_date, first_purchase_date, acquisition_source |
| `add` | 숫자에 누적 더하기/빼기. | purchase_count, total_spend, login_count |
| `append` / `prepend` | array에 값을 끝/앞에 추가. | 완료한 강좌 목록, 본 카테고리 목록 |
| `unset` | 속성 자체를 제거. | 구독 해지 후 plan 속성 제거 |

## set — 값 덮어쓰기 (가장 흔함)

‘현재 상태’를 기록할 때 씁니다. 매번 호출할 때마다 값이 새 값으로 덮어써집니다.

> **팁**
>
> ```
> identify.set('plan', 'Pro');
> identify.set('city', 'Seoul');
> identify.set('last_login_at', '2026-06-01T15:30:00Z');
> ```

- plan을 Free에서 Pro로 업그레이드 → 다음 `identify.set('plan', 'Pro')` 호출 시 덮어씀.
- 도시 이동·언어 변경처럼 ‘바뀔 수 있는 상태’는 모두 set.

## setOnce — 처음 한 번만

‘처음 일어난 일’을 영구 기록할 때 씁니다. 한 번 값이 설정되면 같은 속성에 `setOnce`를 다시 호출해도 무시됩니다.

> **팁**
>
> ```
> identify.setOnce('signup_date', '2026-06-01');
> identify.setOnce('first_purchase_date', '2026-06-15');
> identify.setOnce('acquisition_source', 'google_ads');
> ```

- **signup_date** — 가입일은 한 번만. 나중에 다시 호출되어도 첫 값 유지.
- **first_purchase_date** — 첫 구매일은 영구.
- **acquisition_source** — 처음 유입된 매체는 영구 (현재 유입 매체는 별도로 `set`).

> **주의**
>
> **실수 주의 —** ‘로그인 시점마다 setOnce(\"signup_date\", today)’ 같은 호출은 첫 번째 한 번만 작동하고 이후 무시됩니다. 의도와 다르면 코드를 잘못 작성한 것.

## add — 숫자에 누적 더하기

‘몇 번 일어났나’ 같은 누적 카운터를 만들 때 씁니다. 음수도 가능 (빼기).

> **팁**
>
> ```
> identify.add('purchase_count', 1);   // 구매 시마다 +1
> identify.add('total_spend', 89000);  // 구매 금액 누적
> identify.add('login_count', 1);      // 로그인 시마다 +1
> ```

서버에서 카운터를 관리하는 것보다 가볍습니다. Amplitude 측에서 자동으로 누적해 주므로, 클라이언트 코드는 ‘1 더하기’만 명시하면 됩니다.

> **팁**
>
> **‘이벤트 횟수’는 직접 add하지 않아도 Amplitude가 자동으로 셉니다.** Event Segmentation에서 ‘purchase 이벤트 횟수’를 보면 자동 카운트입니다. add는 ‘사용자 속성으로 카운터를 보존해서 Cohort 조건에 쓰고 싶을 때’ 같은 특수 용도에서 사용합니다.

## append / prepend — array에 추가

array 사용자 속성에 새 값을 ‘끝(append)’ 또는 ‘앞(prepend)’에 추가합니다.

> **팁**
>
> ```
> identify.append('completed_courses', 'C-PSY-101');
> identify.append('viewed_categories', 'electronics');
> identify.prepend('recent_searches', '운동화');
> ```

- **append** — 시간순 누적 목록 (학습 이력, 본 카테고리).
- **prepend** — 최근순 목록 (최근 검색어, 최근 본 상품).

## unset — 속성 자체를 제거

그 사용자에게서 속성 자체를 지웁니다. ‘없던 것처럼 만들기’.

> **팁**
>
> ```
> identify.unset('plan');   // 구독 해지 후
> identify.unset('has_pending_order');
> ```

`set('plan', null)`과는 다릅니다 — `null`로 set하면 ‘plan = null’이라는 값이 남지만, unset은 속성 자체가 사라집니다. 차트 필터의 ‘속성이 존재하는 사용자’ 조건에 영향이 다릅니다.

## 호출 순서가 중요

한 Identify 객체에 여러 연산자를 함께 묶을 수 있고, 같은 속성에 대해서도 여러 연산자를 동시에 호출할 수 있습니다. 순서는 의도대로 작동합니다.

> **팁**
>
> ```
> const identify = new amplitude.Identify();
> identify.setOnce('signup_date', '2026-06-01');  // 처음만
> identify.set('plan', 'Pro');                    // 현재 plan
> identify.add('purchase_count', 1);              // 카운터 +1
> identify.append('completed_courses', 'C-101');  // 목록 추가
> amplitude.identify(identify);
> ```

이 한 번의 호출로 4개 속성이 동시에 갱신됩니다 — set의 즉시성과 add의 누적성을 함께 활용.

## 자주 묻는 질문

### track()의 이벤트 속성으로도 사용자 속성을 보낼 수 있다고 들었는데?

부분적으로 됩니다 — track() 호출 시 `user_properties` 매개변수로 사용자 속성을 함께 보낼 수 있습니다. 그러나 set 외 다른 연산자(setOnce·add·append 등)는 안 됩니다. 복잡한 갱신은 Identify call이 정답이고, 단순히 set만 하면 되면 track 안에서 처리해도 OK입니다.

### 사용자 속성을 갱신해도 과거 이벤트에 소급 적용되지 않는다고요?

네. Identify call은 호출 *시점 이후*의 이벤트부터 새 값을 따라붙입니다. 이 점이 사용자 속성의 가장 큰 함정입니다 — [이벤트와 속성 4계층](/wiki/playbook/amplitude-event-taxonomy-checklist/what-is-amplitude-event-and-properties)에서 자세히 다뤘습니다.

### set과 setOnce 중 헷갈리면 어떻게 결정하나요?

‘이 값이 시간이 지나면서 바뀌는가?’를 물어보세요. 바뀐다면 set(현재 상태), 영원히 첫 값으로 남아야 한다면 setOnce(첫 기록). 도시·plan·이메일은 set. 가입일·첫 구매일·acquisition source는 setOnce.

### add로 누적한 값이 잘못 들어갔으면 어떻게 되돌리나요?

같은 속성에 음수로 add하면 됩니다. 예: `identify.add('purchase_count', -1)`. 또는`identify.set('purchase_count', 0)`으로 완전히 리셋. 단 한 번 적재된 이벤트 자체는 지워지지 않으니, ‘이 시점부터 카운터를 새로 시작한다’는 의도라면 set으로 리셋이 깔끔합니다.

### Group Identify와 어떻게 다른가요?

Identify는 ‘한 사용자’의 속성을 갱신, Group Identify는 ‘한 그룹(회사·팀 등)’의 속성을 갱신합니다. Group Identify를 호출하면 그 그룹의 모든 멤버에게 즉시 반영됩니다. 자세한 건 [Group Analytics](/wiki/playbook/amplitude-event-taxonomy-checklist/what-is-amplitude-group-analytics) 글에서.

## Navigation

- [전체 플레이북 Markdown sitemap](/wiki/playbook/sitemap.md)

### Amplitude 이벤트 택소노미

- [Amplitude 이벤트 택소노미](/wiki/playbook/amplitude-event-taxonomy-checklist)
- [Amplitude의 로그와 이벤트](/wiki/playbook/amplitude-event-taxonomy-checklist/what-is-amplitude-logs-and-events)
- [Amplitude 이벤트의 구조](/wiki/playbook/amplitude-event-taxonomy-checklist/what-is-amplitude-event-structure)
- [이벤트 택소노미의 정의와 CASE STUDY](/wiki/playbook/amplitude-event-taxonomy-checklist/amplitude-event-taxonomy-case-study)
- [Amplitude 이벤트의 종류](/wiki/playbook/amplitude-event-taxonomy-checklist/what-is-amplitude-event-types)
- [Amplitude 이벤트 이름과 표기법](/wiki/playbook/amplitude-event-taxonomy-checklist/how-to-name-amplitude-events)
- [Amplitude 주요이벤트와 서브이벤트](/wiki/playbook/amplitude-event-taxonomy-checklist/amplitude-key-events-vs-sub-events)
- [Amplitude 이벤트 설계의 세분성](/wiki/playbook/amplitude-event-taxonomy-checklist/how-to-decide-amplitude-event-granularity)
- [Amplitude 속성 이름과 표기법](/wiki/playbook/amplitude-event-taxonomy-checklist/how-to-name-amplitude-properties)
- [Amplitude 속성의 타입](/wiki/playbook/amplitude-event-taxonomy-checklist/how-to-choose-amplitude-property-types)
- [Amplitude의 이벤트와 속성 4계층](/wiki/playbook/amplitude-event-taxonomy-checklist/what-is-amplitude-event-and-properties)
- [Amplitude의 사용자 식별 — Device ID · User ID · Amplitude ID](/wiki/playbook/amplitude-event-taxonomy-checklist/what-is-amplitude-identity)
- [Amplitude Identify call — set·setOnce·add·append·unset](/wiki/playbook/amplitude-event-taxonomy-checklist/how-to-use-amplitude-identify-call) (현재 문서)
- [Amplitude Group Analytics — 회사·팀 단위 분석](/wiki/playbook/amplitude-event-taxonomy-checklist/what-is-amplitude-group-analytics)
- [Amplitude 전자상거래 이벤트 구현](/wiki/playbook/amplitude-event-taxonomy-checklist/how-to-implement-amplitude-ecommerce)
