Braze 입문 7편. 마케터 관점의 운영 — Canvas 의 5 구성 요소 (Entry · Audience · Flow · Exit · Variants), Step 7 종류 (Message · Delay · Decision · Webhook · Update User · Audience Filter · Wait Until), Decision Split 3 종 (Action Path · Audience Path · Random), Multi-step A/B variant, 5 실전 패턴 (Onboarding · Cart Abandonment · Win-back · Birthday · Receipt), Campaign 4 타입, 마케터-엔지니어-PM 협업 룰까지 풀어쓴 학습 노트.
이 글은 Braze 입문에서 운영까지 시리즈 7편이에요. 1편 큰 그림 부터 6편 Liquid 까지 개발자 관점 의 데이터 흐름 · API · personalization 을 봤다면, 이번 7편은 시각 전환 — 마케터 · PM 관점의 운영.
이번 글의 위치
1편의 5 핵심 개념 의 Campaign · Canvas 자리. 코드 없이 대시보드에서 마케터가 직접 설계하는 자리. 개발자가 데이터 박는 자리 와 마케터가 메시지 보내는 자리 의 경계.
Campaign vs Canvas — 한 번 더 정리
Campaign 은 단일 메시지 한 번 발송 도구, Canvas 는 여러 메시지를 분기 · 지연 · 조건 으로 엮은 journey(여정) 자동화 도구.
| 항목 | Campaign | Canvas |
|---|---|---|
| 단위 | 단일 메시지 | 다단계 journey |
| 구조 | 직선 | 분기 + 지연 + 조건 |
| 복잡도 | 단순 | 복합 lifecycle |
| 운영 | 한 번 설정 → 발송 | 지속 운영 (entry 사용자 계속 진입) |
| 대표 사용 | 영수증 · 단순 알림 | Onboarding · Win-back · Cart Abandonment |
| A/B | 콘텐츠 variant | step 별 variant + 전체 journey variant |
→ 단일 = Campaign, 다단계 = Canvas. 대부분 운영 자동화 = Canvas 가 중심.
Canvas 의 5 구성 요소
┌────────────────────────────┐
│ Entry (사용자 진입 trigger) │
└─────────────┬──────────────┘
↓
┌────────────────────────────┐
│ Audience (대상 필터) │
└─────────────┬──────────────┘
↓
┌────────────────────────────┐
│ Flow (steps 의 연결) │
│ Message · Delay · Decision │
│ Webhook · Update · ... │
└─────────────┬──────────────┘
↓
┌────────────────────────────┐
│ Exit (종료 조건) │
└────────────────────────────┘
(Variants — A/B 실험 layer 가 위 모든 자리 위에 겹쳐짐)
1. Entry — 사용자 진입 트리거
Canvas 가 언제 시작 하는가 의 정의. 대표 트리거 종류:
| Entry Trigger | 의미 |
|---|---|
| Custom Event | 특정 event 발생 시 (signup_completed 등) |
| Scheduled | 정해진 시각 (예: 매월 1일 09:00) |
| API-triggered | /canvas/trigger/send 호출 시 |
| Segment Entry | 사용자가 segment(조건으로 묶은 사용자 집합) 에 진입 할 때 |
대표 사용:
Entry "Onboarding":
Trigger: Custom Event "signup_completed"
→ 가입 즉시 journey 시작
Entry "Cart Abandonment":
Trigger: Custom Event "cart_added"
→ 카트 추가 → 24시간 안 결제 안 하면 다음 step
Entry "Birthday Wish":
Trigger: Segment Entry "사용자의 생일 = 오늘"
→ 매일 자동 평가 + 해당 사용자 journey 진입
2. Audience — 대상 필터
Entry 후 Canvas 의 모든 단계 에 적용되는 전체 조건:
Audience filter:
- Subscription state: marketing_opted_in = true
- Country: KR · JP · VN
- Last app version: >= 2.0
→ 부합 안 하는 사용자 = Entry 통과해도 Canvas 진입 X.
여기서 시험 함정이 하나 있어요 — Audience 필터가 발송 시점 평가 가 아니라 Entry 시점 평가. 사용자가 Entry 후 Country 변경 해도 이미 진입한 journey 는 계속.
3. Flow — Steps 의 연결
Step 7 종류 의 자유 조합:
Message Step
[Email Step]
Audience: 전체
Content: "환영합니다, {{ first_name }}님!"
[Push Step]
Audience: 모바일 사용자
Content: "앱 다운로드 감사합니다"
각 message step = 해당 channel 발송. Canvas 안에서 email · push · SMS · in-app · content card · web push 자유 조합.
Delay Step
[Delay] 24 hours
→ 다음 step 으로 24시간 후
Delay 종류는 세 가지 — Fixed time 은 정확한 N 시간/일, Wait until specific time 은 특정 시각까지 (예: "내일 오전 9시"), Wait until day of week 는 평일까지 대기.
Decision Step — 조건 분기
[Decision: 사용자가 첫 결제 했나?]
├─ Yes: → "감사 메시지"
└─ No: → "첫 결제 5% 쿠폰"
조건 = User Attribute · Custom Event 누적 · Segment membership 등.
Webhook Step
Webhook 은 외부 시스템 HTTP 호출 트리거.
[Webhook]
POST https://api.internal.com/braze-webhook
Body: { "user_id": "{{ external_id }}", "step": "onboarding_day_3" }
외부 시스템 호출 — 우리 백엔드와 연동. 예: 사내 audit log, 추천 모델 재학습 트리거, 분석 시스템 알림.
Update User Attribute Step
[Update Attribute]
Set "onboarding_completed" = true
Set "onboarding_completed_date" = {{ now }}
Canvas 안에서 사용자 attribute 변경. 다음 step 이 변경된 attribute 기반 분기.
Audience Filter Step (중간 필터)
[Audience Filter]
Only continue if: "last 30 days no purchase"
Canvas 중간에 다시 필터링. 첫 audience 통과한 사용자도 시간 지나며 조건 변경 되면 journey 중도 종료.
Wait Until — 조건 만족 대기
[Wait Until]
Event: "checkout_completed" OR
Max wait: 7 days
특정 event 발생까지 대기. 최대 시간 도달 시 자동 다음 step.
4. Exit — 종료 조건
언제 Canvas 종료 정의. Audience 조건 위반 (예: unsubscribed), Goal 도달 (예: checkout 완료), Custom Event 발생 (예: account_deleted), Audience Filter step 통과 못함, Wait Until timeout — 다섯 갈래.
여러 exit criteria 동시 설정 가능. goal 도달 시 자동 종료 가 표준 — 같은 사용자 불필요한 후속 메시지 회피.
5. Variants — A/B 실험
Canvas 안에 여러 variant(실험 조건 묶음) 동시 운영:
Variant A: Email content "할인 30%"
Variant B: Email content "무료 배송"
→ 사용자 50/50 무작위 분할
→ Conversion 비교 → 우월한 variant 결정
Statsig 4편 Experiment 의 간소화 버전. Canvas 안에서 콘텐츠 · 시간 · channel · 전체 flow 모두 A/B 가능.
Decision Split — 3 종 깊이
Canvas 의 Decision Step 의 깊은 종류:
1. Action Path — Event 기반
[Decision: 사용자가 지난 7일 안 "purchase" event 했나?]
├─ Yes: 감사 시퀀스
└─ No: 결제 유도 시퀀스
특정 event 발생 여부 로 분기. 시간 범위 (지난 N일) 설정 가능.
2. Audience Path — Segment 기반
[Decision: 사용자가 "VIP segment" 멤버인가?]
├─ Yes: VIP 전용 콘텐츠
└─ No: 일반 콘텐츠
Segment 멤버십 으로 분기. Segment 의 모든 정의 (User Attribute · Event 누적 · 다른 조건) 활용.
3. Random Split — A/B/n
[Random Split]
├─ 50% → Variant A
└─ 50% → Variant B
또는 A/B/C/D 4-way 분할
무작위 분할 — A/B 실험의 핵심.
결정 가이드
사용자 행동 기반 → Action Path
사용자 특성 기반 → Audience Path
A/B 실험 → Random Split
대부분 운영 = Action + Audience 조합. 행동 + 특성 으로 정교한 분기.
Multi-step A/B Variant — Canvas 의 강점
Campaign 의 A/B 의 한계:
Campaign A: 1 email = subject 2 variant
→ 어느 subject 가 open rate 높은가 측정
Canvas 의 A/B 의 강점:
Canvas with Variants:
Variant A: email → 24h delay → push
Variant B: push → 24h delay → email
Variant C: email only (단일)
Variant D: 즉시 SMS
→ 4 가지 *전체 lifecycle* 비교
→ "어떤 시퀀스가 가장 conversion 높은가?"
단일 메시지 A/B 가 아닌 journey 전체 A/B. 전략적 결정 의 자리.
5 실전 패턴 — 운영 표준
Pattern 1: Onboarding Journey
Entry: Custom Event "signup_completed"
↓
Audience filter: subscription_state = subscribed
[Step 1: Welcome Email]
→ 가입 즉시
→ "환영합니다, {{ first_name }}님! 첫 결제 5% 할인"
[Step 2: Delay 24 hours]
[Step 3: Decision — 첫 결제 했나?]
├─ Yes: → END (성공)
└─ No: → 다음 step
[Step 4: Push]
→ "쿠폰이 곧 만료됩니다"
[Step 5: Delay 48 hours]
[Step 6: Decision — 여전히 미결제?]
├─ Yes: → 다음 step
└─ No: → END
[Step 7: In-app Message]
→ 다음 앱 진입 시 "튜토리얼 + 인기 상품"
[Step 8: Delay 7 days]
[Step 9: Audience Filter — 여전히 active?]
→ Yes 만 계속
[Step 10: SMS]
→ "추가 10% 할인 — 마지막 기회"
Exit:
- 첫 결제 시 자동 종료
- 30일 도달 시 자동 종료 → 비활성 segment 로 이동
가장 흔한 onboarding 패턴.
Pattern 2: Cart Abandonment
Entry: Custom Event "cart_added"
↓
[Step 1: Delay 1 hour]
[Step 2: Decision — checkout 완료?]
├─ Yes: → END
└─ No: → 다음
[Step 3: Email]
→ "장바구니에 두고 가셨네요"
→ Liquid: 카트 안 상품 list (Catalog lookup)
[Step 4: Delay 12 hours]
[Step 5: Decision — checkout?]
├─ Yes: → END
└─ No: → 다음
[Step 6: Push]
→ "10% 할인 + 무료배송"
[Step 7: Delay 12 hours]
[Step 8: Decision — checkout?]
├─ Yes: → END
└─ No: → 다음
[Step 9: SMS]
→ "마지막 기회 — 1시간 안 15% 할인"
Exit: checkout_completed 시 자동
E-commerce 의 가장 강력한 retention 패턴. 수익 5~20% 추가.
Pattern 3: Win-back (재유입)
Entry: Segment Entry "Inactive 30 days"
↓
[Step 1: Email]
→ "오랜만이에요! 새로운 상품들이 도착했어요"
[Step 2: Delay 3 days]
[Step 3: Decision — 다시 active?]
├─ Yes: → END
└─ No: → 다음
[Step 4: Push]
→ "10% 할인 쿠폰을 드려요"
[Step 5: Delay 7 days]
[Step 6: Decision — active?]
├─ Yes: → END
└─ No: → 다음
[Step 7: Email + Liquid + Connected Content]
→ AI 생성 추천: "회원님이 좋아하실 상품들"
[Step 8: Delay 14 days]
[Step 9: Decision — 여전히 inactive?]
├─ Yes: → 마지막 step
└─ No: → END
[Step 10: Last Email]
→ "이메일 수신을 그만하시려면..."
→ 사용자 자율 결정
Exit:
- active 도달 시
- unsubscribe 시
- 60일 도달 시 (영구 inactive 가정)
이탈 사용자 마지막 시도.
Pattern 4: Birthday Wish
Entry: Scheduled — 매일 09:00 KST
↓
Audience: ${birthday} = today
[Step 1: Email]
→ "생일 축하해요, {{ first_name }}님!"
→ 특별 쿠폰 첨부
[Step 2: Delay 7 days]
[Step 3: Decision — 쿠폰 사용?]
├─ Yes: → END
└─ No: → Push 알림 "쿠폰 만료 임박"
Exit: 14일 (생일 + 2주)
연 1회 personal touch — 특별한 느낌 + 높은 conversion.
Pattern 5: Receipt (영수증)
Entry: Custom Event "checkout_completed"
↓
Audience: 전체
[Step 1: Email — 즉시]
→ 영수증 + 주문 상세
→ Liquid: 주문 내역 출력
→ Connected Content: 실시간 배송 ETA
[Step 2: Delay 1 day]
[Step 3: Push]
→ "주문 발송 됐어요"
→ Deep link to 배송 추적
[Step 4: Decision — 배송 완료?]
├─ Yes (배송 완료 event): → 다음
└─ No: → Wait Until "delivery_completed" or 7 days
[Step 5: Email — 배송 후]
→ "도착했나요? 리뷰 부탁드려요"
→ 리뷰 5% 할인
[Step 6: Delay 14 days]
[Step 7: Decision — 재구매?]
├─ Yes: → END
└─ No: → Push "관련 상품 추천"
Exit: 30일 또는 환불 발생
결제 후 전 사이클 자동화. retention + LTV ↑.
Campaign 4 타입 — 깊이
1. One-time Campaign
Send: 2026-07-01 09:00 KST
Audience: Segment "Active 사용자"
Content: "여름 세일 시작"
한 번 발송. 캠페인 종료. 대표 = 신제품 출시 · 이벤트 안내.
2. Trigger-based Campaign
Trigger: Custom Event "cart_added"
Delay: 24 hours (cart abandonment)
Audience: 카트 가치 > 30,000원
Content: "장바구니 확인"
사용자 행동 자동 trigger. On-going 캠페인 — 사용자 행동 시점마다 발송.
3. API-triggered Campaign
[Server-side]:
/campaigns/trigger/send
campaign_id: "receipt_email"
recipients: [...]
5편 REST API 의 trigger endpoint. 외부 시스템 (우리 백엔드) 이 발송 시점 통제.
대표 = 결제 영수증 · 비밀번호 재설정 · 시스템 알림.
4. Recurring Campaign
Schedule: 매주 월요일 09:00 KST
Audience: Segment "Weekly digest 구독자"
Content: "이번 주 새로운 상품"
정기 반복. 뉴스레터 · weekly digest · 주간 통계 등.
마케터-엔지니어-PM 협업 룰
여기서 실전 협업 의 핵심.
역할 분담
| 역할 | 담당 |
|---|---|
| PM | Canvas 전략 · 비즈니스 목표 · 우선순위 |
| 마케터 | 콘텐츠 작성 · A/B variant · 캠페인 운영 |
| 엔지니어 | SDK 통합 · API · Webhook · Catalog sync · personalization 코드 |
| 데이터 분석가 | 결과 분석 · ROI 측정 · 다음 캠페인 인사이트 |
4 역할 모두 필요 — 한 역할만 부족 = 운영 깨짐.
표준 워크플로
[PM]
비즈니스 목표 + 전략 정의
↓
[엔지니어]
필요한 event · attribute · catalog 박기
↓
[마케터]
Canvas 설계 + 콘텐츠 작성
↓
[데이터 분석가]
결과 분석 + 다음 행동
순환 — 한 캠페인 결과 → 다음 캠페인 가설.
자주 발생하는 협업 사고
사고: 마케터가 없는 attribute 사용
마케터: Canvas 에서 "${preferred_category}" 박음
엔지니어: 이 attribute 박은 적 없음
→ 모든 사용자 = "회원님이 좋아하실 카테고리" (어색)
해결 — Canvas 작성 전 attribute 가용 확인. 가능 attribute list = engineering 측 docs.
사고: Event property 누락
마케터: trigger_properties.${order_id} 사용
엔지니어: API 호출 시 order_id 안 보냄
→ "주문 번호 ..." 메시지 깨짐
해결 — trigger property contract 명문화. API call 의 required field 명시.
사고: Audience 와 SDK 사용자 불일치
Canvas Audience: subscription_state = subscribed
SDK: 사용자 구독 변경 sync 안 함
→ 실제 unsubscribed 사용자가 발송 받음 (불법)
해결 — Subscription state 의 실시간 sync + audience filter 정기 검증.
Canvas · Campaign 함정 — 시험 직전
사고 1: Audience 평가 시점 혼동
원인 — Audience filter 가 Entry 시점 평가 — 이후 사용자 변경은 반영 X.
해결 — Audience Filter step 으로 중간 재평가.
사고 2: Exit criteria 미설정
원인 — goal 도달 후에도 메시지 계속 → 사용자 짜증.
해결 — Goal Event 자동 종료 설정 (예: checkout_completed).
사고 3: Delay 너무 길거나 짧음
원인 — 1시간 후 메시지 = 너무 빠름 / 7일 후 = 너무 늦음.
해결 — 카테고리별 표준 시간. 과거 캠페인 분석 기반 최적화.
사고 4: Variant 가 너무 작은 sample
원인 — A/B 분할 후 각 variant 100명 → 통계 power X.
해결 — 최소 각 variant 수천 명 + 1주 이상 운영.
사고 5: Recurring 의 콘텐츠 정체
원인 — Weekly digest 가 매주 같은 콘텐츠 구조 → 사용자 피로.
해결 — Liquid + Connected Content 로 콘텐츠 매주 다르게.
사고 6: Personalization 의존 → fallback 없음
원인 — ${first_name} 만 사용 + default 없음 → "안녕하세요, 님!".
해결 — 6편의 Personalization 4 layer 안전선.
사고 7: Multi-channel 폭격
원인 — 같은 Canvas 의 email + push + SMS 거의 동시 발송.
해결 — Delay step 사이. 또는 cascade fallback (push 안 도달 시 email).
사고 8: A/B variant 결과 무시
원인 — Variant A 가 명확히 우위 → 운영자 반영 안 함 → 1년 후도 50/50.
해결 — 결정 회의 정기 + 우월 variant 100% 전환 + 새 가설 실험.
운영 권장 패턴
Pattern 1: Canvas 설계 표준 템플릿
canvas:
name: "Cart Abandonment v2 - 2026-Q3"
goal: "checkout_completed within 7 days"
owner: "marketing-team"
reviewers: ["PM", "engineer", "analyst"]
entry:
trigger: "Custom Event: cart_added"
audience:
- subscription_state: "subscribed"
- last_app_version: ">= 2.0"
flow_summary:
- Step 1: Email (1h delay)
- Step 2: Push (12h delay, 미결제 시)
- Step 3: SMS (24h delay, 마지막 시도)
exit_criteria:
- "checkout_completed" event
- 7일 도달
variants:
- A: 표준 콘텐츠 (50%)
- B: AI generated (50%)
metrics:
primary: "conversion rate"
secondary: ["email_open", "push_click", "revenue_per_user"]
설계 문서화 — 마케터 + 엔지니어 + 분석가 공유.
Pattern 2: PM-Eng-Marketing Contract
contract:
marketer_uses:
attributes:
- first_name
- tier
- country
- language
- signup_year
- last_purchase_date
- lifetime_value
- preferred_category
events:
- product_viewed (props: product_id, category)
- cart_added (props: product_id, quantity, value)
- checkout_completed (props: order_id, value)
- subscription_cancelled
triggers:
- signup_completed
- cart_added
- checkout_completed
- inactive_30days
마케터의 사용 가능 자산 명문화 — engineer 가 반드시 박을 attribute · event 의 contract.
Pattern 3: 정기 캠페인 review
매주 월요일 마케팅 review:
- 진행 중 Canvas 의 progress
- A/B variant 결과 도달 캠페인 결정
- 새 가설 검토
- 데이터 분석가의 인사이트 공유
- 다음 주 우선순위
캠페인 지속 개선 사이클.
Pattern 4: Canvas 의 변경 관리
Canvas 운영 중 변경 룰:
- Audience 변경 = 새 Canvas 시작 (기존은 유지)
- Content 변경 = 안전 (다음 발송부터)
- Flow 구조 변경 = 새 Canvas 권장
- Goal 변경 = 새 Canvas 강력 권장
변경 사고 회피.
진행 중 Canvas 의 큰 변경 = 새 Canvas 가 안전.
Pattern 5: 캠페인 결과 → 학습 cycle
1. 캠페인 종료
2. 분석가의 분석 (conversion · ROI · variant 결과)
3. 인사이트 정리 (왜 이 결과인가)
4. 다음 가설 도출
5. 새 Canvas 설계
6. 반복
실험 → 학습 → 개선 의 문화.
시험 직전 한 번 더 — Canvas · Campaign 운영 함정 압축 노트
Campaign vs Canvas
- 단일 메시지 vs 다단계 journey
- 직선 vs 분기/지연/조건
- 한 번 설정 vs 지속 운영
- 단순 알림 vs 복합 lifecycle
Canvas 5 구성
- Entry — 사용자 진입 trigger
- Audience — 대상 필터 (entry 시점 평가)
- Flow — Step 7 종류의 연결
- Exit — 종료 조건 (goal · audience 위반 · timeout)
- Variants — A/B 실험 layer
Entry Trigger 4 종
- Custom Event — event 발생 시 (가장 흔함)
- Scheduled — 정해진 시각
- API-triggered —
/canvas/trigger/send - Segment Entry — segment 진입 시점
Step 7 종류
- Message — email · push · SMS · in-app · content card · web push
- Delay — fixed time · until specific time · until day of week
- Decision — 조건 분기
- Webhook — 외부 API 호출
- Update User Attribute — Canvas 안 사용자 변경
- Audience Filter — 중간 재평가
- Wait Until — event 발생 또는 timeout 대기
Decision Split 3 종
- Action Path — event 발생 여부 (시간 범위)
- Audience Path — segment 멤버십
- Random Split — A/B/n 무작위 분할
Multi-step A/B variant
- Campaign A/B = 콘텐츠 variant
- Canvas A/B = journey 전체 variant (sequence · channel · timing 모두)
5 실전 패턴
- Onboarding — 가입 → 첫 결제 유도 (10 step)
- Cart Abandonment — 카트 → 결제 (3 reminder)
- Win-back — inactive 30일 → 재유입 (3 시도)
- Birthday — scheduled 매일 + audience filter
- Receipt — 결제 → 배송 → 리뷰 → 재구매
Campaign 4 타입
- One-time — 한 번 발송
- Trigger-based — 사용자 행동 자동 trigger
- API-triggered —
/campaigns/trigger/send - Recurring — 정기 반복 (뉴스레터)
마케터-엔지니어-PM 협업 룰
- PM = 전략 · 목표
- 마케터 = 콘텐츠 · variant · 운영
- 엔지니어 = 데이터 · API · catalog
- 분석가 = 결과 · ROI · 인사이트
Audience 평가 시점
- Entry 시점 평가 (이후 변경 반영 X)
- 중간 재평가 = Audience Filter step
사고 함정
- Audience 평가 시점 혼동
- Exit criteria 미설정 (goal 도달 후도 메시지)
- Delay 시간 부적절
- Variant sample 부족 (통계 power X)
- Recurring 콘텐츠 정체
- Personalization fallback 없음
- Multi-channel 폭격
- A/B 결과 무시
운영 패턴
- Canvas 설계 표준 템플릿 (YAML 문서화)
- 마케터-엔지니어 Contract (attributes · events · triggers 명문화)
- 정기 캠페인 review (주간 회의)
- Canvas 변경 관리 (큰 변경 = 새 Canvas)
- 학습 cycle (실험 → 학습 → 개선)
협업 사고 함정
- 없는 attribute 사용
- Event property 누락
- Audience 와 SDK sync 불일치
공식 문서: Braze Canvas · Campaigns 에서 원문을 확인할 수 있어요.
시리즈 다른 편 (앞뒤 글 모음)
이전 글:
- 2편 — SDK 통합 · REST API · 첫 캠페인 30분
- 3편 — Developer Guide · Identity · 데이터 모델 깊이
- 4편 — Push · In-app · Content Card · Feature Flag
- 5편 — REST API 9 카테고리 · Messaging · Currents 깊이
- 6편 — Liquid · Connected Content · Personalization
다음 글: