> ## Documentation Index
> Fetch the complete documentation index at: https://documentation.onesignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Journey 액션

> 대기 기간을 정의하고, 사용자 행동에 따라 Journey를 분기하며, Journey 단계를 사용하여 사용자에게 태그를 지정합니다.

**Journey 액션**을 사용하여 사용자가 Journey를 통해 이동하는 방법과 시기를 제어하고, 경험을 개인화하며, 결과를 테스트하세요.

## 대기

특정 시간(분, 시간, 일 또는 주)만큼 사용자의 Journey 진행을 지연시킵니다.

사용 용도:

* 메시지와 단계 간격 조정
* 분기 전에 사용자가 메시지와 상호작용할 수 있는 시간 허용

<Frame caption="현재 Journey에서 진행을 기다리고 있는 사용자가 있는 대기 노드">
  <img src="https://mintcdn.com/onesignal/yt4lRKoquAlWvRvF/images/docs/wait-node.png?fit=max&auto=format&n=yt4lRKoquAlWvRvF&q=85&s=13178c10c8f9d0e439c47e601ad00978" width="644" height="391" data-path="images/docs/wait-node.png" />
</Frame>

***

## 조건까지 대기

특정 조건을 충족할 때까지 이 단계에서 사용자를 보류합니다:

* 세그먼트 진입
* 메시지 이벤트 트리거 (예: 특정 메시지 전달, 열림 또는 클릭)
  * 현재 **Wait until 단계당 하나의 메시지 이벤트만** 지원됩니다.
* 커스텀 이벤트 트리거 (예: 온보딩 완료, 구매 완료)

**여러 조건을 추가**하고 \_먼저 충족하는 조건\_에 따라 사용자를 분기할 수 있습니다. 특정 시간 내에 이러한 조건이 충족되지 않으면 **만료 분기**를 설정하여 사용자가 Journey를 계속하거나 완전히 종료하도록 할 수 있습니다.

<Note>
  사용자가 이 단계에 도달할 때 이미 조건을 충족하는 경우, 대기 없이 즉시 해당 분기로 이동합니다. 조건은 순서대로(위에서 아래로/A–Z) 평가됩니다.
</Note>

