---
id: pattern-event-bus
title: "Event Bus Pattern"
category: "Pattern_Desktop"
status: "draft"
verification_status: "applied"
canonical_id: ""
aliases: ["event bus", "이벤트 버스", "observer", "pub-sub", "EventEmitter", "발행 구독"]
duplicate_of: ""
source_trust_level: "A"
confidence_score: 0.88
created_at: 2026-06-13
updated_at: 2026-06-13
review_reason: ""
merge_history: []
tags: ["pattern", "desktop", "event-bus", "pub-sub", "decoupling", "platform-independent"]
raw_sources: ["일반 소프트웨어 공학 지식", "AstraAI/src/core/events.ts (적용 예)"]
applied_in: ["AstraAI"]
github_commit: ""
---

# [[Event Bus Pattern]]

## 🎯 한 줄 통찰 (One-line insight)
Event Bus(발행-구독)는 "발신자와 수신자가 서로를 모른 채 이벤트로 소통" 해 모듈 결합을 낮추는 패턴 — 단, 흐름이 *암묵적* 이 되어 추적이 어려워지므로 이벤트 종류와 계약을 명시해야 한다.

## 🧠 핵심 개념 (Core concepts)
1. **발행/구독:** emit(event) / on(event, handler).
2. **느슨한 결합:** 발신자는 누가 듣는지 모름.
3. **이벤트 타입 명시:** enum/상수로 이벤트 카탈로그.
4. **리스너 수명:** 등록 해제(누수 방지), 최대 리스너 한도.
5. **동기 vs 비동기:** 핸들러 예외가 발신자에 새지 않게.

## 📖 세부 내용 (Details · 패턴 명세)
- **언제 쓰나:** 한 사건에 여러 관심사가 반응(로깅·UI·기록), 모듈을 직접 의존시키고 싶지 않을 때.
- **사용 조건:** 이벤트 카탈로그 정의; 리스너 수명 관리.
- **장점:** 결합도↓, 확장 용이(구독 추가), 관심사 분리.
- **단점:** 흐름 암묵적(추적 난해), 디버깅 어려움, 이벤트 폭발, 순서 보장 약함.
- **대안:** 직접 호출(흐름 명확, 결합↑), 콜백 주입, 상태 구독(reactive).
- **실패 사례:** 리스너 해제 누락→누수·중복 실행; 이벤트 이름 오타(문자열); 핸들러 예외가 발신자 중단; "누가 이 이벤트를 듣나" 추적 불가; 이벤트 순환.

## 💻 코드 패턴 (Code patterns)
```text
enum E { TASK_STARTED='task:started', ERROR='error:occurred' }   # 카탈로그
bus.emit(E.TASK_STARTED, payload)         # 발신자: 누가 듣는지 모름
bus.on(E.TASK_STARTED, h); // ... bus.off(E.TASK_STARTED, h)  # 해제로 누수 방지
bus.setMaxListeners(20)                    # 폭발 방지
```
적용 예: AstraAI 의 `agentEvents`(싱글톤 EventEmitter)와 `AgentEventTypes` enum — 트랜잭션 commit/rollback, task 시작/완료 등을 발행해 모듈 결합을 낮춤 [S2].

## ⚖️ 모순 및 업데이트 (Contradictions & updates)
이벤트 버스는 결합을 낮추지만 *흐름을 숨긴다* — 핵심 제어 흐름은 명시 호출이 낫고, 부가/횡단 반응(로깅·기록)에 이벤트가 적합.

## 🛠️ 적용 사례 (Applied in summary)
AstraAI agentEvents(Observer 허브).

## 🔗 지식 그래프 (Knowledge Graph)
- **상위/루트:** [[패턴 카탈로그 인덱스]]
- **관련 개념:** [[Command Pattern]], [[IPC Pattern]], [[Architecture Separation Pattern]], [[데스크탑 앱 개발 가이드]]
- **참조 맥락:** 작은 모델이 모듈 간 느슨한 통신을 설계할 때 참조.

## 📚 출처 (Sources)
- [S1] 일반 pub-sub/observer 지식
- [S2] AstraAI/src/core/events.ts — agentEvents/AgentEventTypes

## 📝 변경 이력 (Change history)
- 2026-06-13: 프로젝트 독립 패턴 카드 작성.
