[이제와서 시작하는 Metabase 마스터하기 #9] 자동화와 알림 - Subscriptions와 Alerts 설정
학습 목표
이 포스트를 마치면 다음을 할 수 있습니다:
- Subscriptions로 정기 리포트 자동 발송 (v0.53+에서 Pulses 대체)
- Alerts로 중요한 변화 실시간 감지
- Slack, Email 통합 설정
- 알림 조건과 빈도 최적화
- 팀별 맞춤 알림 전략 수립
- 알림 피로도(Alert Fatigue) 관리
📌 2025년 10월 기준 최신 버전: v0.56.8
자동화의 필요성
수동 리포트의 문제점
graph LR
A[매일 아침] --> B[Metabase 로그인]
B --> C[대시보드 열기]
C --> D[스크린샷]
D --> E[이메일 작성]
E --> F[팀에게 전송]
F --> G[30분 소요]
style G fill:#ffcccc
문제:
- 반복적 작업으로 시간 낭비
- 사람 실수로 누락 가능
- 일관성 없는 리포트
- 중요한 변화 놓칠 수 있음
자동화의 이점
graph TD
A[Metabase Automation] --> B[Subscriptions]
A --> C[Alerts]
B --> B1[정기 리포트]
B --> B2[자동 발송]
B --> B3[시간 절약]
C --> C1[이상 감지]
C --> C2[즉시 알림]
C --> C3[빠른 대응]
Subscriptions (구독)
개념
Subscription은 대시보드나 Question을 정기적으로 이메일이나 Slack으로 전송하는 기능입니다.
⚠️ 버전 참고: v0.53부터 기존 “Pulses” 기능이 “Subscriptions”로 이름이 변경되었습니다. 기능은 동일하지만 더 직관적인 이름으로 개선되었습니다.
Subscription 생성
Step 1: 대시보드/Question에서 설정
1
2
3
4
5
1. Dashboard 또는 Question 열기
2. ... menu > "Subscriptions and alerts"
3. "Set up a regular email or Slack message"
4. 설정 입력
5. Done
Step 2: 구독 설정
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Name: Daily Sales Report
Send to:
☑ Email: sales-team@company.com
☑ Slack: #sales-metrics
Schedule:
Frequency: Daily
Time: 9:00 AM
Timezone: Asia/Seoul
Send if:
○ Always send
○ Results aren't empty
○ Custom condition
Attached:
☑ Include dashboard/question
Format: PNG / PDF
☑ Include data as CSV
Subscription 예제
예제 1: 일일 매출 리포트
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Name: Daily Sales Summary
Dashboard: "Sales Overview"
Recipients:
- CEO
- VP Sales
- Sales team (sales-team@company.com)
Schedule:
- Monday to Friday
- 8:00 AM
- Skip holidays
Format:
- PDF (Executive용)
- PNG in Slack (팀용)
Message:
"📊 어제의 판매 현황입니다.
자세한 내용은 첨부 파일을 확인하세요.
[Dashboard 바로가기] https://metabase.company.com/dashboard/123"
예제 2: 주간 성과 리뷰
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Name: Weekly Performance Review
Dashboard: "Weekly KPIs"
Recipients:
- Leadership team
- Department heads
Schedule:
- Every Monday
- 10:00 AM
Condition:
- Always send (빈 결과여도)
Format:
- PDF with logo
- Include 4 weeks trend
Attached data:
- Top 10 products CSV
- Customer segments breakdown
예제 3: 월간 재무 리포트
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Name: Monthly Financial Report
Dashboard: "Finance Dashboard"
Recipients:
- CFO
- Finance team
- Board members (if configured)
Schedule:
- First day of month
- 9:00 AM
Format:
- PDF (formatted for printing)
- Excel export of raw data
Security:
- Link expires in 7 days
- Password protected PDF
Email vs Slack 비교
| 특성 | Slack | |
|---|---|---|
| 형식 | 공식적 | 비공식적 |
| 즉시성 | 낮음 | 높음 |
| 검색성 | 좋음 | 좋음 |
| 외부 공유 | 쉬움 | 어려움 |
| 스레드 토론 | 제한적 | 편리함 |
| 권장 용도 | Executive 리포트 | 팀 협업 |
Subscription Best Practices
1. 빈도 최적화
1
2
3
4
5
6
7
8
❌ 나쁜 예:
- 매시간 발송 → 정보 과부하
- 매일 3개 리포트 → 피로도 증가
✅ 좋은 예:
- 핵심 지표: 매일 1회
- 상세 분석: 주 1회
- 전략 리뷰: 월 1회
2. 대상 맞춤화
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Executive:
- 요약 대시보드
- High-level KPIs
- PDF format
- 주간 빈도
Team members:
- 상세 대시보드
- Actionable metrics
- Slack format
- 일간 빈도
Analysts:
- Raw data
- CSV exports
- 필요 시 (on-demand)
3. 명확한 제목과 메시지
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
❌ 나쁜 제목:
"Report"
"Dashboard"
"Daily update"
✅ 좋은 제목:
"📊 Daily Sales: $45K (+15% vs yesterday)"
"⚠️ Website Traffic Down 20%"
"✅ Q1 Goals: On Track (95%)"
포함할 정보:
- 핵심 숫자
- 추세 (증가/감소)
- 상황 (정상/주의/위험)
- 행동 요청 (필요 시)
Alerts (알림)
개념
Alert는 데이터가 특정 조건을 만족할 때만 알림을 보냅니다.
graph LR
A[Data Change] --> B{Condition Met?}
B -->|Yes| C[Send Alert]
B -->|No| D[No Action]
C --> E[Email/Slack]
Alert 생성
1
2
3
4
5
1. Question 열기 (단일 숫자 결과 권장)
2. ... menu > "Subscriptions and alerts"
3. "Get alerts when"
4. 조건 설정
5. Done
Alert 조건 타입
1. Goal Line Alert
1
2
3
4
5
6
7
Question: Daily Revenue
Alert condition:
☑ Goes above: $50,000
☑ Goes below: $30,000
→ 목표 달성 또는 위험 시 알림
2. Percentage Change
1
2
3
4
5
6
7
8
9
Question: Website Traffic
Alert condition:
☑ Increases by more than: 50%
☑ Decreases by more than: 20%
Compare to: Previous day
→ 급격한 변화 감지
3. Specific Value
1
2
3
4
5
6
Question: Error Count
Alert condition:
☑ Is greater than: 100
→ 임계값 초과 시 알림
4. Empty/Not Empty
1
2
3
4
5
6
Question: Failed Payments
Alert condition:
☑ Has any results
→ 발생 즉시 알림
Alert 예제
예제 1: 매출 급감 알림
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Name: Revenue Drop Alert
Question:
SELECT SUM(total) as today_revenue
FROM orders
WHERE DATE(created_at) = CURRENT_DATE
Alert when:
today_revenue < $30,000
OR today_revenue decreases by > 20% vs yesterday
Recipients:
- Sales VP
- Operations Manager
- #sales-alerts (Slack)
Check frequency: Every hour (9 AM - 6 PM)
Message:
"🚨 Revenue Alert!
Today's revenue: $
Target: $50,000
Action required: Investigate immediately"
예제 2: 재고 부족 알림
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Name: Low Stock Alert
Question:
SELECT COUNT(*) as low_stock_items
FROM products
WHERE stock_quantity < reorder_point
AND is_active = true
Alert when:
low_stock_items > 0
Recipients:
- Inventory Manager
- Purchasing team
Check frequency: Every 4 hours
Message:
"📦 Low Stock Alert
products below reorder point
[View Details] https://metabase.../question/456"
예제 3: 사이트 오류 급증
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Name: High Error Rate Alert
Question:
SELECT
(COUNT(*) FILTER (WHERE status = 'error') * 100.0 / COUNT(*)) as error_rate
FROM api_logs
WHERE created_at >= NOW() - INTERVAL '15 minutes'
Alert when:
error_rate > 5
Recipients:
- Engineering on-call
- #incidents (Slack)
Check frequency: Every 5 minutes
Priority: 🔴 Critical
Message:
"🚨 HIGH ERROR RATE DETECTED
Current: %
Normal: <1%
Last 15 minutes: requests
@oncall Please investigate ASAP"
예제 4: 신규 고객 없음
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Name: No New Signups Alert
Question:
SELECT COUNT(*) as signups_today
FROM customers
WHERE DATE(created_at) = CURRENT_DATE
Alert when:
signups_today = 0
AND CURRENT_TIME > '17:00'
Recipients:
- Growth team lead
- Marketing manager
Check frequency: Daily at 5 PM
Message:
"⚠️ No new signups today
Yesterday:
Weekly average:
Possible issues:
- Signup form broken?
- Payment gateway down?
- Marketing campaign paused?"
예제 5: 목표 달성 축하
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Name: Daily Goal Achievement
Question:
SELECT SUM(total) as revenue
FROM orders
WHERE DATE(created_at) = CURRENT_DATE
Alert when:
revenue >= $50,000
Recipients:
- Entire company
- #celebrations (Slack)
Check frequency: Every hour (after 12 PM)
Send once: Yes (첫 달성 시 1회만)
Message:
"🎉 GOAL ACHIEVED!
Daily target: $50,000
Current revenue: $
Great work, team! 💪"
Alert 빈도 설정
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
실시간 (Critical):
- Every 5 minutes
- 예: 사이트 다운, 결제 실패
높은 빈도 (High priority):
- Every 15-30 minutes
- 예: 오류율 증가, API 응답 지연
중간 빈도 (Medium priority):
- Every 1-4 hours
- 예: 재고 부족, 목표 대비 진행률
낮은 빈도 (Low priority):
- Daily
- 예: 일일 목표 미달, 주간 추세 변화
Slack 통합
Slack 연결 설정
1
2
3
4
5
1. Admin > Settings > Slack
2. "Add to Slack" 버튼 클릭
3. Slack workspace 선택
4. 권한 승인
5. 연결 완료
Slack 채널 전략
채널 구조 예시:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#sales-daily
- 일일 매출 리포트
- 주문 현황
- 빈도: 매일 오전 9시
#sales-alerts
- 매출 급감/급증
- 고액 주문
- 빈도: 실시간
#marketing-weekly
- 주간 캠페인 성과
- 트래픽 분석
- 빈도: 월요일 오전
#executive-summary
- 핵심 KPI
- 주간/월간 요약
- 빈도: 주 1회
#data-quality-alerts
- 데이터 이상 감지
- ETL 실패
- 빈도: 즉시
Slack 메시지 포맷팅
기본 메시지:
1
2
3
4
5
6
7
8
9
10
11
12
13
Daily Sales Report - 2025-03-20
📊 Key Metrics:
• Revenue: $45,234 (+12% vs yesterday)
• Orders: 187 (+8%)
• AOV: $241.87 (+4%)
Top Categories:
1. Electronics: $18,500
2. Clothing: $12,300
3. Books: $8,900
[View Dashboard] https://metabase.company.com/dashboard/123
Alert 메시지:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
🚨 REVENUE ALERT
Current: $28,450
Target: $50,000
Gap: -$21,550 (-43%)
Time: 3:00 PM
Status: 🔴 Critical
Actions:
• Check marketing campaigns
• Review traffic sources
• Analyze conversion funnel
@sales-team @marketing-team
성과 메시지:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
🎯 Weekly Goals Update
Week of Mar 18-24, 2025
✅ Revenue: 105% of target ($525K / $500K)
✅ New Customers: 110% of target (550 / 500)
⚠️ Conversion Rate: 92% of target (2.76% / 3.0%)
Action items:
• Continue current marketing strategy
• Investigate conversion rate drop
• A/B test checkout flow improvements
[Detailed Report] https://...
이메일 통합
이메일 설정
1
2
3
4
5
6
7
8
9
10
11
Admin > Settings > Email
SMTP settings:
Host: smtp.gmail.com
Port: 587
Security: TLS
Username: metabase@company.com
Password: ••••••••
From address: "Metabase Reports <metabase@company.com>"
Test connection: Send test email ✅
이메일 디자인 Best Practices
제목 라인:
1
2
3
4
5
6
7
8
9
10
11
12
✅ 좋은 예:
"[Daily] Sales Report: $45K (+12%)"
"[Alert] Low Stock: 23 items"
"[Weekly] Marketing Performance Summary"
❌ 나쁜 예:
"Report"
"Dashboard update"
"FYI"
패턴:
[Type] Topic: Key metric (Change)
본문 구조:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<!-- Header -->
<h1>Daily Sales Report</h1>
<p>March 20, 2025</p>
<!-- Summary -->
<div style="background: #f0f0f0; padding: 20px;">
<h2>📊 Key Highlights</h2>
<ul>
<li>Revenue up 12% to $45,234</li>
<li>187 orders (best day this month)</li>
<li>Electronics leading category</li>
</ul>
</div>
<!-- Dashboard Image -->
<img src="dashboard.png" alt="Sales Dashboard" />
<!-- Action Items -->
<h2>💡 Insights</h2>
<ul>
<li>Mobile traffic driving 65% of sales</li>
<li>Average order value increasing</li>
<li>Consider flash sale for slow-moving items</li>
</ul>
<!-- Footer -->
<p>
<a href="https://metabase...">View Live Dashboard</a> |
<a href="https://metabase.../unsubscribe">Unsubscribe</a>
</p>
첨부 파일 전략
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Executive 리포트:
- PDF (professional)
- High resolution
- Company branding
Team 리포트:
- PNG (email에 바로 표시)
- Medium resolution
- Simple layout
Data export:
- CSV (raw data)
- Excel (formatted)
- 최대 10MB 제한
Alert Fatigue 관리
알림 피로도란?
너무 많은 알림으로 인해 사용자가 알림을 무시하게 되는 현상
graph LR
A[Too Many Alerts] --> B[Alert Fatigue]
B --> C[Ignore Alerts]
C --> D[Miss Critical Issues]
style D fill:#ffcccc
예방 전략
1. 알림 우선순위 정의
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
🔴 Critical (즉시 대응):
- 사이트 다운
- 결제 실패 급증
- 보안 위협
🟠 High (1시간 내):
- 매출 급감 (>20%)
- 재고 부족
- API 오류율 증가
🟡 Medium (당일 대응):
- 목표 대비 지연
- 일일 지표 이상
🟢 Low (참고):
- 트렌드 변화
- 주간 요약
2. 알림 통합
1
2
3
4
5
6
7
8
9
10
11
12
❌ 나쁜 예:
- 10:00 AM: Revenue alert
- 10:05 AM: Orders alert
- 10:10 AM: Traffic alert
- 10:15 AM: Conversion alert
✅ 좋은 예:
- 10:00 AM: Morning Business Summary
• Revenue: $X
• Orders: Y
• Traffic: Z
• Conversion: W%
3. 조건 최적화
1
2
3
4
5
6
7
8
❌ 너무 민감:
Alert when: revenue decreases by > 1%
→ 하루에 수십 번 알림
✅ 적절한 임계값:
Alert when: revenue decreases by > 20%
AND below $30,000
→ 진짜 문제만 알림
4. 알림 검토 및 정리
1
2
3
4
5
6
7
8
9
10
11
월간 리뷰:
- 발생 횟수 확인
- 실제 대응률 분석
- 불필요한 알림 제거
질문:
- 이 알림을 받은 후 행동했는가?
- 같은 정보를 다른 곳에서 받는가?
- 빈도가 적절한가?
→ No인 알림은 삭제 고려
5. Quiet Hours 설정
1
2
3
4
5
6
7
8
9
근무 시간만:
- 9 AM - 6 PM
- 월-금
- 공휴일 제외
긴급 알림은 예외:
- 사이트 다운
- 보안 이슈
→ 24/7 알림
고급 자동화 패턴
1. 조건부 리포트
예제: 성과에 따라 다른 리포트
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Dashboard: Sales Performance
Subscription 1: "Over-performing Alert"
Condition: Revenue > 120% of target
Recipients: CEO, Sales team
Message: "🎉 Exceeding targets!"
Subscription 2: "Under-performing Alert"
Condition: Revenue < 80% of target
Recipients: Sales VP, Operations
Message: "⚠️ Action needed"
Subscription 3: "Normal Report"
Condition: Revenue between 80-120% of target
Recipients: Sales team
Message: "📊 Daily update"
2. 시간대별 알림
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Morning Brief (8 AM):
- Yesterday's summary
- Today's forecast
Midday Check (12 PM):
- Morning performance
- Afternoon goals
End of Day (6 PM):
- Daily results
- Tomorrow's prep
Weekly Planning (Monday 9 AM):
- Last week review
- This week goals
3. 계층별 리포트
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
C-Level:
- Weekly summary
- High-level KPIs
- Strategic insights
Directors:
- Daily summaries
- Department metrics
- Trend analysis
Managers:
- Real-time alerts
- Operational metrics
- Action items
Team members:
- Individual performance
- Task-specific data
- On-demand access
4. 이벤트 기반 알림
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Customer Milestone:
IF customer.lifetime_value > $10,000
THEN notify account_manager
MESSAGE: "VIP customer - special attention needed"
Inventory Reorder:
IF product.stock < product.reorder_point
THEN notify purchasing_team
MESSAGE: "Auto-create purchase order"
Campaign End:
IF campaign.end_date = TODAY
THEN notify marketing_team
MESSAGE: "Performance summary + renewal decision"
실전 연습 문제
연습 1: 기본 Subscription (초급)
과제: 일일 매출 리포트 설정
요구사항:
- 매일 오전 9시 발송
- Sales 팀 및 Slack #sales 채널
- PDF 및 PNG 포맷
해답 보기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Dashboard: "Daily Sales Overview"
Subscription setup:
Name: Daily Sales Report
Recipients:
Email: sales-team@company.com
Slack: #sales
Schedule:
Frequency: Daily
Time: 9:00 AM (Asia/Seoul)
Days: Monday - Friday
Format:
Email: PDF attachment
Slack: PNG inline
Message:
"📊 Daily Sales Report -
Yesterday's performance:
• Revenue:
• Orders:
• AOV:
[View Dashboard]"
Filters:
Date range: Yesterday
연습 2: Alert 설정 (중급)
과제: 매출 급감 알림 시스템
조건:
- 전일 대비 20% 이상 감소
- 또는 $30,000 미만
- 영업시간 중 매시간 체크
해답 보기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
Question: "Current Day Revenue"
SQL:
SELECT
SUM(total) as today_revenue,
(SELECT SUM(total) FROM orders
WHERE DATE(created_at) = CURRENT_DATE - 1) as yesterday_revenue
FROM orders
WHERE DATE(created_at) = CURRENT_DATE
Alert setup:
Name: Revenue Drop Alert
Condition:
today_revenue < 30000
OR (today_revenue / yesterday_revenue) < 0.8
Recipients:
- VP Sales
- Operations Manager
- #sales-alerts (Slack)
Check frequency:
Every 1 hour
Between: 9 AM - 6 PM
Days: Monday - Friday
Priority: 🔴 High
Message:
"🚨 REVENUE ALERT
Current day: $
Yesterday: $
Change: %
Target: $50,000
Remaining: $
Action: Investigate immediately
Possible causes:
• Traffic drop
• Conversion issue
• Technical problem
@sales-vp @ops-manager"
연습 3: 복합 자동화 (고급)
과제: 주간 성과 리포트 시스템
요구사항:
- 매주 월요일 발송
- 성과에 따라 다른 메시지
- 부서별 맞춤 리포트
해답 보기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
Dashboard: "Weekly Performance Review"
Subscription 1: "Executive Summary"
Recipients: C-level
Schedule: Monday 8:00 AM
Format: PDF (branded)
Content:
- High-level KPIs
- Week-over-week trends
- Strategic recommendations
Subscription 2: "Sales Team Report"
Recipients: Sales department
Schedule: Monday 9:00 AM
Format: Slack #sales-team
Content:
- Detailed sales metrics
- Individual performance
- This week's targets
Subscription 3: "Marketing Report"
Recipients: Marketing department
Schedule: Monday 9:30 AM
Format: Email + CSV data
Content:
- Campaign performance
- Traffic analysis
- ROI by channel
Alert: "Target Achievement"
Condition: weekly_revenue >= target
Recipients: All company
Slack: #celebrations
Message: "🎉 Weekly target achieved!"
Alert: "Performance Warning"
Condition: weekly_revenue < 70% of target
Recipients: Leadership team
Slack: #leadership-alerts
Message: "⚠️ Week tracking below target - action needed"
Metrics included:
- Revenue (actual vs target)
- Customer acquisition
- Conversion rates
- Top performers
- Areas for improvement
Custom messages based on performance:
IF revenue > 110% target:
"🚀 Outstanding week! Share success story"
ELSIF revenue > 90% target:
"✅ On track. Keep momentum"
ELSE:
"⚠️ Below target. Recovery plan needed"
다음 단계
자동화와 알림을 마스터했습니다. 다음 포스트에서는:
- 권한과 보안: Collections, Groups, Row-level security
- 데이터 거버넌스: 접근 제어 및 감사
- 팀 협업: 효율적인 조직 구조
요약
자동화 도구 비교
| 기능 | Subscriptions | Alerts |
|---|---|---|
| 목적 | 정기 리포트 | 이상 감지 |
| 발송 조건 | 시간 기반 | 조건 기반 |
| 빈도 | 낮음-중간 | 높음 |
| 대상 | 팀 전체 | 담당자 |
| 형식 | Dashboard/Question | 간단한 메시지 |
자동화 체크리스트
설정 전:
- 명확한 목적 정의
- 적절한 빈도 결정
- 올바른 수신자 선택
- 메시지 내용 계획
설정 중:
- 의미 있는 이름 부여
- 조건 정확히 설정
- 테스트 발송 확인
- 문서화
운영 중:
- 정기적 리뷰 (월 1회)
- 발생 빈도 모니터링
- 대응률 추적
- Alert Fatigue 관리
다음 포스트에서는 팀 단위로 Metabase를 안전하게 운영하는 방법을 배웁니다!
📚 시리즈 전체 목차
🚀 기초편 (1-5화)
💪 활용편 (6-10화)
- 필터와 파라미터
- SQL 네이티브 쿼리
- 데이터 모델링
- [자동화와 알림] (현재 글)
- 권한과 보안