
이벤트 프로세싱은 이미 십년전부터 있던 컴퓨터 시스템의 중심에 위치하고 있습니다. 모든 industry에 해당하는 일반적인 문제는 고객의 시스템에서 들어오는 사용하는 전체 이벤트 데이터 중 필요한 것들만 추출하는 방법이었겠네요. 이에 부응하기 위하여 DW, Data Mining 등이 BI(Business Intelligence)와 함께 중요한 경영 의사 결정 요소로 자리 잡아 온 것이 사실입니다.
제가 지금 다니고 있는 회사의 이벤트 프로세싱 엔진의 경우 메모리 내에서 pentium 4 dual processor기준으로 초당 50만건 이상을 거뜬하고 처리하고 있습니다. 사실 메모리 작업을 통해 SQL속성을 가진 query languaue를 통해서 가능한데 만약 처리의 결과가 실제 database와 연결되어 있다면 저러한 성능은 나오지 않을 겁니다.
즉 이벤트 프로세싱은 데이터를 필터링하여 내가 원하는 결과값을 보기 위한 것이기 때문에 이벤트 데이터의 속성이 중요한 것이지 결과가 저장되는 data source영역이 아님을 알고 있어야 합니다.
그림 ? 이벤트 프로세싱

그림에서 보는 것처럼 이벤트 소스는 다양한 형태로 입력될 수 있으며 그게 EAI, MOM 또는 SOA를 통하여 얻는 방법, RFID등의 다양한 이벤트를 통해 얻는 방법 등이 있을 수 있습니다.
위의 정의를 CEP(Complex Event Processing)라고 이야기합니다. CEP의 기본적인 목적은 시스템간에 실시간으로 수집되는 가치있는 정보를 분석하는 데 있습니다.
Introduction to Esper
WebLogic Event Server가 존재하지만 여기서는 Esper라는 오픈소스 CEP엔진을 간략하게 보도록 합니다. Esper는 자바로 쓰여졌으며 .NET을 원한다면 NEsper를 사용하면 .NET과 C#을 통한 CEP가 가능합니다. 다운로드는 esper.codehaus.org에서 할 수 있으며 예제와 문서가 잘 정리되어 있습니다.
특징은 WebLogic Event Server와 마찬가지로 SQL과 흡사한 data query language를 사용하기 때문에 손쉽게 이벤트 프로세싱을 배우실 수 있을 것 같아요.
예 : Esper Query ? 마지막 10분간의 총 고객의 숫자와 고객의 아이디를 찾으시오.
select customerId, count(*)
from PayInqAck(isFound = false).win:time(10 minutes)
group by customer
having count(*) >= 3
예: WebLogic Event Server Query ? GLV라는 심볼을 가진 주식 중 마지막 5개의 이벤트 중 lastPrice의 트렌드(method name)가 2를 넘는 데이터의 정보를 추출하라.
select symbol, lastPrice, trend(lastPrice), clientTimestamp, timestamp from (select * from StockTick where symbol='GLV') retain 5 events having trend(lastPrice) > 2
그러면 저걸 어디에다 쓸 수 있을까요? 하루에 신용카드사로 들어오는 이벤트는 상상을 초월합니다. 그런데 한 여성이 신용카드를 분실했다고 가정을 해보죠. 이 여성은 카드를 이용해서 대부분 화장품, 패밀리 레스토랑에서 카드를 사용했습니다. 그런데 어느 날 카드를 잃어버리게 됩니다. 어떤 남자가 카드를 주워서 바로 유흥주점으로 놀러가 카드를 계산합니다. 이 때 이벤트 서버가 들어오는 이벤트 데이터의 패턴과 기존의 데이터를 비교하여 문제가 발생했다는 걸 실시간으로 알린다거나 할 수 있습니다. 간단하게 예를 든 것이지만 정말 다양한 곳에서 이런 event processing을 사용할 수 있습니다.
간략하게 이벤트 프로세싱을 살펴보았지만 내부의 programming model, flow 등을 보면 쉽지가 않는 영역입니다. 하지만 이런 분야도 있다는 것을 아는 게 중요해서 이렇게 글로 남깁니다.



