안녕하세요! Argo 생태계의 이벤트 기반 자동화 핵심, Argo Events에 대해 아주 깊이 있게 다뤄보겠습니다.
이 포스팅은 단순한 개념 설명을 넘어, 이벤트가 발생해서 실제 워크플로우가 실행되기까지의 전 과정을 설계하고 다수의 조건을 제어하는 고급 테크닉까지 상세히 담고 있습니다. 양이 많으니 집중해서 따라와 주세요! 🚀
현대적인 클라우드 네이티브 환경에서는 특정 사건(GitHub 푸시, S3 파일 업로드, 메시지 큐 수신 등)에 반응하여 자동으로 작업을 수행하는 이벤트 기반 아키텍처(Event-Driven Architecture)가 필수적입니다. Argo 프로젝트에서는 이를 Argo Events가 담당합니다.
오늘은 이벤트의 흐름을 결정하는 핵심 리소스들과 그 정교한 설정법을 파헤쳐 봅니다.

1. 🌊 워크플로우 트리거 순서: 이벤트의 여정
Argo Events에서 이벤트가 전달되는 흐름은 크게 3단계(또는 4단계)로 나뉩니다.
- EventSource: 외부의 이벤트를 감지합니다. (예: Webhook, Kafka, S3, SNS 등)
- EventBus: EventSource와 Sensor 사이의 운송 통로 역할을 합니다. NATS Jetstream 같은 메시징 시스템을 기반으로 동작하며, 이벤트의 안정적인 전달을 보장합니다.
- Sensor: EventBus를 통해 전달된 이벤트를 필터링하고 분석합니다. "조건이 맞나?"를 확인하는 두뇌 역할을 합니다.
- Trigger: 모든 조건이 충족되었을 때 실제로 수행할 액션을 정의합니다. (예: Argo Workflow 실행, Lambda 호출 등)
2. 🚌 EventBus: 이벤트의 고속도로
EventBus는 Argo Events 인프라의 중추입니다. 과거에는 Sensor와 EventSource가 직접 통신했지만, 이제는 EventBus를 통해 결합도를 낮추고 안정성을 높였습니다.
- 리소스 특징: * nats 옵션을 주로 사용하며, 내부적으로 고성능 메시지 큐를 생성합니다.
- 이벤트의 유실을 방지하고 순서를 보장합니다.
apiVersion: argoproj.io/v1alpha1
kind: EventBus
metadata:
name: default
spec:
nats:
native:
# 메시지 복제본 수를 설정하여 고가용성 보장
replicas: 3
# 데이터 보관을 위한 퍼시스턴트 볼륨 설정
auth: token
3. 🧠 Sensor: 정교한 필터링과 논리 제어
Sensor는 가장 복잡하고 중요한 리소스입니다. 단순히 이벤트를 받는 것을 넘어, 여러 이벤트를 조합하거나 특정 조건이 맞을 때만 트리거를 실행하도록 설계할 수 있습니다.
🔍 Filters와 expr (Expression) 사용하기
단순히 "이벤트가 왔다"는 것만으로 부족할 때가 있습니다. "GitHub 푸시 중에서 main 브랜치일 때만" 혹은 "JSON 데이터의 특정 값이 100 이상일 때만" 실행하고 싶을 때 filters와 expr을 사용합니다.
- data: 페이로드의 특정 필드 값 비교.
- expr: 복잡한 논리식(비교, 연산) 처리.
⛓️ 다수의 조건 설정 (Dependencies)
여러 개의 EventSource로부터 이벤트가 모두 모여야 트리거를 실행하고 싶을 때 dependencies를 활용합니다.
4. 🛠️ 실무 코드 예제: 다중 조건 및 필터링 Sensor
아래 코드는 두 가지 이벤트(Webhook A와 Webhook B)가 모두 발생하고, 특정 조건이 맞을 때만 Argo Workflow를 실행하는 고급 설정 예시입니다.
apiVersion: argoproj.io/v1alpha1
kind: Sensor
metadata:
name: complex-sensor
spec:
template:
serviceAccountName: argo-events-sa
# 1. 이벤트 의존성 정의 (어디서 오는 이벤트를 기다릴 것인가)
dependencies:
- name: dep-webhook-a
eventSourceName: webhook-source
eventName: endpoint-a
# 필터 설정: 데이터 내용 검증
filters:
data:
- path: "body.status"
type: "string"
value:
- "confirmed" # status가 confirmed인 경우만 통과
- name: dep-webhook-b
eventSourceName: webhook-source
eventName: endpoint-b
# 2. 논리 조건 (expr): 여러 의존성의 조합 결정
# dep-webhook-a가 성공하거나, dep-webhook-b가 성공할 때 실행하도록 설정 가능
circuit: "dep-webhook-a && dep-webhook-b" # AND 조건: 둘 다 만족해야 함
# 3. 트리거 정의 (무엇을 할 것인가)
triggers:
- template:
name: workflow-trigger
k8s:
operation: create
source:
resource:
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: event-driven-job-
spec:
entrypoint: main
templates:
- name: main
container:
image: alpine:latest
command: [sh, -c]
# 이벤트 데이터를 워크플로우 파라미터로 전달하기
args: ["echo 'Event received from A and B!'"]
# 4. Parameters: 이벤트 데이터를 리소스 정의에 주입
parameters:
- src:
dependencyName: dep-webhook-a
dataKey: body.user_id
dest: spec.arguments.parameters.0.value # 워크플로우의 특정 위치로 전달
5. 💡 핵심 리소스 특징 정리
- EventSource (입력): * 특징: 다양한 프로토콜(HTTP, MQTT, Calendar 등) 지원.
- 팁: Webhook 사용 시 Secret을 통해 보안 인증을 반드시 설정하세요.
- Sensor (판단): * 특징: 가장 연산 집약적인 리소스.
- 팁: filters를 잘 활용하면 불필요한 워크플로우 실행을 줄여 비용을 절감할 수 있습니다.
- Trigger (출력): * 특징: Kubernetes 리소스 생성 외에도 HTTP 호출, Kafka 메시지 전송, Slack 알림 등이 가능합니다.
- 팁: k8s 트리거 사용 시 해당 작업을 수행할 수 있는 적절한 RBAC(ServiceAccount) 권한 부여가 필수입니다.
📝 마치며
Argo Events는 단순한 자동화를 넘어 인텔리전트한 파이프라인을 구축하게 해줍니다. 오늘 배운 EventBus의 안정성, Sensor의 정교한 expr 필터링, 그리고 다중 dependencies 설정을 활용하면 어떤 복잡한 비즈니스 로직도 쿠버네티스 위에서 구현할 수 있습니다. 🏆
처음에는 하나의 Webhook으로 시작해 보세요. 점차 여러 조건을 조합해 나가며 시스템을 견고하게 만드는 재미를 느끼실 수 있을 겁니다!
'클라우드 > Argo' 카테고리의 다른 글
| 🐙 쿠버네티스 자동화의 정점: Argo Project 4종 세트 완벽 정리 (0) | 2026.01.03 |
|---|---|
| 🛠 ArgoCD ApplicationSet Generator 완벽 가이드: 자동화의 끝판왕 (0) | 2026.01.03 |
| 🏗️ Argo 마스터 가이드: 템플릿 4종 완벽 분석 (ClusterAnalysis부터 ContainerSet까지) (0) | 2026.01.02 |
| 🚀 ArgoCD 마스터 가이드: Hard Refresh의 비밀과 캐시 메커니즘 완벽 분석 (0) | 2026.01.02 |
| ⚙️ Argo CD 마스터 가이드: syncPolicy와 syncOptions 심층 분석 (0) | 2026.01.02 |