커스텀 이벤트 진입 규칙을 사용하면 [Event Matching](#event-matching)을 추가하여 사용자를 여러 번 입력할 때 Journey를 진행할 사용자 인스턴스를 제어할 수 있습니다.

<Frame caption="사용자가 세그먼트에 있거나 커스텀 이벤트를 트리거할 때까지 대기">
  <img src="https://mintcdn.com/onesignal/yt4lRKoquAlWvRvF/images/journeys/journeys-wait-until-action.png?fit=max&auto=format&n=yt4lRKoquAlWvRvF&q=85&s=1a27c7d1bb9e26bc68a9980d9662b400" width="952" height="1462" data-path="images/journeys/journeys-wait-until-action.png" />
</Frame>

커스텀 이벤트가 조건과 일치하면 해당 이벤트는 사용자를 대신하여 저장되며 Journey 메시지를 보낼 때 [Liquid 구문에서 참조](./custom-events#liquid-syntax-for-custom-events)할 수 있습니다.

### 이벤트 매칭

커스텀 이벤트 진입 규칙을 사용하면 사용자가 Journey에 여러 번 진입할 수 있습니다. Wait Until 단계의 **Event Matching** 설정을 사용하면 Journey를 진행할 사용자 인스턴스를 제어할 수 있습니다.

요구 사항:

* 커스텀 이벤트를 사용하도록 Journey 진입 규칙을 설정합니다.
* 사용자를 Journey에 진입시킬 때 이벤트 속성을 포함합니다.

예를 들어, "설문 조사 리마인더" Journey가 있습니다. 여러 설문 조사가 있으므로 사용자는 Journey에 여러 번 진입할 수 있습니다(각 설문 조사당 한 번). 설문 조사를 완료하지 않은 경우 리마인더 메시지를 보내거나 완료한 경우 제거하려고 합니다.

**Event Matching** 설정을 사용하여 Journey를 진행할 사용자 인스턴스를 제어할 수 있습니다.

**예시**:

<Steps>
  <Step title="Journey 진입 규칙 및 커스텀 이벤트 속성 설정">
    커스텀 이벤트를 사용하도록 Journey 진입 규칙을 설정합니다. **예시**: `survey_start`

    <Frame caption="커스텀 이벤트를 사용하는 Journey 진입 규칙">
      <img src="https://mintcdn.com/onesignal/yt4lRKoquAlWvRvF/images/journeys/survey_start.png?fit=max&auto=format&n=yt4lRKoquAlWvRvF&q=85&s=146924d7b2a759c1894496745a078c4f" width="469" height="298" data-path="images/journeys/survey_start.png" />
    </Frame>

    사용자는 [커스텀 이벤트 API](/reference/create-custom-events)를 통해 Journey에 진입합니다.

    커스텀 이벤트는 `name`이 `survey_start`로 설정되고 `payload` 속성 `survey_id`에 그들이 참여하는 설문 조사 값(예: `survey_1`)이 포함됩니다.

    ```json Entrance Trigger Event Example theme={null}
    {
      "events": [
        {
          "external_id": "UserA",
          "name": "survey_start",
          "properties": {
              "survey_id": "survey_1"
          }
        }
      ]
    }
    ```
  </Step>

  <Step title="Wait Until 단계 및 커스텀 이벤트 속성 생성">
    커스텀 이벤트를 사용하도록 Wait Until 조건을 설정합니다. **예시**: `survey_complete`

    **Event Matching** 옵션을 설정하여 다음을 일치시켜 Wait Until 단계를 통해 진행할 사용자 인스턴스를 지정합니다:

    * **Trigger Event Property**: Journey 진입 트리거 이벤트에 설정 (예: `survey_id`)
    * **Wait Event Property**: Wait Until 이벤트에 설정 (예: `survey_type`)

    ```json Wait Until Event Example theme={null}
    {
      "events": [
        {
          "external_id": "UserA",
          "name": "survey_complete",
          "properties": {
              "survey_type": "survey_1"
          }
        }
      ]
    }
    ```

    `survey_id` 값이 `survey_type` 값과 일치하면 해당 사용자 인스턴스가 Journey를 진행합니다.

    <Warning>
      **Trigger Event Property**와 **Wait Event Property** 모두에서 동일한 속성(예: `survey_id`)을 사용할 수 있습니다. 예시에서는 개념을 설명하기 위해 서로 다른 속성(예: `survey_id` 및 `survey_type`)을 사용합니다.

      속성은 대소문자를 구분합니다! `survey_1`은 `Survey_1`과 같지 않습니다.
    </Warning>

    **만료 분기**:

    만료 시간 내에 Wait Until 이벤트가 발생하지 않으면 사용자는 Journey를 진행합니다. 이 예시는 사용자에게 설문 조사를 완료할 수 있는 1주일을 제공합니다.

    <Frame caption="커스텀 이벤트를 사용하는 Wait Until 단계">
      <img src="https://mintcdn.com/onesignal/yt4lRKoquAlWvRvF/images/journeys/survey_complete.png?fit=max&auto=format&n=yt4lRKoquAlWvRvF&q=85&s=59ad63e1af649a09f5c3a18a32a979b8" width="488" height="648" data-path="images/journeys/survey_complete.png" />
    </Frame>
  </Step>

  <Step title="메시지 단계 추가">
    예시를 완료하려면 만료 분기 내에 메시지 단계를 추가하여 리마인더를 보냅니다.

    <Frame caption="만료 분기 내의 메시지 단계">
      <img src="https://mintcdn.com/onesignal/yt4lRKoquAlWvRvF/images/journeys/survey_reminder.png?fit=max&auto=format&n=yt4lRKoquAlWvRvF&q=85&s=1a367c270dec75e70a6409b3c66be36e" width="955" height="572" data-path="images/journeys/survey_reminder.png" />
    </Frame>
  </Step>

  <Step title="테스트해보세요!">
    위의 단계를 따른 후 테스트할 수 있습니다:

    * [커스텀 이벤트 API](/reference/create-custom-events)의 `external_id`를 귀하의 외부 ID로 교체합니다
    * `survey_id`가 `survey_1`인 `survey_start` 이벤트를 트리거합니다
      * 사용자가 Journey에 진입하고 Wait Until 단계로 이동하는 것을 볼 수 있습니다

    <Warning>
      이벤트는 즉시 처리되지 않지만 매우 빠릅니다! 이벤트가 처리되기 전에 몇 분 정도 기다려야 할 수 있습니다.

      커스텀 이벤트 목록을 확인하여 이벤트가 처리되었는지 확인하세요.
    </Warning>

    * `survey_id`가 `survey_2`인 다른 `survey_start` 이벤트를 트리거합니다
      * 2명의 사용자가 Journey와 Wait Until 단계에 진입하는 것을 볼 수 있습니다
    * `survey_type`이 `survey_1`인 `survey_complete` 이벤트를 트리거합니다
      * 사용자가 Journey를 진행하는 것을 볼 수 있습니다
    * `survey_type`이 `survey_2`인 다른 `survey_complete` 이벤트를 트리거합니다
      * 두 사용자 인스턴스 모두 Journey를 진행하고 종료하는 것을 볼 수 있습니다

    <Check>
      Event Matching을 사용한 Journey 커스텀 이벤트 예시를 완료했습니다!
    </Check>
  </Step>
</Steps>

***

## 시간 윈도우

**특정 요일과 시간**을 기준으로 사용자가 Journey의 다음 단계로 이동할 수 있는 시기를 제한합니다.

**예시**: 주말 저녁에만 사용자가 메시지를 받을 수 있도록 허용합니다.

<Frame caption="시간 윈도우 노드의 예시를 보여주는 스크린샷">
  <img src="https://mintcdn.com/onesignal/3zq1PvSaqvUE2bIx/images/docs/31f4664-Screenshot_2024-03-21_at_15.56.12.png?fit=max&auto=format&n=3zq1PvSaqvUE2bIx&q=85&s=07267995ec158e725ecd0c6afb28af20" width="540" height="448" data-path="images/docs/31f4664-Screenshot_2024-03-21_at_15.56.12.png" />
</Frame>

### 시간 윈도우 동작 방식

사용자가 허용된 시간 외에 이 노드에 진입하는 경우:

* OneSignal은 **다음 사용 가능한 윈도우**까지 사용자를 지연시키도록 타이머를 설정합니다
* **윈도우 진입 시간은 무작위로 지정됩니다**

시간 윈도우는 시간대 데이터를 사용할 수 있는 경우 **사용자의 시간대**를 사용할 수 있습니다. 사용자에게 시간대 데이터가 없으면 앱의 기본 시간대가 사용됩니다.

**예시**:
시간 윈도우가 화요일 오후 1시부터 오후 6시(PST)이고 사용자가 월요일에 노드에 도달하면 화요일 오후 5시 45분과 같은 무작위 시간에 계속 진행될 수 있습니다.

### 반복 전송에 시간 윈도우 사용

시간 윈도우 노드를 [재진입 규칙](./journeys-settings#re-entry-rules)과 결합하여 일정(매일, 매주 등)에 따라 반복 메시지를 보낼 수 있습니다. 사용자가 메시지를 받기 전에 올바른 요일과 시간을 기다리도록 시간 윈도우를 Journey의 **첫 번째 단계**로 배치하세요.

재진입 기간을 선택할 때는 **시간 윈도우 기간보다 길되** 전송 간격보다 짧게 설정하세요. 이렇게 하면 동일한 윈도우 내에서 이중 전송을 방지하면서도 사용자가 다음 윈도우를 놓치지 않을 만큼 충분히 일찍 재진입할 수 있습니다.

**예시 — 매일 전송:**

* 시간 윈도우: 매일 오전 10시 \~ 오후 6시 (8시간 윈도우)
* 재진입: 12시간 (8시간 윈도우보다 길고 24시간보다 짧음)
* 결과: 사용자는 종료 후 약 12시간 후에 재진입하여 항상 다음 날 윈도우가 닫히기 전에 도착하고 하루에 하나의 메시지를 수신합니다

전체 예시는 [특정 요일의 반복 Journey](./journeys-examples#recurring-journeys-for-specific-days)와 [매일 메시지를 전송하도록 예약할 수 있나요?](./journeys-examples#can-i-schedule-a-message-to-send-every-day)를 참고하세요.

***

## Yes/No 분기

**세그먼트 멤버십** 또는 **메시지 동작**을 기반으로 사용자를 분기합니다.

### 세그먼트 멤버십

사용자가 속한 세그먼트를 기준으로 분기를 생성합니다.

**예시**:
사용자가 플랜 유형별로 태그되어 있는 경우:

* "무료" 분기 = 업그레이드 프로모션
* "유료" 분기 = 프리미엄 기능 강조

### 메시지 동작

Journey의 이전 메시지와의 상호작용을 기반으로 분기합니다:

* **푸시**: 클릭됨, 전달됨
* **이메일**: 클릭됨, 열림, 전달됨

**참고**: Safari는 확인된 전달을 지원하지 않습니다.

***

## 분할 분기

메시징, 채널 또는 Journey 흐름을 테스트하기 위해 사용자를 서로 다른 경로에 무작위로 분배합니다.

<Frame caption="3방향 분할 분기의 예시">
  <img src="https://mintcdn.com/onesignal/56ctKxZSV4m5VEkn/images/docs/b7a62545ad25878949fe7b0fffc1b64ddee30730dbe351cd51eaea5ed8e9964f-Screenshot_2024-12-23_at_1.37.49_PM.png?fit=max&auto=format&n=56ctKxZSV4m5VEkn&q=85&s=b9f67d64e3721cba629798663860be3f" width="1916" height="1430" data-path="images/docs/b7a62545ad25878949fe7b0fffc1b64ddee30730dbe351cd51eaea5ed8e9964f-Screenshot_2024-12-23_at_1.37.49_PM.png" />
</Frame>

<Warning>
  Journey가 실행되면 Split Branch를 **편집할 수 없습니다**. 분기 수를 변경하려면 새 Journey를 생성하세요.
</Warning>

### 작동 방식

* 최대 20개의 분기
* 동일하거나 사용자 지정 백분율 분할 설정
* 백분율은 정수로 반올림됩니다 (예: 3방향 분할은 34/33/33이 됨)
* 작은 샘플 크기에서는 분포가 약간 다를 수 있습니다

<Frame caption="분할 분기 설정">
  <img src="https://mintcdn.com/onesignal/jFWn5xzleD8du3j6/images/docs/517165a9f4f78a584ce252ae7581c6fc48f05e040a0ba921d759392577218988-Screenshot_2024-12-23_at_11.28.53_AM.png?fit=max&auto=format&n=jFWn5xzleD8du3j6&q=85&s=57308fa43c451864c80af0c97a4a9cfa" width="460" height="456" data-path="images/docs/517165a9f4f78a584ce252ae7581c6fc48f05e040a0ba921d759392577218988-Screenshot_2024-12-23_at_11.28.53_AM.png" />
</Frame>

기본적으로 사용자는 Journey에 재진입할 때마다 무작위로 재배정됩니다.
동일한 분기에 유지하려면 **재진입 시 무작위 배정**을 끕니다.

**Tag User** 액션을 사용하여 사용자가 따른 분기를 추적합니다.

### A/B/N 테스트

중첩된 Split Branch를 사용하여 두 개 이상의 변형을 동시에 테스트합니다.

**예시**:
사용자를 3개의 변형에 균등하게 분할하려면:

1. 첫 번째 분기: 33% vs 67%
2. 67% 분기 아래에 또 다른 50/50 Split Branch 추가

이렇게 하면 각 경로에서 약 33%가 됩니다.

### 대조군

메시징의 영향을 테스트하려면 한 분기를 비워 둡니다(메시지 노드 없음). 이를 통해 메시지를 전혀 받지 않는 사용자와 비교할 수 있습니다.

### 승자 선택

성공적인 변형이 식별되면 해당 경로로 트래픽의 \*\*100%\*\*를 보내도록 분기를 업데이트합니다.

시간이 지남에 따라 영향을 지속적으로 측정하려면 작은 **홀드아웃 그룹**(승리 메시지를 받지 않는 사용자 비율)을 유지하는 것을 고려하세요.

***

## 사용자 태그 지정

이 액션을 사용하여 Journey 중에 태그를 적용하거나 제거합니다.

**일반적인 사용 사례**:

* Journey 진행 상황 추적 (예: `journeyStep: welcome`)
* 주요 순간에 사용자에게 태그를 지정하여 인앱 메시지 강화
* 활성 태그를 사용하여 다른 Journey에서 사용자 제외

<Frame caption="간단한 온보딩/환영 흐름">
  <img src="https://mintcdn.com/onesignal/6tscVAtiSqz353kV/images/docs/99f568ee808ea29f528fd83830bf9a7ebed7e590e95d34047e6495fc810015f2-image.png?fit=max&auto=format&n=6tscVAtiSqz353kV&q=85&s=cb4cbbbe43b252f44f22f08379b9b709" width="237" height="485" data-path="images/docs/99f568ee808ea29f528fd83830bf9a7ebed7e590e95d34047e6495fc810015f2-image.png" />
</Frame>

### 예시: 온보딩 흐름 제어

1. 첫 번째 단계: 태그 추가 (예: `onboardingJourney: active`)
2. 이 태그를 사용하여 다른 Journey에서 제외할 세그먼트 생성
3. 마지막 단계: 값을 공백으로 설정하여 태그 제거

<Frame caption="사용자로부터 태그를 제거하기 위한 태그 노드 설정">
  <img src="https://mintcdn.com/onesignal/4HyuQPBpu-4xjmQC/images/docs/d4199348801030819f94a56976af9b180a77434be6f8b76fd24c7c5a283fc0ba-image.png?fit=max&auto=format&n=4HyuQPBpu-4xjmQC&q=85&s=004b49369e6eb2a13a55dfa1b93855bf" width="651" height="193" data-path="images/docs/d4199348801030819f94a56976af9b180a77434be6f8b76fd24c7c5a283fc0ba-image.png" />
</Frame>

***

### 모범 사례: 웹훅 또는 개인화와 함께 태그 사용

Journey에서 태그를 추가하거나 제거하면 다음 단계에서 해당 변경 사항을 사용할 준비가 되기까지 짧은 시간이 걸릴 수 있습니다. 모든 것이 원활하게 작동하도록 하려면:

* **웹훅의 경우**: 웹훅으로 데이터를 보내기 전에 태그를 설정한 후 짧은 대기 시간을 추가합니다.
* **개인화의 경우**: 이메일에서 콘텐츠를 개인화하는 데 사용하기 전에 태그를 설정하거나 제거한 후 짧은 대기 시간을 추가합니다.

<Tip>
  Tag 액션과 다음 단계 사이에 **15분 대기 노드**를 추가하는 것이 좋습니다. 이렇게 하면 태그가 완전히 준비되므로 웹훅이나 이메일에 항상 올바른 데이터가 포함됩니다.
</Tip>

***

## 자주 묻는 질문

### 어떤 푸시 액션 버튼이 클릭되었는지에 따라 Journey를 분기할 수 있나요?

내장된 예/아니오 분기만으로는 불가능합니다. 메시지 동작 조건은 "클릭됨" 또는 "전달됨"만 감지하며 어떤 특정 버튼이 클릭되었는지는 감지하지 않습니다. 버튼별로 분기하려면 SDK에서 클릭 이벤트를 수신하고 Action ID를 읽어 [Custom Event](./custom-events)를 전송하세요. 그런 다음 [Wait Until](#wait-until) 단계를 사용하여 어느 custom event가 먼저 발생하는지에 따라 분기하세요.

코드 예제가 포함된 전체 안내는 [액션 버튼 클릭으로 Journey 분기하기](./journeys-examples#branch-a-journey-by-action-button-clicked)를 참조하세요.

### Journey에서 Custom Event를 사용하려면 코드를 작성해야 하나요?

네. Custom Event는 [SDK](./mobile-sdk-reference#custom-events)를 사용하여 앱이나 웹사이트에서 OneSignal로 전송되거나 [REST API](/reference/create-custom-events)를 사용하여 백엔드에서 전송됩니다. 대시보드만으로 Custom Event를 발생시키는 방법은 없습니다. 이벤트가 OneSignal로 유입되면 추가 코드 없이 대시보드를 통해 Journey와 세그먼트에서 사용할 수 있습니다.
