메인 콘텐츠로 건너뛰기
OneSignal의 레거시 통합으로 Snowflake를 사용하는 경우 Snowflake 레거시 통합 가이드를 참조하세요.

OneSignal Snowflake 통합 개요


개요

OneSignal + Snowflake 통합은 두 가지 강력한 데이터 파이프라인을 지원합니다:
  • 내보내기: OneSignal에서 Snowflake로 메시징 이벤트 데이터(푸시, 이메일, SMS, 인앱)를 자동으로 전송하여 분석 및 보고합니다.
  • 가져오기: Snowflake 데이터셋에서 커스텀 사용자 이벤트를 OneSignal로 동기화하여 자동화된 Journey와 개인화된 메시징을 트리거합니다.
이러한 통합을 통해 사용자 참여 데이터를 완벽하게 제어할 수 있으며, 고급 분석 및 실시간 행동 기반 메시징을 지원합니다.

OneSignal 이벤트를 Snowflake로 내보내기

메시징 성능 및 참여 이벤트(예: 전송, 열람, 클릭)를 Snowflake로 전송하여:
  • 커스텀 대시보드 및 보고서 구축
  • 채널 전반의 전달 및 참여 추세 추적
  • OneSignal 데이터를 다른 비즈니스 데이터와 결합하여 분석
요구사항
  • OneSignal Professional 플랜 (무료 앱에서는 사용 불가)
  • Snowflake 계정
  • Snowflake의 SECURITYADMIN 또는 ACCOUNTADMIN 역할 (설정용)
설정 단계

1. Snowflake 계정 세부 정보 수집

통합을 구성하기 전에 Snowflake 계정에서 다음 정보를 수집합니다:
  • Snowflake 호스트: <account_identifier>.snowflakecomputing.com 형식의 계정 URL
  • 데이터베이스 이름: OneSignal이 이벤트 데이터를 작성할 데이터베이스
  • 스키마 이름: OneSignal 테이블용 데이터베이스 내 스키마 (OneSignal에 의해 자동 생성됨)
  • 웨어하우스 이름: 데이터 로딩 작업에 사용할 웨어하우스

Snowflake 계정 식별자 위치

2. Snowflake에서 설정 스크립트 실행

Snowflake 웨어하우스에서 다음 SQL 스크립트를 실행하여 OneSignal에 필요한 역할, 사용자, 웨어하우스 및 데이터베이스를 생성합니다:
begin;

   -- create variables for user / role / warehouse / database (needs to be uppercase for objects)
   set role_name = 'ONESIGNAL_ROLE';
   set user_name = 'ONESIGNAL_USER';
   set warehouse_name = 'ONESIGNAL_WAREHOUSE';
   set database_name = 'ONESIGNAL';

   -- change role to securityadmin for user / role steps
   use role securityadmin;

   -- create role for onesignal
   create role if not exists identifier($role_name);
   grant role identifier($role_name) to role SYSADMIN;

   -- create a user for onesignal
   create user if not exists identifier($user_name)
   default_role = $role_name
   default_warehouse = $warehouse_name;

   grant role identifier($role_name) to user identifier($user_name);

   -- set binary_input_format to BASE64
   ALTER USER identifier($user_name) SET BINARY_INPUT_FORMAT = 'BASE64';

   -- set timestamp_input_format to AUTO for the user
   ALTER USER identifier($user_name) SET TIMESTAMP_INPUT_FORMAT = 'AUTO';

   -- change role to sysadmin for warehouse / database steps
   use role sysadmin;

   -- create a warehouse for onesignal
   create warehouse if not exists identifier($warehouse_name)
   warehouse_size = xsmall
   warehouse_type = standard
   auto_suspend = 60
   auto_resume = true
   initially_suspended = true;

   -- create database for onesignal
   create database if not exists identifier($database_name);

   -- grant onesignal role access to warehouse
   grant USAGE
   on warehouse identifier($warehouse_name)
   to role identifier($role_name);

   -- grant onesignal access to database
   grant CREATE SCHEMA, MONITOR, USAGE
   on database identifier($database_name)
   to role identifier($role_name);

 commit;
