> ## 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.

# Snowflake (레거시)

> Snowflake에서 OneSignal로 커스텀 이벤트를 동기화하여 사용자 행동에 기반한 자동화된 Journey 및 개인화된 메시징 캠페인을 트리거합니다.

export const PLATFORM_0 = "Snowflake"

export const DATA_TYPE_0 = "이벤트 데이터"

export const COLUMN_HEADER_0 = "Snowflake 열"

export const PROPERTIES_DESCRIPTION_0 = "VARIANT/JSON으로 된 이벤트 메타데이터"

<Frame caption="OneSignal Snowflake 통합 개요">
  <img src="https://mintcdn.com/onesignal/YOTSrtBSoqdrJ37A/images/docs/4bd3285-onesignal-snowflake-integration-2.png?fit=max&auto=format&n=YOTSrtBSoqdrJ37A&q=85&s=c41bc1d77c30e6c282bb0bfdbcd67767" width="1280" height="720" data-path="images/docs/4bd3285-onesignal-snowflake-integration-2.png" />
</Frame>

***

## 개요

OneSignal + Snowflake 통합은 두 가지 강력한 데이터 파이프라인을 지원합니다:

* **내보내기**: OneSignal에서 Snowflake로 메시징 이벤트 데이터(푸시, 이메일, SMS, 인앱)를 자동으로 전송하여 분석 및 보고합니다.
* **가져오기**: Snowflake 데이터셋에서 커스텀 사용자 이벤트를 OneSignal로 동기화하여 자동화된 Journey와 개인화된 메시징을 트리거합니다.

이러한 통합을 통해 사용자 참여 데이터를 완벽하게 제어할 수 있으며, 고급 분석 및 실시간 행동 기반 메시징을 지원합니다.

***

## OneSignal 이벤트를 Snowflake로 내보내기

메시징 성능 및 참여 이벤트(예: 전송, 열람, 클릭)를 Snowflake로 전송하여:

* 커스텀 대시보드 및 보고서 구축
* 채널 전반의 전달 및 참여 추세 추적
* OneSignal 데이터를 다른 비즈니스 데이터와 결합하여 분석

**요구사항**

