GitHub Actions + Temporal + Slack + Datadog으
🎯 왜 복잡한 비동기 배치 플로우가 문제인가?
마이크로서비스 기반 아키텍처에서는 다음과 같은 복잡한 장기 작업이 자주 등장합니다:
• 사후 데이터 정산 (예: 이커머스 정산, 포인트 소급, 거래 내역 정리)
• 외부 API polling or crawling (예: 외부 ERP 연동)
• 비동기 ML 학습 파이프라인, 대용량 PDF 병합·압축
이러한 작업은 다음과 같은 한계를 갖습니다:
기존 방식 한계점
GitHub Actions 단독 사용 6시간 타임아웃, 스텝 간 상태 공유 어려움
CronJob + DB poll 상태 추적 어려움, 장애 발생 시 복구 어려움
Kafka 기반 처리 장애 복구 및 로깅 체계 직접 구현 필요
⸻
🧠 해결책: Temporal 기반 분산 워크플로우 + GitHub Actions + Datadog + Slack 알림
Temporal이란?
Temporal은 Netflix에서 시작된 분산 워크플로우 오케스트레이션 프레임워크입니다.
특징:
• 비동기, 장기 실행, 실패 복구 자동화
• step 별 상태 관리, 재시도, 롤백, 타임아웃 설정 가능
• 고가용 아키텍처 기반: 실패 시에도 중단 없이 복구
• 다양한 언어 SDK 지원: Go, TypeScript, Java 등
⸻
📐 아키텍처 구성
GitHub Actions (trigger) ─┐
▼
Temporal Workflow
┌──────────────┴──────────────┐
Step 1: API Fetch Step 2: 데이터 변환
Step 3: 파일 병합 Step 4: Slack + Datadog 리포팅
└─────────────────────────────┘
↔ Datadog Trace (step별 duration, failure 로그)
↔ Slack 알림 (완료/실패 요약 리포트)
⸻
⚙️ GitHub Actions → Temporal Trigger 예시
jobs:
trigger-workflow:
runs-on: ubuntu-latest
steps:
- name: Trigger Temporal Batch Job
run: |
curl -X POST https://temporal.mycompany.com/api/v1/workflows/start \
-H "Authorization: Bearer ${{ secrets.TEMPORAL_API_KEY }}" \
-d '{"workflowType": "BatchReconcile", "input": {"date": "2024-05-01"}}'
⸻
🧬 Temporal 워크플로우 예시 (TypeScript SDK)
import { proxyActivities, defineSignal } from '@temporalio/workflow';
const { fetchAPI, mergeFiles, postToSlack } = proxyActivities({...});
export async function BatchReconcileWorkflow(date: string) {
const data = await fetchAPI(date);
const merged = await mergeFiles(data);
await postToSlack(`✅ Batch complete for ${date}`);
}
모든 step은 자동 재시도, 실패 시 resume 가능
Slack 메시지 또는 Datadog custom metric으로 각 step 추적 가능
⸻
📊 Datadog 통합
• Temporal SDK 내에서 datadog-metrics 라이브러리 호출
• 워크플로우 실행 시간, 실패율, 대기 시간 수집
• GitHub Actions에서 직접 dd-trace 연동 가능
⸻
🔔 Slack 리포팅 구조
await postToSlack(`
📦 *Batch 완료*
• 날짜: ${date}
• 처리건수: ${merged.count}
• Duration: ${elapsed} sec
`);
또는 GitHub Actions 실패 시 아래처럼 Alert 전송
- name: Slack 알림
if: failure()
uses: rtCamp/action-slack-notify@v2
with:
status: failure
message: '❌ GitHub Workflow Failed - Batch Job'
⸻
🧩 결론: 단기 CI/CD → 장기 운영 자동화의 확장
이 구조는 단순한 CI/CD를 넘어 운영·정산·데이터 파이프라인까지 통제 가능한 형태로 확장합니다.
이전 방식 전환 후
복잡한 배치 파이썬 스크립트 워크플로우 오케스트레이션
일회성 스크립트 실행 GitHub Actions 트리거화
장애 시 수동 확인 자동 retry + 알림 + 트레이싱
Temporal은 단순한 워크플로우 엔진이 아닌
“장기 상태 보존 + 복구 + 확장”이 가능한 운영 자동화 플랫폼입니다.
카테고리 없음