이벤트 버스 패턴(Event Bus)은 시스템의 구성 요소 간 통신을 이벤트의 게시 및 수신을 통해 구현할 수 있도록 하는 아키텍처 접근 방식입니다. 이때 구성 요소들은 서로를 직접 알지 못하고, "게시자-구독자" 원칙에 따라 느슨하게 연결된 상호 작용이 이루어집니다.
사용: 이 패턴은 많은 모듈 간에 확장 가능하고 확장 가능한 상호 작용을 보장해야 할 때 유용합니다. 예를 들어, 복잡한 웹 애플리케이션, 데스크톱 시스템, 마이크로서비스 플랫폼에서 사용됩니다.
Python 코드 예제(pyee 라이브러리 사용):
from pyee import EventEmitter bus = EventEmitter() def on_user_created(user): print(f"사용자가 생성되었습니다: {user}") bus.on('user_created', on_user_created) bus.emit('user_created', {"id": 1, "name": "이반"})
주요 특징:
이벤트 버스의 모든 이벤트가 지속 가능해야 합니까?
아니요, 반드시 그렇지 않습니다. 대부분의 경우 이벤트 버스는 저장되지 않는 일시적인(ephemeral) 이벤트를 운영합니다. 이벤트의 손실 방지가 중요한 경우에만 지속성이 필요합니다(예: Kafka를 통해).
게시 시 구독자가 없으면 이벤트가 손실됩니까?
네, 시스템이 이벤트를 저장하지 않으면(ephermeral), 이벤트는 손실됩니다. 보장된 전달을 위해서는 지속 가능한 이벤트 버스(예: 지속적인 큐를 가진 RabbitMQ)가 필요합니다.
제한 없이 동기 및 비동기 코드에 하나의 이벤트 버스를 사용할 수 있습니까?
아니요, 동기 이벤트 버스는 모든 처리기가 완료될 때까지 스레드를 차단할 수 있으므로 높은 부하에 적합하지 않습니다. 확장 가능한 시스템에는 비동기 이벤트 버스를 사용하거나 이벤트 처리를 별도의 프로세스/스레드로 분리합니다(예: Celery를 통해).