OneSignal의 레거시 통합으로 Snowflake를 사용하는 경우 Snowflake 레거시 통합 가이드를 참조하세요. 마이그레이션 단계는 레거시에서 마이그레이션을 참조하세요.
개요
OneSignal + Snowflake 통합은 두 가지 강력한 데이터 파이프라인을 지원합니다:- 아웃바운드: OneSignal에서 Snowflake로 메시징 이벤트 데이터(푸시, 이메일, SMS, 인앱)를 자동으로 전송하여 분석 및 보고합니다.
- 인바운드: Snowflake 데이터셋에서 커스텀 사용자 이벤트를 OneSignal로 동기화하여 자동화된 Journey와 개인화된 메시징을 트리거합니다.
아웃바운드 설정
현재 조기 액세스 단계입니다.
액세스를 요청하려면 다음 정보와 함께
support@onesignal.com으로 연락하세요:- 회사 이름
- OneSignal 조직 ID
- 활성화하려는 앱 ID
- 커스텀 대시보드 및 보고서 구축
- 채널 전반의 전달 및 참여 추세 추적
- OneSignal 데이터를 다른 비즈니스 데이터와 결합하여 분석
- OneSignal Professional 플랜 (무료 앱에서는 사용 불가)
- Snowflake 계정
- Snowflake의 SECURITYADMIN 또는 ACCOUNTADMIN 역할 (설정용)
1. Snowflake 계정 세부 정보 수집
통합을 구성하기 전에 Snowflake 계정에서 다음 정보를 수집합니다:- Snowflake 호스트:
<account_identifier>.snowflakecomputing.com형식의 계정 URL - 데이터베이스 이름: OneSignal이 이벤트 데이터를 작성할 데이터베이스
- 스키마 이름: OneSignal 테이블용 데이터베이스 내 스키마 (OneSignal에 의해 자동 생성됨)
- 웨어하우스 이름: 데이터 로딩 작업에 사용할 웨어하우스