스크립트 상단의 변수 값을 사용자의 명명 규칙에 맞게 사용자 정의할 수 있습니다. 기존 웨어하우스 또는 데이터베이스를 사용하는 경우 그에 따라 스크립트를 수정하세요.

3. 인증용 키 페어 생성

OneSignal은 Snowflake 계정에 안전하게 액세스하기 위해 키 페어 인증이 필요합니다. 다음 단계에 따라 키를 생성하고 구성합니다:
1

개인 키 생성

다음 명령 중 하나를 실행하여 개인 키를 생성합니다:암호화되지 않은 개인 키 (더 간단하지만 보안성이 낮음):
openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocrypt
암호화된 개인 키 (프로덕션 권장):
openssl genrsa 2048 | openssl pkcs8 -topk8 -v2 aes256 -inform PEM -out rsa_key.p8
암호화된 키를 사용하는 경우 암호 구문을 생성하라는 메시지가 표시됩니다. 이 암호 구문을 안전하게 저장하세요. OneSignal을 구성할 때 필요합니다.
2

공개 키 생성

개인 키에서 공개 키를 생성합니다:
openssl rsa -in rsa_key.p8 -pubout -out rsa_key.pub
3

Snowflake 사용자에게 공개 키 할당

공개 키 파일의 내용을 복사한 다음(헤더 및 바닥글 줄 제외) Snowflake에서 이 SQL 명령을 실행합니다:
ALTER USER ONESIGNAL_USER SET RSA_PUBLIC_KEY='<YOUR_PUBLIC_KEY_CONTENT>';
<YOUR_PUBLIC_KEY_CONTENT>를 키 내용으로 바꿉니다(-----BEGIN PUBLIC KEY----------END PUBLIC KEY----- 줄 제외).
개인 키 파일을 안전하게 저장하세요. 다음 단계에서 OneSignal에 제공해야 합니다. 개인 키를 공개적으로 공유하거나 버전 제어에 커밋하지 마세요.

4. OneSignal 연결

1

통합 활성화

OneSignal에서 Data > Integrations > Snowflake로 이동합니다.
2

세부 정보 입력

  • 호스트: <your_account>.snowflakecomputing.com
  • 데이터베이스: 예: ONESIGNAL
  • 스키마
  • 테이블: 예: message_events
  • 사용자: ONESIGNAL_USER (또는 생성한 사용자 이름)
  • 개인 키: 개인 키 파일(rsa_key.p8)의 내용을 붙여넣습니다
  • 개인 키 암호 구문 (선택사항, 개인 키가 암호화된 경우에만)
3

통합 구성

  • 동기화 빈도: 15분마다
  • 스키마/테이블 이름: onesignal_events_<app-id>message_events로 사전 설정됨 (편집 가능)
  • 이벤트 유형: 동기화할 이벤트 선택—전체 또는 필요한 것만 선택
4

이벤트 선택

Snowflake 웨어하우스에서 받을 이벤트를 선택합니다.
5

설정 완료

Save를 클릭하고 성공 확인을 기다립니다
초기 데이터 동기화가 Snowflake에 나타나는 데 15~30분이 걸릴 수 있습니다.기다리는 동안 푸시, 이메일, 인앱 또는 SMS를 통해 메시지를 전송하여 선택한 이벤트를 트리거합니다.

5. Snowflake에서 데이터 보기

초기 동기화가 완료되면 OneSignal 이벤트 데이터를 쿼리합니다:
-- View recent message events
SELECT *
FROM <your-database>.<your-schema>.message_events
ORDER BY _CREATED DESC
LIMIT 100;
스키마 누락, 권한 오류 또는 잘못된 형식의 이벤트와 같은 문제가 발생하면 [email protected]으로 문의하세요.

