[The Power Of Event 요약] 6장 Event Patterns, Rules, and Constraints

6장에서는 CEP 어플리케이션의 기반이 되는 이벤트 패턴, 반응형 이벤트 패턴 룰, 이벤트 패턴 제약 드의 개념을 설명하고 다음과 같은 내용들을 다룬다.

  • 패턴검색의 종류
  • 이벤트 패턴
  • strawman 이벤트 패턴 언어
  • 이벤트 패턴 룰
  • 이벤트 패턴 제약
  • 이벤트 패턴을 통한 비즈니스 룰 검출

6.1 Common Kinds of Pattern Searching

CEP의목적은 무수한 이벤트로부터 사용자의 관심에 맞는 관련 이벤트의 집합을 적절하게 찾는 것이다. 인터넷에서 필요한 정보를 검색하기 위한 조건으로 검색어를 입력하듯 찾고자하는 정보와 관련된 이벤트 집합을 얻기 위해서 이벤트의 패턴을 기술해야 한다.

이벤트의 패턴을 기술하는 방식은 두가지가 있다. 하나는 컴퓨터가 이해할 수 있는 언어인 이벤트 패턴 언어(Event Pattern Language)를 사용하는 것이다. 이벤트 패턴 언어는 앞으로 계속해서 자세하게 다루게 될 것이다. 두번째 방법은 GUI를 활용한 방법으로 서두에서 설명한 웹서치가 이에 해당한다. 아래 그림과 같이 구글에서도 다양한 검색 조건 필터와 고급검색을 통해서 원하는 정보를 찾아주지만 정확하게 원하는 정보만을 찾는데는 한계가 있다.

구글 고급검색

패턴매칭은 컴퓨터 시스템에서 고전적이고 익숙한 이슈이기도 하다. 유닉스 계열의 OS에서 문자열 검색을 위한 grep 같은 명령어 패턴 매칭을 위한 도구라고 할 수 있다.

그러나 CEP에서 우리가 원하는 이벤트 패턴 매칭은 단순한 웹검색이나 문자열 검색보다 정교하고 복잡한 요구사항이 따른다. 이벤트 패턴 매칭은 이벤트간의 시간, 인과관계, 조합의 정보를 포괄하여 적절한 이벤트 집합을 찾아내는 과정이다. 따라서 단순한 문자열 검색조건보다 복잡한 형태의 이벤트 패턴을 기술할 수 있는 도구가 필요하다.

6.2 Event Pattern

이벤트 패턴이란 우리가 관심갖고 찾기 원하는 특정한 이벤트의 집합을 매칭시키는 하나의 템플릿을 말한다. 이벤트 패턴은 이벤트에 대한 정보 뿐 아니라 이벤트 간의 인과관계 의존성, 시간속성, 데이터 매개변수 및 컨텍스트 정보등을 포함한다. 이는 다른 표현으로 타겟 시스템 안에서 발생하는 이벤트의 Poset 가운데 하나를 기술하는 템플릿이 된다.

이벤트 패턴은 찾고자하는 대상 패턴에 따라 다음의 몇가지로 분류가 가능하다

  1. Content-Sensitive Pattern
  2. Context-Sensitive Pattern
  3. Filter Pattern
  4. Complex Pattern

Content-Sensitive Pattern이란 이벤트 패턴 내의 속성 값을 기준으로 패턴을 매칭시키는 경우를 말한다. 예를 들어 다음과 같은 패턴이 있다고 생각해보자.

“All orders from customer C in the last month”

이 패턴을 매칭하기 위해서는 이벤트의 속성을 일일이 확인하여 소비자가 ‘C’인지, 시간은 한달이 지나지 않았는지를 확인해야 한다. 즉 이벤트의 내용을 기반으로 패턴을 매칭하는 경우를 Content-Sensitive 패턴이라 한다.

Context-Sensitive Pattern은 Content-Sensitive 패턴과 유사하지만 이벤트의 내용을 확인하지 않고 특정한 맥락을 기반으로 패턴을 매칭한다는 점이 다르다. 다음의 예제를 보자

“All orders from frequent customers in the last month”

이 패턴은 이벤트의 속성 값을 기준으로 패턴을 매칭할 수 없다. 이벤트의 속성으로 특정한 소비자를 한정하여 찾는 것이 아니라 어떠한 소비자가 지난 한달간이라는 시간 구간 안에서 반복적으로 구매를 하였는지 그 맥락을 찾아서 패턴을 매칭해야 한다. 이렇게 일정한 상황과 맥락을 기준으로 패턴을 매칭하는 경우를 Context-Sensitive 패턴이라 한다.