2. Snowflake에서 설정 스크립트 실행
Snowflake 웨어하우스에서 다음 SQL 스크립트를 실행하여 OneSignal에 필요한 역할, 사용자, 웨어하우스 및 데이터베이스를 생성합니다:스크립트 상단의 변수 값을 사용자의 명명 규칙에 맞게 사용자 정의할 수 있습니다. 기존 웨어하우스 또는 데이터베이스를 사용하는 경우 그에 따라 스크립트를 수정하세요.
3. 인증용 키 페어 생성
OneSignal은 Snowflake 계정에 안전하게 액세스하기 위해 키 페어 인증이 필요합니다. 다음 단계에 따라 키를 생성하고 구성합니다:개인 키 생성
다음 명령 중 하나를 실행하여 개인 키를 생성합니다:암호화되지 않은 개인 키 (더 간단하지만 보안성이 낮음):암호화된 개인 키 (프로덕션 권장):암호화된 키를 사용하는 경우 암호 구문을 생성하라는 메시지가 표시됩니다. 이 암호 구문을 안전하게 저장하세요. OneSignal을 구성할 때 필요합니다.
4. OneSignal 연결
세부 정보 입력
- 호스트:
<your_account>.snowflakecomputing.com - 포트: 선택사항, 기본값은
443 - 데이터베이스: 예:
ONESIGNAL - 역할: 선택사항, 생략하면 사용자의 기본 역할 사용
- 사용자: 예:
ONESIGNAL_USER - 개인 키: 개인 키 파일(
rsa_key.p8)의 내용을 붙여넣습니다 - 개인 키 암호 구문: 선택사항, 개인 키가 암호화된 경우에만
- 데이터 처리 위치: 데이터를 Snowflake로 보내기 전에 처리되는 위치
통합 구성
- 동기화 빈도: 15분마다
- 스키마/테이블 이름:
onesignal_events_<app-id>및message_events로 사전 설정됨 (편집 가능) - 이벤트 유형: 동기화할 이벤트 선택—전체 또는 필요한 것만 선택
초기 데이터 동기화가 Snowflake에 나타나는 데 15~30분이 걸릴 수 있습니다.기다리는 동안 푸시, 이메일, 인앱 또는 SMS를 통해 메시지를 전송하여 선택한 이벤트를 트리거합니다.
5. Snowflake에서 데이터 보기
초기 동기화가 완료되면 OneSignal 이벤트 데이터를 쿼리합니다:스키마 누락, 권한 오류 또는 잘못된 형식의 이벤트와 같은 문제가 발생하면
support@onesignal.com으로 문의하세요.메시지 이벤트 및 속성
메시지 이벤트 종류
속성:event_kind
유형: String
메시지 및 이벤트의 종류(예: message.push.received, message.push.sent).
| 메시지 이벤트 (OneSignal) | event_kind | 설명 |
|---|---|---|
| Push Sent | message.push.sent | 푸시 알림이 성공적으로 전송되었습니다. |
| Push Received | message.push.received | 전달된 푸시(전달 확인 참조). |
| Push Clicked | message.push.clicked | 사용자가 푸시를 클릭했습니다. |
| Push Failed | message.push.failed | 전달 실패. 메시지 보고서를 참조하세요. |
| Push Unsubscribed | message.push.unsubscribed | 사용자가 푸시 구독을 취소했습니다. |
| In-App Impression | message.iam.impression | 인앱 메시지가 표시되었습니다. |
| In-App Clicked | message.iam.clicked | 인앱 메시지를 클릭했습니다. |
| In-App Page Viewed | message.iam.page_displayed | 인앱 페이지가 표시되었습니다. |
| Email Sent | message.email.sent | 이메일이 전달되었습니다. |
| Email Received | message.email.received | 수신자의 메일 서버가 이메일을 수락했습니다. |
| Email Opened | message.email.opened | 이메일이 열렸습니다. 이메일 보고서를 참조하세요. |
| Email Link Clicked | message.email.clicked | 이메일의 링크를 클릭했습니다. |
| Email Unsubscribed | message.email.unsubscribed | 수신자가 구독을 취소했습니다. |
| Email Reported As Spam | message.email.reported_as_spam | 스팸으로 표시되었습니다. 이메일 전달 가능성을 참조하세요. |
| Email Bounced | message.email.bounced | 영구적인 전달 실패로 인한 반송. |
| Email Failed | message.email.failed | 전달이 실패했습니다. |
| Email Suppressed | message.email.suppressed | 억제 목록으로 인해 억제되었습니다. |
| SMS Sent | message.sms.sent | SMS가 전송되었습니다. |
| SMS Delivered | message.sms.delivered | SMS가 성공적으로 전달되었습니다. |
| SMS Failed | message.sms.failed | SMS 전달이 실패했습니다. |
| SMS Undelivered | message.sms.undelivered | SMS가 거부되었거나 도달할 수 없습니다. |
이벤트 데이터 스키마
사용자가 생성한 각 메시지 이벤트에 대해 다음 메타데이터가 레코드에 첨부됩니다.| 열 이름 | 유형 | 설명 |
|---|---|---|
event_id | UUID | 이벤트의 고유 식별자 |
event_timestamp | Timestamp | 이벤트 발생 시간 |
event_kind | String | 이벤트 종류 |
subscription_device_type | String | 장치 유형(예: iOS, Android, Web, Email, SMS) |
language | String | 구독 언어 코드 |
version | String | 통합 버전 |
device_os | String | 장치 운영 체제 버전 |
device_type | Number | 숫자 장치 유형 |
token | String | 푸시 토큰, 전화번호 또는 이메일 |
subscription_id | UUID | 구독 ID |
subscribed | Boolean | 구독 상태 |
onesignal_id | UUID | OneSignal 사용자 ID |
last_active | String | 마지막 활성 타임스탬프 |
sdk | String | OneSignal SDK 버전 |
external_id | String | 통합 사용자 ID와 일치해야 하는 외부 사용자 ID |
app_id | UUID | OneSignal의 앱 ID |
template_id | UUID | 템플릿 ID(해당하는 경우) |
message_id | UUID | 메시지 배치/요청 ID |
message_name | String | 메시지 이름 |
message_title | String | 메시지 제목(영어만) |
message_contents | String | 잘린 메시지 본문(영어만) |
failure_reason | String | 실패 이유(푸시 실패 및 이메일 실패 이벤트용) |
_created, _id, _index, _fivetran_synced | 내부 사용 | Fivetran 동기화 메타데이터 |
참고 사항
- 저장/활성화 후 동기화는 완료하는 데 추가로 15-30분이 소요될 수 있습니다.
- 비활성화하면 비활성화 후 최종 동기화가 한 번 더 발생할 수 있습니다.
- 효율적인 데이터 동기화를 보장하기 위해 시스템은 스테이징 데이터 세트를 자동으로 생성하고 관리합니다. 이러한 데이터 세트는
fivetran_{두 개의 무작위 단어}_staging과 같은 패턴으로 이름이 지정되며, 기본 스키마에 통합되기 전에 처리 중에 데이터를 임시로 저장합니다. 이러한 스테이징 데이터 세트는 간소화된 워크플로를 유지하는 데 필수적이며 자동으로 다시 생성되므로 삭제하면 안 됩니다.
레거시에서 마이그레이션
현재 레거시 Snowflake 통합을 사용하고 있다면, 이 섹션에서 주요 차이점과 쿼리를 마이그레이션하는 방법을 다룹니다.주요 차이점
| 기능 | 레거시 | 신규 |
|---|---|---|
| 동기화 빈도 | 24시간 | 15분마다 |
| 데이터 소유권 | 공유 데이터에 대한 읽기 전용 액세스 | 사용자의 Snowflake 계정에 직접 기록 |
| 데이터 보존 | 30일 | 사용자가 보존 기간 제어 |
| 이벤트 선택 | 모든 이벤트 | 특정 이벤트 유형 선택 가능 |
스키마 변경사항
새 통합에서는 필요에 따라 컬럼을 생성합니다. 특정 필드에 대한 데이터를 포함하는 이벤트가 없으면 해당 컬럼은 테이블에 존재하지 않습니다. 해당 필드에 대한 데이터가 나타나면 컬럼이 자동으로 생성됩니다.컬럼 이름 변경
| 레거시 컬럼 | 신규 컬럼 |
|---|---|
EVENT_IMPRESSION_TIMESTAMP | EVENT_TIMESTAMP |
SUBSCRIPTION_LANGUAGE | LANGUAGE |
MESSAGE_BODY | MESSAGE_CONTENTS |
타입 추론
새 통합에서는 자동 타입 추론을 사용합니다. 컬럼의 모든 값이 숫자인 경우(예: 모든EXTERNAL_ID 값이 숫자) 컬럼이 NUMBER로 타입이 지정될 수 있습니다. 나중에 숫자가 아닌 값이 나타나면 컬럼 타입이 VARCHAR로 승격됩니다.
필요한 경우 명시적 캐스팅을 사용하세요:
쿼리 마이그레이션
기존 쿼리를 마이그레이션하려면:- 레거시 데이터베이스에 대한 참조를 새 Snowflake 데이터베이스를 가리키도록 업데이트
- 위에 나열된 컬럼 이름 변경 사항 반영
- 필요한 경우 명시적 타입 캐스팅 추가
ONESIGNAL_DB.ONESIGNAL_EVENTS_XXXXX.MESSAGE_EVENTS를 실제 데이터베이스, 스키마 및 테이블 이름으로 바꿔주세요.인바운드 설정
Snowflake에서 OneSignal로 행동 이벤트 데이터를 전송하여:- 사용자 활동을 기반으로 Journey 트리거
- 행동 데이터를 기반으로 메시징 개인화
- Access to Event Streams for outbound message events (Plan limitations and overages apply)
- Access to Custom Events for inbound event syncing (Plan limitations and overages apply)
- Updated Account Plan (not available on free apps)
- 웨어하우스 액세스 권한이 있는 Snowflake 계정
- Snowflake 테이블 또는 뷰에 저장된 이벤트 데이터
- OneSignal에서 Snowflake 인스턴스로의 네트워크 연결
- 적절한 권한이 있는 사용자 자격 증명
인증 구성
보안 강화를 위해 키 페어 인증(권장)을 설정합니다:
- Snowflake 문서에 따라 공개/개인 키 페어를 생성합니다
- Snowflake 사용자에 공개 키를 구성합니다
- OneSignal의 연결 설정에서 개인 키를 사용합니다
이벤트 데이터 매핑
를 OneSignal의 사용자 지정 이벤트 형식에 매핑합니다:| OneSignal 필드 | 설명 | 필수 | |
|---|---|---|---|
name | event_name | 이벤트 식별자 | Yes |
external_id | user_id | 사용자 식별자 | Yes |
timestamp | event_timestamp | 이벤트가 발생한 시간 | No |
properties | event_data | No |
이벤트 테이블 스키마 예시
SQL 쿼리 모드
이벤트 데이터를 변환하기 위한 커스텀 SQL 쿼리를 작성합니다:고급 구성
웨어하우스 비용 관리
- 비용 최적화를 위해 X-Small 웨어하우스 크기 사용
- 자동 일시 중지(60초) 및 자동 재개 구성
- 사용량이 적은 시간대에 동기화 예약
- 다른 배치 처리 시스템과 웨어하우스 공유 고려
실시간 동기화 지원
실시간 이벤트 처리를 위해 이벤트 테이블에서 변경 추적을 활성화합니다:네트워크 보안
Snowflake의 허용된 IP 네트워크 정책을 사용하는 경우 OneSignal의 IP 주소를 허용 목록에 추가합니다. 현재 IP 범위는 OneSignal 지원팀에 문의하세요.제한사항
- 복잡한 분석 쿼리는 웨어하우스 성능 및 비용에 영향을 미칠 수 있습니다
- 사용자/암호 인증은 2025년 11월에 더 이상 사용되지 않습니다
- CENSUS 데이터베이스는 OneSignal 작업 전용으로 예약되어 있습니다
FAQ
어떤 인증 방법을 사용해야 하나요?
키 페어 인증(권장)을 사용하세요. 사용자/암호 인증은 2025년 11월부터 Snowflake에서 차단됩니다.기존 웨어하우스를 사용할 수 있나요?
예, 비용을 최적화하기 위해 dbt 또는 Fivetran과 같은 다른 배치 처리 시스템과 웨어하우스를 공유할 수 있습니다. 웨어하우스가 이벤트 처리 요구 사항에 충분한 용량을 갖추고 있는지 확인하세요.비용을 최적화하려면 어떻게 해야 하나요?
- X-Small 웨어하우스 크기 사용
- 공격적인 자동 일시 중지(60초) 구성
- 사용량이 적은 시간대에 동기화 예약
- 연속 동기화 대신 시간별/일별 동기화 사용