메시지 이벤트 및 속성

메시지 이벤트 종류

속성: event_kind 유형: String 메시지 및 이벤트의 종류(예: message.push.received, message.push.sent).
메시지 이벤트 (OneSignal)event_kind설명
Push Sentmessage.push.sent푸시 알림이 성공적으로 전송되었습니다.
Push Receivedmessage.push.received전달된 푸시(전달 확인 참조).
Push Clickedmessage.push.clicked사용자가 푸시를 클릭했습니다.
Push Failedmessage.push.failed전달 실패. 메시지 보고서를 참조하세요.
Push Unsubscribedmessage.push.unsubscribed사용자가 푸시 구독을 취소했습니다.
In-App Impressionmessage.iam.displayed인앱 메시지가 표시되었습니다.
In-App Clickedmessage.iam.clicked인앱 메시지를 클릭했습니다.
In-App Page Viewedmessage.iam.pagedisplayed인앱 페이지가 표시되었습니다.
Email Sentmessage.email.sent이메일이 전달되었습니다.
Email Receivedmessage.email.received수신자의 메일 서버가 이메일을 수락했습니다.
Email Openedmessage.email.opened이메일이 열렸습니다. 이메일 보고서를 참조하세요.
Email Link Clickedmessage.email.clicked이메일의 링크를 클릭했습니다.
Email Unsubscribedmessage.email.unsubscribed수신자가 구독을 취소했습니다.
Email Marked Spammessage.email.resporedasspam스팸으로 표시되었습니다. 이메일 전달 가능성을 참조하세요.
Email Bouncedmessage.email.hardbounced영구적인 전달 실패로 인한 반송.
Email Failedmessage.email.failed전달이 실패했습니다.
Email Suppressedmessage.email.supressed억제 목록으로 인해 억제되었습니다.
SMS Sentmessage.sms.sentSMS가 전송되었습니다.
SMS Deliveredmessage.sms.deliveredSMS가 성공적으로 전달되었습니다.
SMS Failedmessage.sms.failedSMS 전달이 실패했습니다.
SMS Undeliveredmessage.sms.undeliveredSMS가 거부되었거나 도달할 수 없습니다.

이벤트 데이터 스키마

사용자가 생성한 각 메시지 이벤트에 대해 다음 메타데이터가 레코드에 첨부됩니다.
열 이름유형설명
event_idUUID이벤트의 고유 식별자
event_timestampTimestamp이벤트 발생 시간
event_kindString이벤트 종류
subscription_device_typeString장치 유형(예: iOS, Android, Web, Email, SMS)
languageString구독 언어 코드
versionString통합 버전
device_osString장치 운영 체제 버전
device_typeNumber숫자 장치 유형
tokenString푸시 토큰, 전화번호 또는 이메일
subscription_idUUID구독 ID
subscribedBoolean구독 상태
onesignal_idUUIDOneSignal 사용자 ID
last_activeString마지막 활성 타임스탬프
sdkStringOneSignal SDK 버전
external_idString통합 사용자 ID와 일치해야 하는 외부 사용자 ID
app_idUUIDOneSignal의 앱 ID
template_idUUID템플릿 ID(해당하는 경우)
message_idUUID메시지 배치/요청 ID
message_nameString메시지 이름
message_titleString메시지 제목(영어만)
message_contentsString잘린 메시지 본문(영어만)
_created, _id, _index, _fivetran_synced내부 사용Fivetran 동기화 메타데이터

참고 사항

  • 저장/활성화 후 동기화는 완료하는 데 추가로 15-30분이 소요될 수 있습니다.
  • 비활성화하면 비활성화 후 최종 동기화가 한 번 더 발생할 수 있습니다.
  • 효율적인 데이터 동기화를 보장하기 위해 시스템은 스테이징 데이터 세트를 자동으로 생성하고 관리합니다. 이러한 데이터 세트는 fivetran_{두 개의 무작위 단어}_staging과 같은 패턴으로 이름이 지정되며, 기본 스키마에 통합되기 전에 처리 중에 데이터를 임시로 저장합니다. 이러한 스테이징 데이터 세트는 간소화된 워크플로를 유지하는 데 필수적이며 자동으로 다시 생성되므로 삭제하면 안 됩니다.

