47 lines
4.1 KiB
Markdown
47 lines
4.1 KiB
Markdown
---
|
|
id: P-REINFORCE-WIKI-DEV-EDA
|
|
title: "이벤트 기반 아키텍처와 비동기 시스템 설계 (EDA)"
|
|
category: "10_Wiki/💻 Topics_Dev"
|
|
status: verified
|
|
canonical_id: ""
|
|
aliases: ["EDA", "이벤트 기반 아키텍처", "Event-Driven Architecture", "비동기 통신", "메시징"]
|
|
duplicate_of: ""
|
|
source_trust_level: A
|
|
confidence_score: 1.0
|
|
tags: ["Architecture", "Asynchronous", "Microservices", "Scalability", "Messaging"]
|
|
raw_sources: ["Datacollector_Export_2026-05-02"]
|
|
last_reinforced: 2026-05-02
|
|
github_commit: ""
|
|
---
|
|
|
|
# [[이벤트 기반 아키텍처와 비동기 시스템 설계 (EDA)]]
|
|
|
|
## 1. 개요
|
|
이벤트 기반 아키텍처(EDA, Event-Driven Architecture)는 시스템 구성 요소들이 직접적으로 서로를 호출(Request-Response)하는 대신, 상태의 변화나 중요한 비즈니스 사건을 의미하는 '이벤트'를 발행(Publish)하고 소비(Subscribe)함으로써 협력하는 아키텍처 스타일이다. 이는 서비스 간의 결합도를 획기적으로 낮추고, 대규모 데이터 처리와 실시간 반응성이 요구되는 현대적 분산 시스템 및 마이크로서비스 환경에서 필수적인 설계 패러다임으로 자리 잡고 있다.
|
|
|
|
## 2. 주요 구성 요소 및 흐름
|
|
- **이벤트 생산자 (Event Producers)**: 비즈니스 사건이 발생했을 때 이를 탐지하고 이벤트 메시지를 생성하여 발행하는 주체.
|
|
- **이벤트 채널/브로커 (Event Channels/Brokers)**: 발행된 이벤트를 수집하고, 해당 이벤트에 관심 있는 소비자들에게 전달하는 매개체 (예: Apache Kafka, RabbitMQ, AWS SNS/SQS).
|
|
- **이벤트 소비자 (Event Consumers)**: 특정 이벤트를 구독하고 있다가, 이벤트가 도착하면 그에 따른 비즈니스 로직(핸들러)을 실행하는 주체.
|
|
- **이벤트 저장소 (Event Store)**: 발생한 이벤트들을 순차적으로 기록하여 추후 재생(Replay)이나 상태 복구에 활용하는 저장소.
|
|
|
|
## 3. 엔지니어링 가치
|
|
- **느슨한 결합 (Loose Coupling)**: 생산자는 누가 이벤트를 소비하는지 알 필요가 없으며, 소비자 역시 이벤트가 어디서 발행되었는지 알 필요가 없다. 이는 각 서비스의 독립적인 진화와 배포를 가능하게 한다.
|
|
- **높은 확장성 및 유연성**: 이벤트 소비자를 자유롭게 추가하거나 제거할 수 있으며, 메시지 큐를 통한 버퍼링 효과로 갑작스러운 트래픽 증가(Spike)에도 시스템 전체가 마비되지 않고 유연하게 대응 가능.
|
|
- **실시간 반응성**: 데이터가 발생한 즉시 관련 시스템들이 비동기적으로 반응하므로, 실시간 대시보드, 알림 서비스, 복잡한 워크플로우 처리에 최적화됨.
|
|
|
|
## 4. 트레이드오프 및 주의사항
|
|
- **디버깅 및 추적의 어려움**: 직접적인 호출 스택이 존재하지 않으므로, 하나의 비즈니스 흐름이 여러 서비스를 거쳐갈 때 장애 발생 지점을 찾기 위해 분산 추적(Distributed Tracing) 도구 필수.
|
|
- **결과적 일관성 (Eventual Consistency)**: 분산 시스템의 특성상 데이터가 모든 곳에 즉시 반영되지 않을 수 있음을 전제로 설계해야 하며, 보상 트랜잭션(Saga Pattern 등)을 통한 예외 처리 필요.
|
|
- **멱등성 보장 (Idempotency)**: 네트워크 장애 등으로 동일한 이벤트가 중복 전달될 수 있으므로, 여러 번 처리해도 시스템 상태가 일관되게 유지되도록 핸들러를 멱등성 있게 구현해야 함.
|
|
|
|
## 5. 지식 연결 (Related)
|
|
- [[Microservices_Architecture]]: EDA가 가장 활발하게 적용되는 아키텍처 환경.
|
|
- [[Domain_Driven_Design]]: 도메인 이벤트를 정의하고 바운디드 컨텍스트 간의 통신을 설계하는 기반 이론.
|
|
- [[Event_Storming]]: 이벤트 기반 시스템의 흐름을 설계하기 위한 협업 워크숍 기법.
|
|
|
|
## 🧪 검증 상태 (Validation)
|
|
- **정보 상태**: 검증 완료 (Verified)
|
|
- **출처 신뢰도**: A
|
|
- **검토 이유**: 서비스 간의 의존성을 최소화하고 분산 시스템의 확장성과 복잡성을 효과적으로 제어하기 위한 현대적 아키텍처 표준 정립.
|