이벤트 기반 시스템, 왜 이렇게 어려울까?

by DD
2개월 전
조회수 38

이벤트 기반 시스템(Event-Driven System)은 유연성과 확장성을 제공하지만, 대규모 시스템 구축 및 관리에는 어려움이 따름

스키마 변경(Schema Evolution) 관리의 어려움, 분산 추적(Distributed Tracing), 멱등성(Idempotency) 확보 등 기술적 과제 존재

결과적 일관성(Eventual Consistency)으로 인한 데이터 정합성 문제와 사용자 경험 저하 가능성

커뮤니티에서는 이벤트 기반 시스템의 복잡성, 특히 비동기 시스템(Asynchronous System)의 설계 난이도에 대한 의견이 많음

이벤트 스키마(Event Schema) 관리의 중요성

이벤트 기반 시스템(Event-Driven System)에서 이벤트 스키마(Event Schema) 변경은 시스템 전체에 치명적인 영향을 미칠 수 있다. 새로운 필드를 추가하는 경우, 하위 서비스(Downstream Service)는 이를 무시할 수 있도록 설계해야 하며, 기존 필드를 제거하거나 이름을 변경하는 경우, 하위 서비스의 오류(Error)를 유발할 수 있다. 따라서 후방 호환성(Backward Compatibility)을 유지하고, 스키마 레지스트리(Schema Registry)를 통해 이벤트 형식의 유효성을 검증하는 것이 필수적이다.

분산 시스템(Distributed System) 디버깅의 어려움

이벤트 기반 시스템(Event-Driven System)은 각 서비스가 독립적으로 동작하므로, 문제 발생 시 원인을 파악하기 어렵다. 분산 추적(Distributed Tracing)은 이러한 문제를 해결하기 위한 핵심 기술로, 상관 관계 ID(Correlation ID)를 사용하여 여러 서비스에 걸쳐 있는 로그를 연결한다. 이를 통해, 특정 요청의 전체 흐름을 파악하고, 문제 발생 지점을 신속하게 찾아낼 수 있다. 분산 시스템(Distributed System)의 복잡성을 고려할 때, 모니터링(Monitoring)로깅(Logging) 시스템 구축은 필수적이다.

멱등성(Idempotency) 확보와 메시지 중복 처리

이벤트 기반 시스템(Event-Driven System)은 최소 1회 전달(At-least-once delivery)을 보장하므로, 메시지 중복 처리 가능성을 고려해야 한다. 멱등성(Idempotency)은 동일한 메시지를 여러 번 처리해도 동일한 결과를 보장하는 설계 기법이다. 이를 위해, 서비스는 처리한 이벤트의 ID를 기록하고, 중복된 이벤트는 무시해야 한다. 데이터 격리 아키텍처(Data Isolation Architecture)를 통해, 데이터 정합성을 유지하는 것도 중요하다.

결과적 일관성(Eventual Consistency)의 트레이드오프

이벤트 기반 시스템(Event-Driven System)은 결과적 일관성(Eventual Consistency)을 따른다. 즉, 데이터 변경 사항이 모든 서비스에 즉시 반영되지 않고, 시간차를 두고 전파된다. 이는 시스템의 확장성을 높이지만, 데이터 정합성 문제와 사용자 경험 저하를 야기할 수 있다. 따라서, 사용자 인터페이스(User Interface) 설계 시 지연 시간을 고려하고, 중요한 데이터는 이중 검증하는 로직을 추가해야 한다. 데이터 미저장 정책(Zero-Retention Policy)을 통해, 데이터 유출 위험을 줄이는 것도 고려할 수 있다.

Why are Event-Driven Systems Hard?