Snowflake에서 이벤트 가져오기

Snowflake에서 OneSignal로 행동 이벤트 데이터를 전송하여:
  • 사용자 활동을 기반으로 Journey 트리거
  • 행동 데이터를 기반으로 메시징 개인화
요구사항
  • 웨어하우스 액세스 권한이 있는 Snowflake 계정
  • Snowflake 테이블 또는 뷰에 저장된 이벤트 데이터
  • OneSignal에서 Snowflake 인스턴스로의 네트워크 연결
  • 적절한 권한이 있는 사용자 자격 증명
설정 단계
1

OneSignal 전용 역할 생성

Snowflake 모범 사례에 따라 역할 계층 구조를 생성합니다:
-- 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;
2

전용 웨어하우스 생성

OneSignal 작업을 위한 비용 최적화 웨어하우스를 생성합니다:
-- 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;
3

사용자 생성 및 권한 부여

OneSignal 사용자를 생성하고 이벤트 데이터에 대한 액세스 권한을 부여합니다:
-- 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;
4

부기 데이터베이스 생성 (고급 동기화 엔진)

OneSignal의 동기화 상태 관리를 위한 전용 데이터베이스를 생성합니다:
-- 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;
기본 동기화 엔진 또는 읽기 전용 모드를 사용하는 경우 이 단계를 건너뜁니다.
5

인증 구성

보안 강화를 위해 키 페어 인증(권장)을 설정합니다:
  1. Snowflake 문서에 따라 공개/개인 키 페어를 생성합니다
  2. Snowflake 사용자에 공개 키를 구성합니다
  3. OneSignal의 연결 설정에서 개인 키를 사용합니다
또는 암호 인증을 사용할 수 있습니다(더 이상 사용되지 않음 - 2025년 11월에 차단됨).
6

OneSignal에 연결

OneSignal에서 Data > Integrations으로 이동하여 Add Integration을 클릭합니다.Snowflake를 선택하고 다음 연결 세부 정보를 제공합니다:
  • 계정 이름: Snowflake 계정 식별자 (예: abc123.us-east-1)
  • 웨어하우스: CENSUS_WAREHOUSE
  • 사용자: CENSUS
  • 데이터베이스: 이벤트 데이터 데이터베이스 이름
  • 스키마: 이벤트 데이터 스키마 이름
  • 인증: 키 페어 (개인 키 및 선택적 암호 구문 제공)

이벤트 데이터 매핑

를 OneSignal의 사용자 지정 이벤트 형식에 매핑합니다:
OneSignal 필드설명필수
nameevent_name이벤트 식별자Yes
external_iduser_id사용자 식별자Yes
timestampevent_timestamp이벤트가 발생한 시간No
propertiesevent_dataNo

이벤트 테이블 스키마 예시

-- 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 쿼리를 작성합니다:
-- 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초) 및 자동 재개 구성
  • 사용량이 적은 시간대에 동기화 예약
  • 다른 배치 처리 시스템과 웨어하우스 공유 고려

실시간 동기화 지원

실시간 이벤트 처리를 위해 이벤트 테이블에서 변경 추적을 활성화합니다:
ALTER TABLE "analytics"."user_events" SET CHANGE_TRACKING = TRUE;

네트워크 보안

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

제한사항

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

FAQ

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

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

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

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

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

  • X-Small 웨어하우스 크기 사용
  • 공격적인 자동 일시 중지(60초) 구성
  • 사용량이 적은 시간대에 동기화 예약
  • 연속 동기화 대신 시간별/일별 동기화 사용