왜 마케팅 자동화에 Cloud Scheduler가 필요한가
마케팅팀의 아침은 보통 이렇게 시작됩니다:
- GA4 대시보드 열기 → 어제 트래픽 확인
- 네이버 광고 관리자 열기 → 소진 예산과 CPC 확인
- 카카오 모먼트 열기 → 캠페인 성과 확인
- 메타 광고 관리자 열기 → ROAS 확인
- 엑셀에 데이터 취합 → 일간 리포트 작성
매일 1-2시간. 이 반복 작업에 사라지는 시간은 연간 300시간 이상입니다.
Google Cloud Scheduler + Flask 조합은 이 모든 과정을 자동화합니다. 매일 아침 출근하면 슬랙에 완성된 리포트가 올라와 있고, 이상이 감지되면 즉시 알림이 옵니다.
아키텍처 개요
Google Cloud Scheduler (cron 스케줄)
│
│ HTTP POST 요청 (매일 09:00 KST)
▼
Cloud Run (Flask App)
│
┌────┼────┬────────┬──────────┐
▼ ▼ ▼ ▼ ▼
네이버 카카오 메타 구글 Ads GA4
API API API API BigQuery
│ │ │ │ │
└────┴─────┴───────┴──────────┘
│
데이터 통합 + AI 분석
│
┌───────┴───────┐
▼ ▼
BigQuery Slack/이메일
(데이터 저장) (리포트 발송)
구성 요소별 역할
| 구성 요소 | 역할 | 비용 (월 기준) |
|---|---|---|
| Cloud Scheduler | 지정 시간에 HTTP 요청 발생 | 무료 (3개 job까지) |
| Cloud Run | Flask 앱 실행 (요청 시에만) | ~$3-10 |
| BigQuery | 데이터 저장 + 분석 | 무료 (10GB까지) |
| Secret Manager | API 키 안전 보관 | ~$0.06/키/월 |
| 월 총 비용 | $5-15 |
단계별 구축 가이드
Step 1: Flask 앱 작성
# app.py
from flask import Flask, request, jsonify
from datetime import datetime, timedelta
import pandas as pd
from google.cloud import bigquery
import requests
import json
app = Flask(__name__)
# ====== 데이터 수집 함수들 ======
def fetch_naver_ads(date_str: str) -> pd.DataFrame:
"""네이버 검색광고 API에서 전일 데이터 수집"""
headers = {
'X-API-KEY': os.environ['NAVER_ADS_API_KEY'],
'X-Customer': os.environ['NAVER_ADS_CUSTOMER_ID'],
}
# 캠페인별 성과 데이터 조회
response = requests.get(
'https://api.naver.com/stats',
headers=headers,
params={'since': date_str, 'until': date_str}
)
df = pd.DataFrame(response.json()['data'])
df['platform'] = 'naver'
return df
def fetch_kakao_moment(date_str: str) -> pd.DataFrame:
"""카카오 모먼트 API에서 전일 데이터 수집"""
# ... 유사한 구조
pass
def fetch_meta_ads(date_str: str) -> pd.DataFrame:
"""메타 광고 API에서 전일 데이터 수집"""
# ... 유사한 구조
pass
def fetch_google_ads(date_str: str) -> pd.DataFrame:
"""구글 Ads API에서 전일 데이터 수집"""
# ... 유사한 구조
pass
# ====== AI 분석 함수 ======
def generate_ai_analysis(unified_df: pd.DataFrame) -> dict:
"""통합 데이터에 대한 AI 분석 리포트 생성"""
from openai import OpenAI
client = OpenAI()
summary = unified_df.groupby('platform').agg({
'impressions': 'sum',
'clicks': 'sum',
'cost': 'sum',
'conversions': 'sum',
'revenue': 'sum',
}).to_string()
response = client.chat.completions.create(
model="gpt-4o",
messages=[{
"role": "system",
"content": """마케팅 데이터 분석 전문가입니다.
다음 규칙을 따르세요:
1. 전일 대비 변화가 ±20% 이상인 지표를 강조
2. ROAS가 가장 높은/낮은 채널 식별
3. 구체적인 액션아이템 3개 제안
4. 한국어로 작성"""
}, {
"role": "user",
"content": f"전일 마케팅 성과 데이터:\n{summary}"
}],
temperature=0.3,
)
return {
"narrative": response.choices[0].message.content,
"data_summary": summary,
"generated_at": datetime.now().isoformat(),
}
# ====== 메인 엔드포인트 ======
@app.route('/api/daily-report', methods=['POST'])
def daily_report():
"""Cloud Scheduler가 매일 호출하는 엔드포인트"""
yesterday = (datetime.now() - timedelta(days=1)).strftime('%Y-%m-%d')
try:
# 1. 전 채널 데이터 수집
naver = fetch_naver_ads(yesterday)
kakao = fetch_kakao_moment(yesterday)
meta = fetch_meta_ads(yesterday)
google = fetch_google_ads(yesterday)
# 2. 데이터 통합
unified = pd.concat([naver, kakao, meta, google], ignore_index=True)
# 3. AI 분석
analysis = generate_ai_analysis(unified)
# 4. BigQuery 저장
save_to_bigquery(unified, analysis)
# 5. 슬랙 리포트 발송
send_slack_report(analysis)
# 6. 이상 탐지 (비용 급증, 전환율 급감 등)
alerts = detect_anomalies(unified)
if alerts:
send_urgent_alert(alerts)
return jsonify({"status": "success", "date": yesterday})
except Exception as e:
send_error_alert(str(e))
return jsonify({"status": "error", "message": str(e)}), 500
Step 2: Docker 컨테이너화
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["gunicorn", "--bind", "0.0.0.0:8080", "app:app"]
# requirements.txt
flask==3.1.0
gunicorn==23.0.0
pandas==2.2.0
google-cloud-bigquery==3.27.0
google-cloud-secret-manager==2.21.0
openai==1.58.0
requests==2.32.0
Step 3: Cloud Run 배포
# 프로젝트 설정
gcloud config set project YOUR_PROJECT_ID
# Docker 이미지 빌드 & 푸시
gcloud builds submit --tag gcr.io/YOUR_PROJECT_ID/marketing-agent
# Cloud Run 배포
gcloud run deploy marketing-agent \
--image gcr.io/YOUR_PROJECT_ID/marketing-agent \
--platform managed \
--region asia-northeast3 \
--memory 1Gi \
--timeout 300 \
--no-allow-unauthenticated
Step 4: Cloud Scheduler 설정
# 일간 리포트: 매일 오전 9시 (한국 시간)
gcloud scheduler jobs create http daily-marketing-report \
--schedule="0 9 * * *" \
--time-zone="Asia/Seoul" \
--uri="https://marketing-agent-xxxxx.run.app/api/daily-report" \
--http-method=POST \
--oidc-service-account-email=scheduler@YOUR_PROJECT.iam.gserviceaccount.com
# 주간 리포트: 매주 월요일 오전 10시
gcloud scheduler jobs create http weekly-marketing-report \
--schedule="0 10 * * 1" \
--time-zone="Asia/Seoul" \
--uri="https://marketing-agent-xxxxx.run.app/api/weekly-report" \
--http-method=POST \
--oidc-service-account-email=scheduler@YOUR_PROJECT.iam.gserviceaccount.com
# 이상 탐지: 매시간
gcloud scheduler jobs create http hourly-anomaly-check \
--schedule="0 * * * *" \
--time-zone="Asia/Seoul" \
--uri="https://marketing-agent-xxxxx.run.app/api/anomaly-check" \
--http-method=POST \
--oidc-service-account-email=scheduler@YOUR_PROJECT.iam.gserviceaccount.com
자동화 시나리오별 구현 예시
시나리오 1: 일간 성과 리포트
트리거: 매일 오전 9:00 실행 내용:
- 4개 광고 플랫폼 + GA4 데이터 수집
- 채널별 ROAS, CPA, CTR 계산
- AI가 전일 대비 변화 분석 + 인사이트 생성
- 슬랙에 포맷된 리포트 발송
- BigQuery에 히스토리 저장
시나리오 2: 예산 소진 모니터링
트리거: 매 4시간 실행 내용:
- 각 캠페인의 일일 예산 대비 소진율 확인
- 소진율이 기대치의 ±30% 벗어나면 알림
- 과소진 캠페인은 AI가 원인 분석 (CPC 급등? 경쟁 심화?)
- 예산 재배분 제안
시나리오 3: 주간 경쟁사 분석
트리거: 매주 월요일 오전 8:00 실행 내용:
- 주요 키워드 순위 변동 추적
- 경쟁사 광고 노출 현황 수집
- AI가 경쟁 환경 변화 분석
- 대응 전략 제안
시나리오 4: 월간 전략 리포트
트리거: 매월 1일 오전 10:00 실행 내용:
- 전월 전체 데이터 종합 분석
- 채널별 ROI 순위 및 추세
- AI가 다음 달 예산 배분 제안
- 크리에이티브 성과 분석 + 갱신 제안
- PDF 리포트 생성 → 이메일 발송
비용 비교: Cloud Scheduler vs 대안
월 기준 비용 (일간 리포트 기준)
| 솔루션 | 월 비용 | 비고 |
|---|---|---|
| Cloud Scheduler + Cloud Run | $5-15 | 실행 시에만 과금 |
| N8N Cloud (Pro) | $50/월~ | 실행 건수 제한 있음 |
| Make (Pro) | $29/월~ | 오퍼레이션 수 제한 |
| Zapier (Professional) | $49.99/월~ | 태스크 수 제한 |
| AWS Lambda + EventBridge | $3-10 | 유사 비용, 세팅 더 복잡 |
| Cron + 상시 서버 | $30-100 | 24/7 서버 유지 비용 |
핵심 차이: Cloud Run은 실행될 때만 비용이 발생합니다. 하루에 5분만 동작하는 리포트 에이전트라면, 나머지 23시간 55분은 비용 $0입니다.
하이프마크가 이 스택을 쓰는 이유
하이프마크의 모든 마케팅 자동화 에이전트는 Google Cloud Scheduler + Flask + Cloud Run 스택으로 운영됩니다.
이 아키텍처의 장점:
- 안정성 — Google Cloud의 SLA 99.95% 보장
- 확장성 — 고객이 10명이든 1,000명이든 동일한 구조
- 비용 — 고객당 추가 인프라 비용이 거의 없음
- 보안 — 고객 데이터가 Google Cloud 내에서만 처리
- 모니터링 — Cloud Monitoring으로 실행 상태 실시간 추적
그리고 모든 에이전트의 실행 결과는 하이프마크.AI 대시보드에 통합되어, 고객이 직접 자동화 성과를 확인하고 인사이트를 활용할 수 있습니다.
시작하기
자체적으로 구축하고 싶다면 이 글의 코드를 참고하세요. 전문 팀의 도움이 필요하다면 하이프마크가 기획부터 배포, 운영까지 전 과정을 지원합니다.