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

# Amazon Redshift

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

export const PLATFORM_0 = "Amazon Redshift"

export const DATA_TYPE_0 = "columns"

export const COLUMN_HEADER_0 = "Redshift Column"

export const PROPERTIES_DESCRIPTION_0 = "JSON object with event details"

## 개요

OneSignal + Amazon Redshift 통합은 Redshift 데이터 웨어하우스에서 OneSignal로 사용자 지정 이벤트를 동기화하여 사용자 행동을 기반으로 자동화된 메시징 캠페인 및 Journeys를 트리거할 수 있습니다.

Amazon Redshift는 기존 비즈니스 인텔리전스 도구를 사용하여 대용량 데이터를 비용 효율적으로 분석할 수 있는 완전 관리형 페타바이트급 데이터 웨어하우스 서비스입니다.

***

## 요구 사항

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

### Amazon Redshift

* 네트워크 액세스 권한이 있는 **Redshift 클러스터**
* 적절한 권한이 있는 **데이터베이스 사용자**
* 구조화된 행동 데이터가 포함된 **이벤트 테이블**
* OneSignal에서 Redshift 클러스터로의 **네트워크 연결**

***

## 설정

<Steps>
  <Step title="OneSignal용 전용 사용자 생성">
    적절한 권한으로 전용 사용자 계정을 생성합니다:

    ```sql theme={null}
    -- Create OneSignal user with strong password
    CREATE USER CENSUS WITH PASSWORD '<strong-unique-password>';

    -- Create private bookkeeping schema for sync state (skip if read-only mode)
    CREATE SCHEMA CENSUS;

    -- Grant full access to bookkeeping schema (skip if read-only mode)
    GRANT ALL ON SCHEMA CENSUS TO CENSUS;

    -- Ensure access to existing objects in bookkeeping schema (skip if read-only mode)
    GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA CENSUS TO CENSUS;
    ```
  </Step>

  <Step title="이벤트 데이터에 권한 부여">
    이벤트 데이터가 포함된 스키마에 읽기 액세스 권한을 제공합니다:

    ```sql theme={null}
    -- Grant schema access (repeat for each schema with event data)
    GRANT USAGE ON SCHEMA "<your_schema>" TO CENSUS;

    -- Grant read access to existing tables
    GRANT SELECT ON ALL TABLES IN SCHEMA "<your_schema>" TO CENSUS;

    -- Grant read access to future tables
    ALTER DEFAULT PRIVILEGES IN SCHEMA "<your_schema>" GRANT SELECT ON TABLES TO CENSUS;

    -- Grant execute permissions on functions
    GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA "<your_schema>" TO CENSUS;
    ALTER DEFAULT PRIVILEGES IN SCHEMA "<your_schema>" GRANT EXECUTE ON FUNCTIONS TO CENSUS;
    ```
  </Step>

  <Step title="네트워크 액세스 구성">
    Redshift 보안 그룹에 OneSignal의 IP 주소를 추가합니다. Redshift는 기본적으로 외부 액세스를 차단합니다.

    통합 설정에서 해당 지역의 OneSignal IP 주소를 찾을 수 있습니다. 자세한 내용은 AWS Redshift 도움말 센터를 방문하세요.
  </Step>

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

    1. 목록에서 **Amazon Redshift** 선택
    2. 연결 세부 정보 입력:
       * **Host:** Redshift 클러스터 엔드포인트
       * **Port:** 일반적으로 5439
       * **Database:** 데이터베이스 이름
       * **Username:** `CENSUS`
       * **Password:** 생성한 비밀번호
    3. 연결 테스트
    4. 이벤트 데이터가 포함된 테이블 구성
  </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 Redshift event table
CREATE TABLE analytics.user_events (
    event_id BIGINT IDENTITY(1,1),
    event_name VARCHAR(100) NOT NULL,
    user_id VARCHAR(255) NOT NULL,
    event_timestamp TIMESTAMP DEFAULT GETDATE(),
    event_data SUPER,
    session_id VARCHAR(255),
    created_at TIMESTAMP DEFAULT GETDATE()
)
DISTKEY(user_id)
SORTKEY(event_timestamp);
```

### 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, GETDATE())
    AND JSON_EXTRACT_PATH_TEXT(event_data, 'value')::NUMERIC > 100
ORDER BY event_timestamp DESC;
```