* OneSignal **Professional 플랜** (무료 앱에서는 사용 불가).
* [Snowflake 계정](https://docs.snowflake.com/en/user-guide/getting-started-tutorial)
* Snowflake 계정에 `IMPORT SHARE` 및 `CREATE DATABASE` 역할이 있는지 확인하세요.
  * 공유를 승인하려면 `ACCOUNTADMIN` 역할을 사용하는 것이 좋습니다.

**설정 단계**

### 1. 가입

Snowflake 통합을 활성화하려면 Message Events Data에 대한 [OneSignal Marketplace 리스팅](https://app.snowflake.com/marketplace/listing/GZ2FQZLH2NP/onesignal-message-events-data?search=onesignal\&originTab=provider\&providerName=OneSignal\&profileGlobalName=GZSTZLH2MW)을 통해 액세스를 요청해야 합니다. 그러면 추가 정보를 얻기 위해 팀에 연락드리겠습니다.

### 2. 계정 정보 제공

팀과 연결되면 데이터를 공유할 수 있도록 일부 세부 정보를 제공해야 합니다. **Snowflake 계정 ID** 및 **Snowflake 조직 ID**가 필요합니다. 해당 정보를 얻는 가장 쉬운 방법은 "Copy account identifier" 버튼을 클릭하는 것입니다(아래 그림 참조).

<Info>
  [OneSignal Marketplace 리스팅](https://app.snowflake.com/marketplace/listing/GZ2FQZLH2NP/onesignal-message-events-data?search=onesignal\&originTab=provider\&providerName=OneSignal\&profileGlobalName=GZSTZLH2MW)을 통해 저희와 연락하셔야 합니다. 그러나 계정 정보 제공에 대한 추가 질문이 있으면 `snowflake-data-sharing@onesignal.com`으로 이메일을 보내주세요.
</Info>

<Frame caption="Snowflake 계정 식별자 복사">
  <img src="https://mintcdn.com/onesignal/4HyuQPBpu-4xjmQC/images/docs/cf472c3-Screen_Shot_2023-06-27_at_4.08.19_PM.png?fit=max&auto=format&n=4HyuQPBpu-4xjmQC&q=85&s=ad89f70c336cfa9fc66849021cdab551" width="1554" height="620" data-path="images/docs/cf472c3-Screen_Shot_2023-06-27_at_4.08.19_PM.png" />
</Frame>

프로그램에 참여하게 되면 다음 항목에 주의하세요:

* OneSignal에서 프로그램에 참여한 것을 환영하는 이메일
* 데이터 공유가 완료되었음을 알리는 Snowflake의 이메일

<Frame caption="Snowflake 데이터 공유 알림 이메일">
  <img src="https://mintcdn.com/onesignal/jBdBk5XvQR5eKOks/images/docs/7219faf-Untitled.png?fit=max&auto=format&n=jBdBk5XvQR5eKOks&q=85&s=3c4af6e7ba0f66836b5a2e91689f282e" width="1238" height="1078" data-path="images/docs/7219faf-Untitled.png" />
</Frame>

### 3. Snowflake 내에서 데이터 공유 승인

데이터 공유가 완료되었음을 알리는 Snowflake의 이메일을 받으면 Snowflake 앱에 로그인하여 데이터 공유를 승인할 수 있습니다.

**Data** → **Private Sharing**으로 이동하면 새로운 Privately Shared Listing을 확인할 수 있습니다. **Get**을 클릭하면 데이터가 해당 지역으로 복제되기 시작합니다.

<Frame caption="Snowflake 비공개 공유 인터페이스">
  <img src="https://mintcdn.com/onesignal/RWtLFPeffHrC81wI/images/docs/a8dfc31-Untitled_1.png?fit=max&auto=format&n=RWtLFPeffHrC81wI&q=85&s=cb692bad2c9be897bf1c40185911e594" width="1086" height="516" data-path="images/docs/a8dfc31-Untitled_1.png" />
</Frame>

**참고**: **Get** 버튼이 표시되지 않고 **Request** 버튼이 표시되는 경우, 공유를 시도하는 역할의 권한에 `CREATE DATABASE` 또는 `IMPORT SHARE`가 포함되어 있지 않은 것입니다. `ACCOUNTADMIN` 역할로 전환하는 것이 좋습니다.

데이터가 복제되는 데 시간이 걸립니다. 데이터를 사용할 수 있게 되면 Snowflake에서 추가 이메일을 보내드립니다. 다음과 같은 대화 상자가 표시됩니다.

<Frame caption="데이터 복제 상태 대화 상자">
  <img src="https://mintcdn.com/onesignal/YOTSrtBSoqdrJ37A/images/docs/4d78360-Untitled_2.png?fit=max&auto=format&n=YOTSrtBSoqdrJ37A&q=85&s=406c4f7f2884deea338e690e14d76e44" width="664" height="886" data-path="images/docs/4d78360-Untitled_2.png" />
</Frame>

데이터를 사용할 준비가 되면 목록에 새로운 **Get** 버튼이 표시됩니다. **Get** 버튼을 클릭하면 새 대화 상자가 표시됩니다.

<Frame caption="데이터베이스 구성 대화 상자">
  <img src="https://mintcdn.com/onesignal/3zq1PvSaqvUE2bIx/images/docs/28ba7ca-Untitled_3.png?fit=max&auto=format&n=3zq1PvSaqvUE2bIx&q=85&s=55e9e64a31cd20e552196d80b0fe7196" width="1320" height="1314" data-path="images/docs/28ba7ca-Untitled_3.png" />
</Frame>

원하는 데이터베이스 이름과 데이터베이스 역할을 설정하세요. 그런 다음 **Get**을 클릭합니다.

<Frame caption="데이터 공유 설정 완료">
  <img src="https://mintcdn.com/onesignal/tc0EvmtSSX56SX0c/images/docs/8dae239-Untitled_4.png?fit=max&auto=format&n=tc0EvmtSSX56SX0c&q=85&s=6ee68952c4a8e3c2cb430ba2e20ec136" width="694" height="698" data-path="images/docs/8dae239-Untitled_4.png" />
</Frame>

<Check>
  완료되었습니다! 이제 OneSignal에서 Snowflake로 데이터가 동기화됩니다. 동기화 주기는 24시간마다 한 번으로 설정되어 있으므로 초기 데이터는 다음 날까지 사용할 수 없을 수 있습니다.
</Check>

## 이벤트 및 속성

Snowflake의 Marketplace에서 사용 가능한 데이터 개요

### 메시지 이벤트 데이터

자세한 내용은 [Event Streams](./event-streams#event-data)를 참조하세요.

사용자가 생성한 각 메시지 이벤트에 대해 다음 메타데이터가 레코드에 첨부됩니다.

| Column Name                  | Type            | Description                                                                | Example                                               |
| ---------------------------- | --------------- | -------------------------------------------------------------------------- | ----------------------------------------------------- |
| event\_id                    | UUID            | 이벤트를 나타내는 고유 ID                                                            | `dc76df03-287c-403a-aabd-b2d4fe44e5c6`                |
| event\_kind                  | string          | 발생한 이벤트 유형. 이벤트 종류 목록은 [여기](./snowflake#message-event-kinds)에서 확인할 수 있습니다. | `message.email.opened`                                |
| event\_impression\_timestamp | unix\_timestamp | OneSignal이 이벤트를 처리하는 시간                                                    | `1684951205`                                          |
| subscription\_id             | UUID            | 디바이스/구독을 나타내는 고유 ID                                                        | `6e8b6978-75a4-4882-878c-2d15a78c2409`                |
| subscription\_language       | string          | 이 구독의 언어                                                                   | `en`                                                  |
| subscription\_timezone       | integer         | 이 구독의 지정된 시간대                                                              | `-25200`                                              |
| subscription\_device\_type   | string          | 이 구독이 사용하는 디바이스 유형                                                         | `SMS`                                                 |
| onesignal\_id                | UUID            | 노출을 생성한 사용자의 onesignal\_id                                                 | `dc76df03-287c-403a-aabd-b2d4fe44e5c6`                |
| external\_id                 | string          | 노출을 생성한 사용자의 external\_id                                                  | `MyExternalId`                                        |
| message\_id                  | UUID            | 메시지를 나타내는 고유 ID                                                            | `dc76df03-287c-403a-aabd-b2d4fe44e5c6`                |
| message\_name                | string          | 알림/메시지의 사람이 읽을 수 있는 ID                                                     | `Campaign 1`                                          |
| message\_title               | string          | 알림/메시지의 제목.*현재는 영어만 지원*                                                    | `Bonus 50 coins when you play!`                       |
| message\_body                | string          | 메시지의 본문. (잘림) *현재는 영어만 지원*                                                 | `Play against your friends and earn an additional...` |

### 메시지 이벤트 종류

자세한 내용은 [Event Streams](./event-streams#event-data)를 참조하세요.

메시지 이벤트는 Snowflake의 Marketplace에서 제공하는 첫 번째 데이터 카테고리입니다. 추가 데이터 카테고리 요청은 `snowflake-data-sharing@onesignal.com`으로 문의하세요!

### 데이터 보존

Snowflake를 통해 OneSignal에서 공유되는 데이터는 30일 동안 보존됩니다. 이 기간을 넘어 데이터를 보존하려면 관련 데이터를 자체 테이블에 복사하는 것이 좋습니다.

***

## Snowflake에서 이벤트 가져오기

Snowflake에서 OneSignal로 행동 이벤트 데이터를 전송하여:

* 사용자 활동을 기반으로 Journey를 트리거합니다
* 행동 데이터를 기반으로 메시징을 개인화합니다

**요구사항**

* Access to [Event Streams](/docs/en/event-streams) for outbound message events (Plan limitations and overages apply)
* Access to [Custom Events](/docs/en/custom-events) for inbound event syncing (Plan limitations and overages apply)
* [Updated Account Plan](https://onesignal.com/pricing) (not available on free apps)

- 웨어하우스 액세스 권한이 있는 **Snowflake 계정**
- Snowflake 테이블 또는 뷰에 저장된 **이벤트 데이터**
- OneSignal에서 Snowflake 인스턴스로의 **네트워크 연결**
- 적절한 권한이 있는 **사용자 자격 증명**

**설정 단계**

<Steps>
  <Step title="OneSignal 전용 역할 생성">
    Snowflake 모범 사례에 따라 역할 계층을 생성합니다:

    ```sql theme={null}
    -- Create a role for the census user
    CREATE ROLE CENSUS_ROLE;

    -- Ensure the sysadmin role inherits any privileges the census role is granted
    GRANT ROLE CENSUS_ROLE TO ROLE SYSADMIN;
    ```
  </Step>

  <Step title="전용 웨어하우스 생성">
    OneSignal 작업을 위한 비용 최적화 웨어하우스를 생성합니다:

    ```sql theme={null}
    -- Create a warehouse for the census role, optimizing for cost over performance
    CREATE WAREHOUSE CENSUS_WAREHOUSE WITH
        WAREHOUSE_SIZE = XSMALL
        AUTO_SUSPEND = 60
        AUTO_RESUME = TRUE
        INITIALLY_SUSPENDED = FALSE;

    GRANT USAGE ON WAREHOUSE CENSUS_WAREHOUSE TO ROLE CENSUS_ROLE;
    GRANT OPERATE ON WAREHOUSE CENSUS_WAREHOUSE TO ROLE CENSUS_ROLE;
    GRANT MONITOR ON WAREHOUSE CENSUS_WAREHOUSE TO ROLE CENSUS_ROLE;
    ```
  </Step>

  <Step title="사용자 생성 및 권한 부여">
    OneSignal 사용자를 생성하고 이벤트 데이터에 대한 액세스 권한을 부여합니다:

    ```sql theme={null}
    -- Create the census user
    CREATE USER CENSUS WITH
        DEFAULT_ROLE = CENSUS_ROLE
        DEFAULT_WAREHOUSE = CENSUS_WAREHOUSE
        PASSWORD = '<strong-unique-password>';

    GRANT ROLE CENSUS_ROLE TO USER CENSUS;

    -- Grant access to your event data (replace with your actual database/schema)
    GRANT USAGE ON DATABASE "<your-database>" TO ROLE CENSUS_ROLE;
    GRANT USAGE ON SCHEMA "<your-database>"."<your-schema>" TO ROLE CENSUS_ROLE;
    GRANT SELECT ON ALL TABLES IN SCHEMA "<your-database>"."<your-schema>" TO ROLE CENSUS_ROLE;
    GRANT SELECT ON FUTURE TABLES IN SCHEMA "<your-database>"."<your-schema>" TO ROLE CENSUS_ROLE;
    GRANT SELECT ON ALL VIEWS IN SCHEMA "<your-database>"."<your-schema>" TO ROLE CENSUS_ROLE;
    GRANT SELECT ON FUTURE VIEWS IN SCHEMA "<your-database>"."<your-schema>" TO ROLE CENSUS_ROLE;
    ```
  </Step>

  <Step title="부기 데이터베이스 생성 (Advanced Sync Engine)">
    OneSignal의 동기화 상태 관리를 위한 비공개 데이터베이스를 생성합니다:

    ```sql theme={null}
    -- Create a private bookkeeping database
    CREATE DATABASE "CENSUS";
    GRANT ALL PRIVILEGES ON DATABASE "CENSUS" TO ROLE CENSUS_ROLE;

    CREATE SCHEMA "CENSUS"."CENSUS";
    GRANT ALL PRIVILEGES ON SCHEMA "CENSUS"."CENSUS" TO ROLE CENSUS_ROLE;
    GRANT CREATE STAGE ON SCHEMA "CENSUS"."CENSUS" TO ROLE CENSUS_ROLE;
    ```

    <Warning>
      Basic Sync Engine 또는 읽기 전용 모드를 사용하는 경우 이 단계를 건너뛰세요.
    </Warning>
  </Step>

  <Step title="인증 구성">
    보안 강화를 위해 키 쌍 인증(권장)을 설정합니다:

    1. [Snowflake 문서](https://docs.snowflake.com/en/user-guide/key-pair-auth)에 따라 공개/개인 키 쌍을 생성합니다
    2. Snowflake 사용자에 공개 키를 구성합니다
    3. OneSignal의 연결 설정에서 개인 키를 사용합니다

    또는 비밀번호 인증을 사용할 수 있습니다(더 이상 사용되지 않음 - 2025년 11월에 차단 예정).
  </Step>

  <Step title="OneSignal에 연결">
    OneSignal에서 **Data > Integrations**으로 이동하여 **Add Integration**을 클릭합니다.

    **Snowflake**를 선택하고 다음 연결 세부 정보를 제공합니다:

    * **Account Name:** Snowflake 계정 식별자 (예: `abc123.us-east-1`)
    * **Warehouse:** `CENSUS_WAREHOUSE`
    * **User:** `CENSUS`
    * **Database:** 이벤트 데이터 데이터베이스 이름
    * **Schema:** 이벤트 데이터 스키마 이름
    * **Authentication:** Key-pair (개인 키 및 선택적 암호문 제공)
  </Step>
</Steps>

***

### 이벤트 데이터 매핑

{PLATFORM_0} {DATA_TYPE_0}를 OneSignal의 사용자 지정 이벤트 형식에 매핑합니다:

| OneSignal 필드  | {COLUMN_HEADER_0} | 설명                         | 필수  |
| ------------- | ----------------- | -------------------------- | --- |
| `name`        | `event_name`      | 이벤트 식별자                    | Yes |
| `external_id` | `user_id`         | 사용자 식별자                    | Yes |
| `timestamp`   | `event_timestamp` | 이벤트가 발생한 시간                | No  |
| `properties`  | `event_data`      | {PROPERTIES_DESCRIPTION_0} | No  |

#### 이벤트 테이블 스키마 예제

```sql theme={null}
-- Example Snowflake event table
CREATE TABLE analytics.user_events (
    event_id STRING,
    event_name STRING NOT NULL,
    user_id STRING NOT NULL,
    event_timestamp TIMESTAMP_TZ DEFAULT CURRENT_TIMESTAMP(),
    event_properties VARIANT,
    session_id STRING,
    device_type STRING
);
```

#### SQL 쿼리 모드

커스텀 SQL 쿼리를 작성하여 이벤트 데이터를 변환합니다:

```sql theme={null}
-- Example: Recent high-value events
SELECT
    event_name,
    user_id,
    event_timestamp,
    event_properties
FROM analytics.user_events
WHERE event_timestamp >= DATEADD(day, -7, CURRENT_TIMESTAMP())
    AND event_properties:value::NUMBER > 100
ORDER BY event_timestamp DESC;
```

### 고급 구성

#### 웨어하우스 비용 관리

* 비용 최적화를 위해 X-Small 웨어하우스 크기를 사용합니다
* 자동 일시 중지(60초) 및 자동 재개를 구성합니다
* 사용량이 적은 시간대에 동기화를 예약합니다
* 다른 배치 처리 시스템과 웨어하우스를 공유하는 것을 고려합니다

#### 라이브 동기화 지원

실시간 이벤트 처리를 위해 이벤트 테이블에서 변경 추적을 활성화합니다:

```sql theme={null}
ALTER TABLE "analytics"."user_events" SET CHANGE_TRACKING = TRUE;
```

#### 네트워크 보안

Snowflake의 허용된 IP 네트워크 정책을 사용하는 경우 OneSignal의 IP 주소를 허용 목록에 추가하세요. 현재 IP 범위는 OneSignal 지원팀에 문의하세요.

***

## 제한사항

* 복잡한 분석 쿼리는 웨어하우스 성능 및 비용에 영향을 줄 수 있습니다
* 사용자/비밀번호 인증은 2025년 11월에 더 이상 사용되지 않을 예정입니다
* CENSUS 데이터베이스는 OneSignal 작업 전용으로 예약되어 있습니다

***

## OneSignal과 데이터 공유 연결 해제

OneSignal과의 데이터 공유를 비활성화하려면 `snowflake-data-sharing@onesignal.com`으로 이메일을 보내주세요.

***

## FAQ

### 어떤 인증 방법을 사용해야 하나요?

**키 쌍 인증**(권장)을 사용하세요. 사용자/비밀번호 인증은 2025년 11월부터 Snowflake에서 차단됩니다.

### 기존 웨어하우스를 사용할 수 있나요?

예, 비용을 최적화하기 위해 dbt 또는 Fivetran과 같은 다른 배치 처리 시스템과 웨어하우스를 공유할 수 있습니다. 웨어하우스에 이벤트 처리 요구 사항을 충족할 수 있는 충분한 용량이 있는지 확인하세요.

### 비용을 최적화하려면 어떻게 해야 하나요?

* X-Small 웨어하우스 크기를 사용합니다
* 적극적인 자동 일시 중지(60초)를 구성합니다
* 사용량이 적은 시간대에 동기화를 예약합니다
* 지속적인 동기화 대신 시간별/일일 동기화를 사용합니다

***
