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

# Azure Synapse

> Azure Synapse에서 OneSignal로 사용자 지정 이벤트를 동기화하여 사용자 행동을 기반으로 자동화된 Journeys 및 개인화된 메시징 캠페인을 트리거합니다.

export const PLATFORM_0 = "Azure Synapse"

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

export const COLUMN_HEADER_0 = "Synapse 열"

export const PROPERTIES_DESCRIPTION_0 = "JSON 문자열로 된 이벤트 메타데이터"

## 개요

OneSignal + Azure Synapse 통합을 사용하면 Azure Synapse Analytics 작업 영역에서 OneSignal로 사용자 지정 이벤트를 동기화하여 사용자 행동을 기반으로 자동화된 메시징 캠페인 및 Journeys를 트리거할 수 있습니다.

Azure Synapse Analytics는 데이터 통합, 데이터 웨어하우징 및 분석을 결합한 Microsoft의 클라우드 기반 분석 서비스입니다.

***

## 요구 사항

* 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)

### Azure Synapse

* SQL 풀 액세스 권한이 있는 **Azure Synapse 작업 영역**
* 적절한 권한이 있는 **데이터베이스 사용자**
* 구조화된 행동 데이터가 포함된 **이벤트 테이블**
* OneSignal IP 주소에 대한 **방화벽 액세스**

***

## 설정

<Steps>
  <Step title="OneSignal용 전용 로그인 만들기">
    강력하고 고유한 비밀번호로 전용 로그인 및 사용자 계정을 만듭니다:

    ```sql theme={null}
    USE <your-database>;

    -- Create census login with the ability to sign in with a password
    CREATE LOGIN CENSUS WITH PASSWORD = '<strong-unique-password>';

    -- Create user for the login
    CREATE USER CENSUS FOR LOGIN CENSUS;

    -- Give the census user the ability to connect to database
    GRANT CONNECT TO CENSUS;
    ```

    <Info>
      `<your-database>`를 이벤트 데이터가 포함된 실제 데이터베이스 이름으로 바꾸세요.
    </Info>
  </Step>

  <Step title="읽기 권한 부여">
    이벤트 데이터에 대한 읽기 전용 액세스를 제공합니다:

    ```sql theme={null}
    -- Give the census user the ability to read all tables
    EXEC sp_addrolemember 'db_datareader', CENSUS;

    -- Grant census user ability to read schema and data
    -- Run this for each schema you intend OneSignal to access
    GRANT SELECT, VIEW DEFINITION ON SCHEMA::<your-schema> TO CENSUS;
    ```

    <Info>
      `<your-schema>`를 이벤트 데이터가 포함된 실제 스키마 이름으로 바꾸세요. OneSignal이 액세스하도록 하려는 각 스키마에 대해 이 명령을 반복하세요.
    </Info>
  </Step>

  <Step title="방화벽 액세스 구성">
    OneSignal IP 주소를 허용하도록 Azure Synapse 방화벽을 구성합니다.

    Windows Azure Management Portal을 사용하거나 기본 데이터베이스에서 **sp\_set\_firewall\_rule**을 실행합니다:

    ```sql theme={null}
    -- Example: Add firewall rule for OneSignal IP range
    EXEC sp_set_firewall_rule
        N'OneSignal Access',
        'ONESIGNAL_IP_START',
        'ONESIGNAL_IP_END';
    ```

    <Warning>
      해당 지역의 현재 IP 주소 범위는 OneSignal 지원팀에 문의하세요.
    </Warning>
  </Step>

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

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

    * **호스트:** Synapse SQL 엔드포인트 호스트 이름
    * **포트:** 1433 (기본값)
    * **데이터베이스:** 데이터베이스 이름
    * **사용자 이름:** `CENSUS`
    * **비밀번호:** 1단계의 비밀번호
  </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 Azure Synapse event table
CREATE TABLE analytics.user_events (
    event_id BIGINT IDENTITY(1,1) PRIMARY KEY,
    event_name NVARCHAR(100) NOT NULL,
    user_id NVARCHAR(255) NOT NULL,
    event_timestamp DATETIME2 DEFAULT GETUTCDATE(),
    event_data NVARCHAR(MAX),
    session_id NVARCHAR(255),
    device_type NVARCHAR(50)
)
WITH (DISTRIBUTION = HASH(user_id), CLUSTERED COLUMNSTORE INDEX);
```

### SQL 쿼리 모드

사용자 지정 SQL 쿼리를 작성하여 이벤트 데이터를 변환합니다:

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

***

## Azure 특정 기능

### 분산 아키텍처

* 최적의 쿼리 성능을 위해 `user_id`로 분산된 이벤트
* 분석 워크로드를 위한 클러스터형 columnstore 인덱스
* 대규모 이벤트 데이터를 위한 대규모 병렬 처리(MPP)

### Azure 에코시스템과의 통합

* 자동화된 이벤트 파이프라인을 위해 Azure Data Factory에 연결
* 실시간 이벤트 스트리밍을 위해 Azure Event Hubs와 통합
* 인증을 위해 Azure Active Directory 활용

***

## 고급 네트워크 구성

OneSignal은 지역 제약, IP 주소 허용 목록 또는 SSH 터널링을 포함한 고급 네트워킹 제어를 사용하는 Azure Synapse 인스턴스에 성공적으로 연결할 수 있습니다.

네트워크 액세스 구성에 대한 자세한 내용은 Azure Synapse 관리자 또는 OneSignal 지원팀에 문의하세요.

***

## 제한 사항

* SQL Server JDBC 드라이버 연결 프로토콜 기반
* OneSignal IP 주소에 대한 명시적 방화벽 규칙 필요
* 복잡한 쿼리는 SQL 풀 성능 및 비용에 영향을 미칠 수 있음
* JSON 작업은 최적의 성능을 위해 신중한 인덱싱 필요

***

## FAQ

### 여러 Azure Synapse 스키마에 연결할 수 있나요?

예, 이벤트 데이터가 포함된 각 스키마에 대해 `GRANT SELECT, VIEW DEFINITION ON SCHEMA::<schema>` 문을 실행하여 CENSUS 사용자에게 여러 스키마에 대한 액세스 권한을 부여할 수 있습니다.

### OneSignal에 대한 방화벽 액세스를 구성하려면 어떻게 해야 하나요?

Azure Management Portal 또는 `sp_set_firewall_rule`을 사용하여 OneSignal의 IP 주소를 추가하세요. 현재 IP 범위는 OneSignal 지원팀에 문의하세요.

### Azure Synapse와 SQL Server 통합의 차이점은 무엇인가요?

Azure Synapse는 동일한 SQL Server JDBC 드라이버를 사용하지만 분산 아키텍처 기능을 포함하고 클라우드 액세스를 위한 특정 방화벽 구성이 필요합니다.
