- 이벤트 소싱은 모든 사용자 행동을 불변의 이벤트로 기록하여 시스템의 상태 변화 과정을 추적하는 아키텍처 패턴입니다. 📜
- 감사, 규정 준수, 추적성(은행, 티켓팅, 보험)에 매우 적합하며, 과거 이력을 재현하거나 사기 탐지에 유용합니다. 🕵️♀️
- 높은 쓰기 볼륨 처리와 성능 향상을 위해 CQRS(Command Query Responsibility Segregation)와 함께 사용될 때 시너지가 극대화됩니다. 🚀
- 아키텍처는 클라이언트, 게이트웨이, 핸들러 API를 통해 명령(쓰기)과 쿼리(읽기)를 처리하며, Redis 스냅샷 DB와 이벤트 스토어를 활용합니다. 🏗️
- 쓰기 작업 시, Redis에서 최신 스냅샷을 가져와 현재 상태를 재구성하고, 이를 불변의 이벤트로 이벤트 스토어에 저장합니다. 💾
- 이벤트는 RabbitMQ와 같은 메시지 큐를 통해 비동기적으로 전파되며, 리스너 서비스가 이를 받아 외부 서비스 연동 및 읽기 전용 데이터베이스(Materialized Views)를 업데이트합니다. 🔄
- 이벤트 스토어와 스냅샷 DB는 즉각적인 일관성(Immediate Consistency)을 제공하지만, Materialized Views는 최종 일관성(Eventual Consistency)을 가질 수 있어 데이터 반영에 지연이 발생할 수 있습니다. ⏳
- 도메인 주도 설계(DDD)의 '애그리게이트' 개념을 사용하여 관련 객체들을 단일 단위로 관리하며, 계정 등이 그 예시입니다. 🧩
- 단점으로는 시스템 복잡도 증가, 이벤트 버전 관리의 어려움, 그리고 다수의 컴포넌트 유지보수 부담이 있습니다. 🚧
- 특히, 시스템 전체에 영향을 미치는 결정이므로 도입 시 신중한 고려와 팀 내 합의가 필수적입니다. 🤝



![[우분투 리눅스 기초 강의] 70강. 프록시 서버 구현](https://i2.ytimg.com/vi/QqKaT-fY_wQ/hqdefault.jpg)

