이벤트 드리븐 아키텍처 설계 가이드 - 언제 도입하고 무엇을 조심해야 할까
마이크로서비스에서 자주 등장하는 이벤트 드리븐 아키텍처를 실무 관점에서 설명합니다. 도입이 적합한 상황, 동기 호출과의 경계, 이벤트 스키마, idempotency, 운영 복잡도까지 구체적으로 정리합니다.
TestForge Team ·
이벤트 드리븐은 만능이 아니다
이벤트 드리븐 아키텍처는 서비스 결합도를 낮추고 확장성을 높여준다고 알려져 있습니다.
하지만 무조건 도입하면 오히려 더 복잡해질 수 있습니다.
주요 질문:
- 이 흐름이 정말 비동기여도 되는가
- 처리 지연을 허용할 수 있는가
- 실패 시 추적 가능한가
즉, 이벤트 드리븐은 구조적 장점과 운영 복잡도를 함께 가져옵니다.
언제 적합한가
- 주문 생성 후 후속 처리 분리
- 알림, 감사 로그, 포인트 적립 같은 비동기 작업
- 여러 소비자가 같은 이벤트를 구독해야 하는 경우
- 확장성이 필요한 파이프라인 처리
반대로 강한 즉시 일관성이 필요한 핵심 트랜잭션은 동기 호출이 더 적합할 수 있습니다.
이벤트 설계에서 중요한 것
이벤트 이름
- 의미가 명확해야 함
- 과거형 이벤트가 자연스러움
예:
OrderCreatedPaymentAuthorizedUserRegistered
이벤트 payload
- 최소한의 핵심 정보
- 버전 관리 가능
- 스키마 진화 고려
idempotency
같은 이벤트가 두 번 와도 안전하게 처리되어야 합니다.
가장 많이 놓치는 부분
추적성
이벤트 기반 시스템은 호출 흐름이 눈에 보이지 않습니다. trace id, correlation id가 매우 중요합니다.
재처리
consumer 실패 시 어디까지 다시 처리할지 전략이 필요합니다.
중복 처리
at-least-once 전달 환경에서는 중복을 전제로 설계해야 합니다.
마무리
이벤트 드리븐 아키텍처의 핵심은 느슨한 결합보다도 비동기 실패를 감당할 준비가 되어 있는가에 있습니다.
적절한 곳에 쓰면 강력하지만, 동기 호출이 더 맞는 구간까지 억지로 이벤트화하면 운영성이 급격히 떨어질 수 있습니다.