세 번째로 Filter Pattern은 예제를 통해서 먼저 살펴보자.

“All orders from customers in response to a discount announcement”

이 패턴은 할인 메시지에 반응해서 구매를 한 소비자를 찾는 것이다. 결국 이 패턴에 따라 검출된 구매 이벤트는 할인 메시지 이벤트의 인과관계로 아래 그림과 같이 종속되어 있음을 알 수 있다.

Filter Pattern

이러한 Filter 패턴은 이벤트 간의 인과관계에서 원인 이벤트를 필터로 하여 매칭대상 이벤트 공간을 한정시켜 주는 역혈을 한다.

마지막 유형은 Complex Pattern으로 의미 그대로 세가지 유형에 속하지 않으면서 복잡한 이벤트 관계를 갖고 있는 경우이다. 다음과 같은 패턴의 예를 보자.

“All orders from customers at the regular price that have led to the customer requesting a reduced price in response to the discount announcement”

이 패턴은 아래 그림과 같이 독립적인 Poset들을 함께 연관지어 매칭하는 복잡한 형태를 띄고 있다. 개별적으로 주문이 완료된 이벤트들이 독립적으로 발행된 할인 이벤트에 반응하여 할인을 요구하는 형태로 서로 다른 Poset들이 연관되어 패턴을 이루고 있음을 알 수 있다.

Complex Pattern

이러한 Complex 패턴은 일반적인 이벤트 패턴 언어로 기술하기 상당히 까다로운 형태의 패턴의 예가 된다. 이벤트 패턴 언어는 이러한 형태의 복잡합 패턴 매칭까지 다룰 수 있어야 한다.

6.3 A Strawman Pattern Language

이제까지 이야기한 이벤트 패턴 언어의 예를 들기 위해서 이 장에서는 아주 단순한 형태의 이벤트 패턴 언어를 다룬다. 여기서 설명하는 간단한 형태의 이벤트 패턴 언어를 STRAW-EPL이라고 한다. 복잡한 패턴 언어를 다루기 전에 이벤트 패턴언어에 대한 전반적인 이해와 입문으로서 STRAW-EPL을 생각하면 된다.

STRAW-EPL은 and, or, ->(인과관계)의 세가지 관계연산자를 지원한다. 각 연산자들은 예를 들면 다음과 같이 사용할 수 있다.

  • A and B and C : 이 패턴의 의미는 A,B,C 모든 패턴을 동시에 매칭한다는 뜻이다.
  • A or B or C: 이 패턴의 의미는 A,B,C 중 어느 하나라도 매칭한다는 뜻이다.
  • A -> B: 이 패턴의 의미는 A가 B의 원인일 경우의 두 이벤트 짝을 매칭한다는 뜻이다.

STRAW-EPL에서 패턴을 정의하기 위해서는 다음의 네가지 요소를 선언해야 한다.

  1. 변수: 변수의 타입과 명칭을 선언 [예: Message M]
  2. 이벤트 타입: 이벤트의 명칭과 속성을 열거하여 선언 [예: Send(Message M, Bit B, Time T)]
  3. 패턴: 패턴은 관계 연산자를 활용하여 선언 [예: Send(M, B, T1) and ReSend(M, B, T2)]
  4. 상황조건: 패턴이 매칭되었을 때의 반드시 만족시켜야하는 조건 선언 [예: 0 < T2 – T1 < 10]

6.3.1 Pattern Matching

패턴의 각 매칭결과는 패턴의 변수들을 이벤트의 값으로 치환한 결과로서 하나의 인스턴스로 Poset을 이룬다. 결국 매칭은 패턴안에 변수들을 동일한 값의 속성으로 치환하는 과정이다.

6.3.2 Writing Patterns in STRAW-EPL

STRAW-EPL에서 패턴은 표양식위에 작성한다. 표 안에는 6.2장에서 설명한 것과 동일하게 패턴의 요소들인 변수, 이벤트 타입, 패턴, 패턴에 사용한 관계연산자, 상황조건을 선언하면 된다. 다음은 STRAW-EPL 패턴의 예제이다.

STRAW-EPL Pattern 예제