***

## dbt 통합

Redshift와 함께 dbt를 사용하는 경우 각 dbt 실행 후에도 OneSignal이 액세스 권한을 유지하도록 하세요:

### 옵션 1: 세분화된 권한

dbt 프로젝트에 post-hook을 추가하여 각 모델이 빌드된 후 액세스 권한을 부여하세요:

```sql theme={null}
-- In your dbt model
{{ config(
    post_hook="GRANT SELECT ON {{ this }} TO CENSUS"
) }}
```

### 옵션 2: 기본 권한(권장)

dbt 프로덕션 사용자에 대한 기본 권한을 부여하세요:

```sql theme={null}
-- Must be run by Redshift superuser
ALTER DEFAULT PRIVILEGES FOR USER "<your_dbt_run_user>"
IN SCHEMA "<your_dbt_target_schema>"
GRANT SELECT ON TABLES TO CENSUS;
```

***

## 고급 네트워크 구성

### SSH 터널 설정

프라이빗 네트워크의 Redshift 클러스터의 경우:

1. **SSH 사용자 생성**: SSH 호스트에 전용 사용자 설정
2. **터널 구성**: OneSignal 통합 설정에서 "SSH 터널 사용" 활성화
3. **키 쌍 설치**: `~/.ssh/authorized_keys`에 OneSignal의 공개 키 추가
4. **연결 테스트**: 터널 연결 확인

### VPC 배포

AWS VPC 내의 Redshift의 경우:

OneSignal은 효율적인 대량 데이터 추출을 위해 `UNLOAD` 명령을 사용합니다. VPC 배포에는 Redshift가 S3와 통신할 수 있도록 **S3 VPC 엔드포인트**가 필요합니다.

**S3 VPC 엔드포인트 설정:**

1. AWS 콘솔에서 VPC 서비스로 이동
2. S3 서비스에 대한 VPC 엔드포인트 생성
3. Redshift 서브넷과 연결
4. 라우팅 테이블 구성

***

## 성능 최적화

### 배포 및 정렬 키

분석 워크로드를 위해 이벤트 테이블을 최적화하세요:

```sql theme={null}
-- Distribute by user_id for user-centric queries
CREATE TABLE analytics.user_events (
    -- columns
)
DISTKEY(user_id)
SORTKEY(event_timestamp, event_name);
```

### 컬럼형 스토리지

분석을 위해 Redshift의 컬럼형 스토리지를 활용하세요:

* **압축**: Redshift가 자동으로 열을 압축합니다
* **영역 맵**: 정렬된 데이터로 쿼리 성능 향상
* **열 지향**: 이벤트 데이터에 대한 분석 쿼리에 효율적

***

## 제한 사항

* 여러 스키마에는 별도의 권한 부여가 필요합니다
* 교차 스키마 테이블을 참조하는 뷰에는 추가 권한이 필요합니다
* 복잡한 저장 프로시저 액세스에는 추가 설정이 필요할 수 있습니다
* VPC 배포에는 S3 VPC 엔드포인트 구성이 필요합니다

***

## FAQ

### OneSignal은 대규모 이벤트 데이터 세트를 어떻게 처리하나요?

OneSignal은 대규모 분석 워크로드에 최적화된 Redshift의 `UNLOAD` 명령을 사용하여 효율적인 대량 데이터 추출을 수행합니다.

### 읽기 전용 모드를 사용할 수 있나요?

예, 더 간단한 설정을 선호하고 OneSignal이 테이블을 생성하도록 허용할 수 없는 경우 북키핑 스키마 생성을 건너뛰고 읽기 전용 모드를 사용할 수 있습니다.

### dbt 호환성은 어떻습니까?

OneSignal은 dbt 실행 후에도 권한이 유지되도록 특정 dbt 통합 패턴을 제공합니다. 설정에 따라 post-hook 또는 기본 권한을 사용하세요.
