[The Power Of Event 요약] 7장 Complex Events and Event Hiearchies

Part 1의 마지막인 7장에서는 이벤트의 조합과 이벤트 추상화 계층을 설명하면서 복합이벤트처리가 실제로 어떻게 이루어지는지에 대한 설명을 여러 예제를 통해서 보여준다. 구체적으로 이 장에서는 다음의 이슈에 대해서 설명한다.

  • 이벤트 조합
  • 복합 이벤트
  • 이벤트 계층 추상화
  • 계층형 시스템의 개인화된, 룰기반의 뷰

7.1 Aggregation

복합이벤트는 다른 이벤트들의 조합으로 이루어진 이벤트이다. 낮은 계층에서 발생하는 상세한 이벤트들이 사용자가 정의한 패턴과 룰에 따라 좀 더 정제된 추상화된 결과물로 복합이벤트가 되는 것이다. 명칭만 생각하면 “복합이벤트”가 정말로 “복잡한” 형태의 이벤트라고 생각할 수 있지만 개념상 여러 이벤트의 조합으로 이루어진 이벤트이기 때문에 “복합(Complex)”라는 명칭이 붙는 것이다. 실제 복합이벤트가 담는 내용적 측면에서 봤을때 “사용자가 이해할 수 있는, 사용자에게 유의미한” 이벤트를 “복합이벤트”라고 정의한다고 생각하면 된다.

복합이벤트가 어떻게 도출되는지에 대한 예를 책에서 5가지로 보여준다. 이 중에서 하나의 어셈블리 연산을 복합이벤트로 하는 간단한 예를 설명해보자.

Add(X, Y)라는 특정 프로세서의 명령어가 있다고 하자. 실제 이 연산은 더 하위 레벨의 프로세서 관련 연산들의 순서로 이어져 있다. 이러한 하위 레벨의 연산은 사용자에게는 직관적이지 않고 상당히 구체적인 연산에 해당한다. 단순히 덧셈 연산하나를 하기 위해서 여러 개의 하위연산을 직접 작성하는 것은 어렵기 때문에 이러한 하위레벨의 연산들의 순서를 하나의 묶음으로 조합하여 상위 레벨의 연산인 Add(X, Y)가 탄생한다.

7.2 Creating Complex Events

복합이벤트가 무엇인지 정의했다면 자연스럽게 어떻게 복합이벤트가 발생하느냐는 질문이 들 것이다. 이에 대한 답은 이벤트 패턴 룰을 정의하라는 것이다. 이벤트 패턴 룰은 사용자가 원하는 복합 이벤트를 도출하기 위해서 여러 이벤트간의 관계(시간, 인과)와 함께 이벤트의 조합을 정의하는 것이다. 예를 들면 4-way handshaking과 유사하게 어떠한 데이터를 하나 보내는데 총 4번의 이벤트가 교환되는 프로토콜이 있다면, 한번의 전송이 완료되었다는 복합이벤트인 CompletedTran 이벤트의 패턴 룰은 다음과 같이 정의할 수 있다.

Create Complex Event

CompletedTran 이벤트는 보는 바와 같이 Send, Receive 등의 이벤트보다 상위 개념의 추상회된 이벤트라는 것을 알 수 있다. 네트워크 매니저가 아닌 이상 우리는 네트워크 계층의 이벤트 정보를 일일이 모니터링하지 않는다. 정확하게 내가 전송하려는 데이터가 보내졌는지에 대한 확인이 중요하기 때문이다. 이러한 요구사항이 바로 이어지는 장 이벤트 추상화 계층에서 다루는 내용이다.

7.3 Event Abstraction Hierarchies

이벤트 추상화 계층은 결국 사용자에게 의미없는 Low Level 정보들 가운데에서 유의미한 정보를 얻기 위한 데이터 계층의 모델링과도 같다. 일반적으로 이벤트 추상화 계층은 다음의 두가지 요소를 명확하게 갖추고 있어야 한다.

  • 시스템의 계층과 각 계층 내의 활동: 시스템을 여러 계층으로 구분하고 각 계층에서 일워지는 활동들을 찾아서 정의한 후 여기서 발생하는 이벤트 타입과 명세를 정의해야 한다.
  • 각 계층에서의 이벤트 조합룰 집합: 이전의 정보를 기반으로 가장 낮은 계층을 제외한 모든 계층에서 이벤트 패턴 룰을 정의하여 어떠한 이벤트를 복합이벤트로 도출할 것인지를 정의해야 한다. 중요한 점은 이벤트 패턴 룰을 통해 도출되는 복합 이벤트를 해당 계층의 어떤 이벤트 타입으로 할 것인지를 잘 설정해야 한다.

위의 두가지 정보들을 잘 정의하여 이벤트 추상화 계층을 구축하는 것은 CEP를 위한 선제적인 조건이다.

7.4 Building Personalized Concept Abstraction Hierarchies

복합이벤트의 정의와 생성, 이벤트 추상화 계층은 결과적으로 특정 사용자군이 관심갖는 정보만을 개인화하여 정확하게 도출해서 제공하기 위한 기술적 수단이라고 할 수 있다.

타겟 시스템 안에는 여러 이해관계자가 있고, 각자가 관심갖고 필요로 하는 정보는 당연히 다를 수 밖에 없다. 따라서 우리는 각 사용자에게 맞는 정보를 제공해야 하고 이를 타겟 시스템의 개인화된 뷰를 통해서 정보를 제공할 수 있는 것이다.

이 책에서는 Monitoring과 Viewing이란 용어를 구분해서 정의하고 있다. 두 행위의 본질은 같으나 가장 낮은 계층을 살펴보는 것을 Monitoring이라 하고 이를 제외한 상위계층에서 발생하는 High-level의 복합이벤트를 살펴보는 것을 Viewing이라 표현한다.

두 개념을 구분하는 이유는 Monitoring하는 대상은 변하지 않지만  Viewing의 대상은 가변적이기 때문이다. 타겟시스템의 계층은 고정된 것이 아니라 우리가 정의하는 영역이다. 따라서 이벤트 패턴룰의 변경을 통해서 우리는 얼마든지 계층과 복합이벤트를 변경할 수 있고 이는 Viewing의 결과에 변화를 가져온다.

개인화된 추상화 계층을 구성하기 위해서는 7.3 장의 이벤트 추상화 계층의 요소에서 설명한 두가지 요소를 순차적으로 잘 정의해야 한다. 다음 장에서 실제적인 예제를 통해서 어떻게 추상화 계층을 정의하는지 확인해 본다.

7.4.1 Viewing Network Activity

이 예제에서는 이전부터 사용한 네트워크의 패킷 전송을 가지고 설명한다. 7.3장에서 설명한 것과 같이 이벤트 계층을 정의하기 위해서는 먼저 각 계층과 계층 내의 활동과 이벤트 명세를 다음과 같이 정의해야 한다.

Step1-Event Abstracion Hierarchy

다음으로 가장 하단의 계층을 제외한 계층 내의 이벤트 패턴 룰을 위의 첫 번째 그림과 정의해야 한다. 이와 같은 과정을 통해 상위 계층에서 도출된 복합 이벤트는 역으로 다시 하위 이벤트의 집합으로 추적이 가능하고 이를 “Drill-Down”이라고 한다. 예를 들면 아래 그림과 같이 CompletedTran 이벤트는 네개의 연속된 이벤트의 조합으로 Drill-Down할 수 있다.

Drill Down