이벤트 구동이란 무엇이며, 실시간은 얼마나 빠름을 의미할까요?

완료됨

조금만 생각해보면 다양한 이벤트 구동 시나리오를 식별할 수 있습니다. 이벤트 기반 시나리오 대부분은 실시간 반응을 필요로 합니다.

실시간은 무엇을 의미할까요?

실시간 반응은 즉각적인 응답으로 간주할 수 있습니다. 커피숍에서 계산원이 손님에게 어떤 음료를 마실지 질문하는 경우를 예로 들겠습니다.

계산원은 즉각적인 대답을 기대하거나 적어도 대답을 곧 들을 것으로 기대합니다. 곧바로 대답을 듣지 못하면 계산원은 다시 물어보거나 손님이 무례하다고 생각할 수도 있습니다. 빠른 대답은 요구되는 사항이면서 동시에 적절한 행동이기도 합니다. 답변 시간은 약간 다를 수 있지만 여전히 “실시간으로”로 보입니다. 즉, 계산원의 인사에 재빨리 화답하면서 뭘 주문할지 잠깐 생각한 뒤 질문에 답하게 됩니다.

이 시나리오를 소프트웨어 시스템에 적용해 보면 응답 시간, 완료 시간, 액세스 시간, 시작 시각 등 시간 관련 요소가 가장 중요합니다. 사용자 또는 액세스 애플리케이션은 이러한 타이밍을 정의합니다.

참고 항목

실시간 시스템 작업에서는 정해진 기한 내에 해당 기능을 수행합니다.

시스템에서 발생하는 상황을 항상 파악해야 합니다. 따라서 로깅, 모니터링 및 시간 측정 같은 명확한 사항을 잊지 마세요.

중요

기한과 시간을 미리 지정하고, 확인을 위한 비차단 모니터링 솔루션을 설정해야 합니다.

실시간이란 매우 빠르고, 즉각적인 것을 의미한다고 정리할 수 있습니다. 정확히 얼마나 빠른지는 주어진 시나리오에 따라 정해집니다.

이벤트 구동 애플리케이션

클릭 이벤트는 이와 다른 경우입니다. 이벤트 구동 애플리케이션에서는 실행 후 망각 원칙이 적용됩니다. 이벤트가 다른 서비스, 이벤트 허브, 스트림, Kafka 같은 메시지 브로커 등의 다음 시스템으로 보내지거나 ‘실행’되면 시스템에서 다음 응답을 굳이 기다릴 필요가 없습니다. 느슨한 결합은 최종 일관성을 대가로 얻어지는 것입니다. 따라서 다른 수준에서 최종 일관성을 살펴봐야 합니다.

Alex라는 고객이 커피와 카푸치노를 구입하는 예제를 통해 이벤트 구동 애플리케이션의 주된 아키텍처 패턴을 살펴보면서 그 특성을 알아보겠습니다.

이벤트 알림

이벤트 알림은 특정한 일이나 이벤트를 알려주는 알림입니다. 각 이벤트는 별도로 표시됩니다. Alex라는 고객이 커피와 카푸치노를 구입하는 예제를 다음과 같이 볼 수 있습니다.

1. 이벤트: Alex가 커피를 구입합니다.

2. 이벤트: Alex가 카푸치노를 구입합니다.

주문 전체를 받으려면 바리스타 한 명이 모든 이벤트를 경청해야 할 것입니다. 그러나 바리스타 두 명이 각각 음료를 만들어 내어줄 수도 있습니다.

이벤트 전달 상태 전송

이벤트 전달 상태 전송에서는 필요한 모든 정보가 단일 이벤트에 저장됩니다. 이것은 이벤트가 소실되거나 서비스에서 모든 이벤트를 수신 대기(경청)하지 않는 경우에 유용합니다. 이 예제에서는 이벤트가 다음과 같습니다.

1. 이벤트: Alex가 커피를 구입합니다.

2. 이벤트: Alex가 커피에 카푸치노까지 추가로 구입합니다.

바리스타 한 명의 경우 두 번째 이벤트만 경청하는 것으로 충분할 수도 있습니다. 바리스타 두 명의 경우 두 번째 바리스타는 첫 번째 주문을 살펴봐야 합니다. 주문을 함께 처리할 수 있지만, 완전히 분리되어 수행하는 것보다 프로세스가 더 오래 걸릴 수도 있습니다.

이벤트 소싱

이벤트 소싱에서는 이벤트 스토리지가 중심이 됩니다. 보다시피 첫 번째 예제와 이벤트가 동일합니다. 그러나 바리스타는 바리스타가 이벤트를 수신하고 알렉스에 의해 만들어진 모든 주문에 대한 현재 상태를 얻기 위해 모든 해당 이벤트에 대해 생각하는 순간에이 개념에 중요하다.

두 번째 주문과 관련하여 바리스타는 Alex의 주문이 커피 하나(첫 주문 기억)와 카푸치노 하나(방금 주문됨)로 구성된다는 것을 압니다. 두 번째 바리스타와 동시에 작업하기는 그렇게 쉽지 않습니다.

계산원을 추가하여 주문을 받고 음료를 제공하면 바리스타는 독립적으로 음료를 준비할 수 있습니다. 고객에 대해 아무것도 알 필요가 없습니다. 이 시나리오에서 계산원은 이벤트를 유지하는 이벤트 저장소라고 부를 수 있습니다. 이벤트 소싱을 사용하면 복잡성은 추가되지만 분리성 또한 얻을 수 있습니다.

1. 이벤트: Alex가 커피를 구입합니다.

계산원: (Alex의) (첫 번째) 주문: 커피

2. 이벤트: Alex가 카푸치노를 구입합니다.

계산원: (Alex의) (두 번째) 주문: 카푸치노

Visualization that shows event sourcing for buying a coffee.

원격 분석 데이터는 실시간 이벤트입니다.

다른 예제도 생각해 볼 수 있습니다. 식품이나 의약품 제조업체에서 사용하는 냉동 시스템을 가동하는 시나리오를 가정해 보겠습니다. 시스템의 온도 및 기타 관련 데이터를 지속적으로 제어해야 합니다. 원격 분석 데이터를 인식하고 자동으로 제어하는 것은 성공에 매우 중요합니다. 2초마다 원격 분석을 실시한 후 제어 시스템으로 보내면 제어 시스템에서 데이터를 분석 및 처리합니다. 이것이 이벤트 구동 시스템입니다. 그리고 사업에 엄청난 타격을 입지 않도록 신속하게 대응해야 하므로 데이터를 실시간으로 처리해야 합니다.