Klaviyo와 Redshift 연결하기
Klaviyo 고급 데이터 플랫폼은 Klaviyo의 표준 마케팅 애플리케이션에 포함되어 있지 않으며, 관련 기능에 액세스하려면 구독이 필요합니다. 이 요금제를 구매하는 방법을 알아보려면 결제 가이드를 확인해 주세요.
개요
이 가이드는 Redshift 관리자가 Klaviyo에 Amazon Redshift를 준비하고, 필요한 최소 권한을 부여하고, 연결을 완료하여 예약된 일정에 따라 프로필 데이터를 가져올 수 있도록 안내해요. 다음 내용을 알아보세요:
KLAVIYO_TMP및KLAVIYO_IMPORT_FROM_DWH스키마 만들기- Klaviyo용 전용 서비스 사용자를 생성하세요
- 최소 권한 원칙에 따라 권한을 부여하세요
- (선택 사항) 권한 및 연결 상태를 확인하세요.
- Redshift를 Klaviyo에 연결하고 동기화를 생성하기 시작하세요.
데이터 웨어하우스 가져오기 작동 방식(지원되는 객체 및 테이블 구조 모범 사례 포함)에 대한 배경은 Klaviyo에서 데이터 웨어하우스 가져오기 이해하기를 참고해 주세요.
필수 스키마 생성
Klaviyo에서 사용할 Redshift 데이터베이스에 스키마 2개를 생성하세요:
-- Run as a Redshift DB admin or a role with CREATE SCHEMA
CREATE SCHEMA IF NOT EXISTS klaviyo_import_from_dwh;
CREATE SCHEMA IF NOT EXISTS klaviyo_tmp; KLAVIYO_IMPORT_FROM_DWH– 최종적으로 동기화할 준비가 된 테이블 또는 뷰를 여기에 배치해 주세요. 설정하는 동안 Klaviyo에서 이 스키마의 객체를 나열해 선택할 수 있도록 하므로, 가져올 예정인 테이블만 포함해 주세요.KLAVIYO_TMP― 동기화 작업 중 임시/스테이징 테이블을 위해 Klaviyo에서만 사용해요. 여기 있는 데이터는 수정하지 마세요. Klaviyo에서 이 스키마를 자동으로 관리하고 정리해요.
Klaviyo 서비스 사용자를 만드세요
강력한 비밀번호를 사용해 Klaviyo 전용 데이터베이스 사용자를 만들고, 비밀번호를 독립적으로 교체할 수 있도록 설정해 주세요.
-- Replace with your own names and a strong password
CREATE USER klaviyo_data_transfer_user WITH PASSWORD 'REPLACE_WITH_STRONG_PASSWORD'; 서비스 사용자에 대한 권한 부여를 관리할 역할을 생성하세요:
CREATE ROLE klaviyo_data_transfer_role;
GRANT ROLE klaviyo_data_transfer_role TO klaviyo_data_transfer_user; 사용자 이름과 비밀번호를 안전하게 저장해 두세요. Klaviyo를 Redshift에 연결할 때 사용하게 돼요.
필요한 권한 부여(최소 권한 원칙)
-- 1) Allow temporary tables
GRANT TEMPORARY ON DATABASE your_database TO ROLE klaviyo_data_transfer_role;
-- 2) Permissions on the staging schema Klaviyo manages
GRANT USAGE ON SCHEMA klaviyo_tmp TO ROLE klaviyo_data_transfer_role;
GRANT CREATE ON SCHEMA klaviyo_tmp TO ROLE klaviyo_data_transfer_role;
-- 3) Read-only access to your import schema
GRANT USAGE ON SCHEMA klaviyo_import_from_dwh TO ROLE klaviyo_data_transfer_role;
GRANT SELECT ON ALL TABLES IN SCHEMA klaviyo_import_from_dwh TO ROLE klaviyo_data_transfer_role;
-- Remember to grant access to new tables in the future
-- 3a) Grant SELECT on specific views (repeat as needed)
GRANT SELECT ON VIEW klaviyo_import_from_dwh.example_view_name TO ROLE klaviyo_data_transfer_role; (선택 사항) 설정을 확인하세요
Klaviyo 사용자로 몇 가지 빠른 확인을 실행해 권한 부여가 올바른지 확인하세요.
-- Switch to the target database
SET search_path TO klaviyo_tmp;
-- 4.1 Validate create/read in KLAVIYO_TMP
CREATE TABLE IF NOT EXISTS permission_check (id INT);
INSERT INTO permission_check VALUES (1);
SELECT COUNT(*) FROM permission_check; -- expect 1
DROP TABLE permission_check;
-- 4.2 Confirm visibility of import tables
SET search_path TO klaviyo_import_from_dwh;
SELECT tablename FROM pg_table_def
WHERE schemaname = 'klaviyo_import_from_dwh'
LIMIT 25;
-- 4.3 Confirm SELECT on a source table or view
SELECT * FROM klaviyo_import_from_dwh.EXAMPLE_TABLE; 네트워크 액세스
Klaviyo가 Redshift 엔드포인트에 연결할 수 있어야 해요.
- 공개 Redshift 엔드포인트: 방화벽 또는 보안 그룹에서 Klaviyo의 고정 IP를 허용 목록에 추가하세요.
- 프라이빗 엔드포인트(예: PrivateLink): 내부 네트워크 경로와 보안 정책을 통해 연결을 보장하세요.
보안 그룹을 사용하는 경우, Klaviyo의 IP 범위에 대해 Redshift 포트(기본값 5439)에서 인바운드 액세스를 허용하세요:
184.72.183.187/32
52.206.71.52/32
3.227.146.32/32
44.198.39.11/32
35.172.58.121/32
3.228.37.244/32
54.88.219.8/32
3.214.211.176/32 가져오기 테이블을 준비하세요(구조 & 성능).
정확하고 효율적인 증분 동기화를 위해 가져오려는 모든 테이블이 다음 규칙을 따르는지 확인해 주세요.
- 타임스탬프 열: 행별 생성 또는 마지막 업데이트 타임스탬프(예:
inserted_at,updated_at,modified_at)를 포함해 주세요. - 단조 업데이트: 행이 변경될 때마다 타임스탬프가 증가해야 해요.
- 시간대: UTC를 사용하거나 시간대 정보를 포함하세요. 누락된 경우 Klaviyo는 UTC로 간주해요.
- 일관된 식별자: 중복을 방지하려면 가져오기 테이블 전반에서 동일한 프로필 식별자(
email,phone,external_id등)를 사용하세요. - 동의 형식: 동의 데이터를 동기화할 때는 파일 또는 SFTP 업로드에 사용된 것과 동일한 유효한 값/형식을 따르세요.
- 성과: 증분 읽기를 효율적으로 수행하려면 타임스탬프 열에서 정렬 키 또는 dist 키를 고려해 보세요.
- 보기: 간단한
SELECT이(가) Klaviyo 사용자에게 작동하기만 하면, 테이블이나 보기에서 가져올 수 있어요.
Redshift를 Klaviyo에 연결하기
- Klaviyo에서 왼쪽 사이드바를 열고 고급 → 동기화로 이동합니다.
- 동기화 만들기를 클릭합니다.
- 데이터 웨어하우스에서 데이터 가져오기를 선택해 주세요.
- Redshift를 선택합니다.
- Redshift에 연결을 클릭하고 다음 연결 세부 정보를 입력해 주세요:
필드 | 설명 |
|---|---|
호스트 | Redshift 엔드포인트(예: |
포트 | 5,439(또는 커스텀 포트) |
데이터베이스 |
|
사용자 이름/비밀번호 | Klaviyo 서비스 사용자 자격 증명 |
연결한 후 Klaviyo에서 자격 증명과 네트워크 연결을 테스트해요. 확인이 완료되면 동기화를 생성하고 klaviyo_import_from_dwh에서 테이블 또는 뷰를 선택할 수 있어요.
문제 해결 팁
연결 테스트 실패
- 방화벽 또는 보안 그룹 규칙이 올바른 포트에서 Klaviyo의 IP가 Redshift 엔드포인트에 도달할 수 있도록 허용하는지 확인합니다.
- SSL 설정과 올바른 엔드포인트(클러스터 vs. 워크그룹), 리전, 포트를 사용하고 있는지 확인해 주세요.
표가 표시되지 않아요.
- 표가
klaviyo_import_from_dwh에 있는지 확인하세요. - Klaviyo 사용자가 스키마에
USAGE을(를) 갖고 테이블 또는 뷰에SELECT을(를) 갖고 있는지 확인하세요.
동기화되는 새 행이 없습니다.
- 타임스탬프 열이 행 변경 시 업데이트되며 UTC를 사용하거나 시간대 정보가 포함되어 있는지 확인해 주세요.
런타임 시 권한 오류
- Klaviyo 사용자로 유효성 검사 SQL을 다시 실행하세요.
- 필요한 경우 권한 부여 또는 기본 권한을 다시 적용하세요.
보안 및 유지 관리
- 서비스 사용자 비밀번호는 정기적으로, 그리고 직원 변경 후에 교체해 주세요.
- Klaviyo 사용자를 위의 두 스키마로 제한하고, 필요한 경우에만
USAGE에 권한을 부여합니다. - 정확한
GRANT문과 허용 목록에 추가한 IP 범위를 문서화한 간단한 런북을 유지하세요.
자주 묻는 질문
여러 Redshift 데이터베이스에서 가져올 수 있나요?
예, 그렇습니다. 각 데이터베이스에 2개의 스키마를 만들고, 각각의 객체를 별도의 동기화로 연결하세요.
구체화된 뷰를 사용할 수 있나요?
예, 그렇습니다. Klaviyo 사용자에게 구체화된 뷰에서 SELECT을(를) 부여해 주세요.
부록: 간단한 가져오기 테이블용 예시 DDL
CREATE TABLE klaviyo_import_from_dwh.profile_base (
external_id VARCHAR(128),
email VARCHAR(320),
phone VARCHAR(32),
first_name VARCHAR(128),
last_name VARCHAR(128),
country VARCHAR(64),
inserted_at TIMESTAMP
);
-- ensure monotonically increasing timestamp on inserts/updates
-- (use your ETL/ELT to set inserted_at = GETDATE() at load time)