이 패턴은 보는바와 같이 네트워크 상의 패킷 전송이 정상적으로 이루어 졌음을 나타내는 패턴매칭이다. 상세하게 설명하면 Send, Receive, Ack, RecAck 네 이벤트가 동일한 Data, Bit 값을 기준으로 순차적으로 인과관계로 묶여 있고 Send와RecAck의 시간 구간이 10초 이하인 상황조건일 경우 성공적으로 데이터가 전송되었다는 것을 매칭하는 패턴이다.

6.4 Event Pattern Rules

이벤트 패턴 룰은 이벤트 패턴이 매칭될 때 실행하는 반응 규칙을 말한다. 사용자가 정의한 이벤트 패턴이 매칭되면 이에 따른 반응으로 새로운 이벤트가 생성되므로 자연스럽게 양자간에 인과관계가 암묵적으로 생긴다.

반응 규칙은 논리적으로 두 부분으로 나눌 수 있다. 하나는 트리거로서 이벤트 패턴이고 다른 하나는 패턴이 매칭될 때 실행되는 액션이다.

패턴이 매칭될 때 생성되는 이벤트는 자신의 인과관계로서 이벤트 패턴의 전체 이벤트와 연관된다. 이 때 인과관계를 갖는 패턴 매칭의 모든 이벤트는 생성된 이벤트의 인과관계상 조상 이벤트들이 된다.

반응규칙은 구현에 따라 순차적이거나 병렬적으로 생성된다. 다음의 그림을 먼저 살펴보면 순차적인 반응규칙과 병렬적인 반응 규칙을 구별할 수 있다.

Reactive Rules

순차적인 규칙은 트리거에 따라 새로운 이벤트가 생성될 때 생성된 이벤트 사이의 순차적인 인과관계가 존재하고, 병렬적인 규칙은 오직 트리거 이벤트(인과관계의 조상 이벤트)와의 인과관계만을 갖고 있다는 것을 알 수 있다.(둘 사이의 차이가 어떤 의미를 지니는지 이해하지 못했다.)

다음의 이벤트 패턴 룰의 예이다. 이벤트 패턴 룰 역시 이전에 이벤트 패턴과 같이 STRAW-EPL의 표양식을 동일하게 사용할 수 있다. 다만 여기에 Action 행을 하나 추가하여 이벤트 패턴이 매칭될 때의 액션을 선언하면 된다.

Event Pattern Rule

이 이벤트 패턴 룰은 이전 장의 네트워크 패킷 전송의 이벤트 패턴의 확장으로, 데이터의 전송까지의 시간이 1시간을 넘을 경우 Warning 이벤트를 생성하라는 의미이다. 이 패턴에서의 이벤트 관계는 다음의 그림으로 표현할 수 있다.

Causal Ancestors

주황색 배경에 이벤트 집합이 패턴 매칭된 Poset 이며 이는 암묵적으로 Warning 이벤트와 인과관계를 가지고 있다는 것을 알 수 있다.

6.5 Constraints

제약조건은 시스템에서 이벤트들이 반드시 만족시켜야 하는 조건을 선언하는데 사용된다. 시스템이 어떻게 작동해야하는지 뿐만 아니라 시스템을 사용하는 사람이 어떻게 활용해야 하는지를 제약한다.

제약조건은 STRAW-EPL에서는 간단하게 “never”라는 연산자를 통해서 선언한다. 이 연산자는 두개의 구성요소를 갖는다. 하나는 never라는 연산자 자신과 다른 하나는 만족시켜야 할 STRAW-EPL 이벤트 패턴이다. 다음의 패턴을 예로 보자.

Constraints Example Pattern

보는 바와 같이 이 패턴은 소비자가 한번 주문한 제품을 바로 뒤에 취소하는 것을 허용하지 않겠다는 제약 조건의 패턴을 표현한 것이다. 이 패턴 선언 중간에 never 연산자가 포함된 것을 확인할 수 있다.

이벤트 패턴 룰의 목적은 패턴을 매칭하여 새로운 이벤트를 생성시키는 것이었다면 제약조건의 목적은 단순하게 시스템에서 발생하면 안 되는 상황을 모니터링 하는 것이다. 따라서 제약조건을 이벤트 패턴 룰로 전환하여 문제상황에 대해서 이벤트를 생성시켜 모니터링하는 것도 좋은 방법이다. 결론적으로 제약조건은 시스템이 보장하지 않는 행동에 대하여 표현하는 수단으로 활용할 수 있다.