메인 컨텐츠로 가기

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관 보기.

developerWorks에 처음 로그인하면 developerWorks프로파일이 생성됩니다.귀하의 프로파일에서 동의하신 내용이 공개되지만 이 사항은 언제든지 변경 가능합니다. 귀하의 성명(숨김으로 체크되어 있어도 표시됩니다)과 디스플레이 이름은 게시한 컨텐츠나 사이트 엑세스시 표시됩니다.

모든 정보가 안전하게 전송되었습니다.

  • 닫기 [x]

처음 developerWorks에 로그인할 때 프로파일이 작성되므로, 이를 위해 디스플레이 이름을 선택해야 합니다. 선택하신 디스플레이 이름은 developerWorks에 게시한 컨텐츠에 표시됩니다.

3글자 이상 31글자 이하의 길이로 사용 가능합니다. dW커뮤니티 내에서는 보안상 이메일주소를 제외한 다른 이름을 지정하셔야 합니다.

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관 보기.

모든 정보가 안전하게 전송되었습니다.

  • 닫기 [x]

SOA 복합 비즈니스 서비스 구현하기, Part 4: Common Event Infrastructure에서 측정 가능한 복합 애플리케이션 개발하기 (한글)

Javier Garcia, Advisory Software Engineer, IBM
Photo of Javier Garcia
Javier Garcia는 20년 개발 경력을 지닌 자문 소프트웨어 엔지니어이다. 현재 SWG Strategy and Technology 부서에서 SOA와 복합 애플리케이션 관련 작업을 하고 있다.
Duo Wei (David) Sun, Staff Software Engineer, IBM
Photo of DuoWei (David) Sun
DuoWei (David) Sun은 China Software Development Lab (CSDL) 소속 소프트웨어 엔지니어이다. 현재 SOA 개발 분야에서 일하고 있다.
Zhi Gan, Staff Software Engineer, IBM
Photo of Zhi (James) Gan
Zhi Gan은 IBM China Development Lab 소속 소프트웨어 엔지니어이다. Shanghai JiaoTong University에서 박사 학위를 받은 후에 IBM에 입사했다. SOA, AOP, Eclipse가 전문 분야이다. 현재 모델 중심 개발 분야에 집중하고 있다.

요약:  본 시리즈에서는 비즈니스 서비스를 실행하는 복합 애플리케이션 개발에 대해 다루고 있습니다. 복합 애플리케이션들이 비즈니스 목표를 잘 맞추고 있는지 알 수 있으려면 애플리케이션은 측정이 가능해야 합니다. 이 글에서는 Common Event Infrastructure를 기반으로 하는 세 개의 재사용 가능한 아티팩트(artifact)를 사용하여 측정 가능한 복합 애플리케이션을 개발하는 방법을 설명합니다. 이러한 아티팩트가 필요한 이유와, 복합 애플리케이션을 평가할 때 이들을 사용하는 방법을 설명합니다.

이 연재 자세히 보기

원문 게재일:  2007 년 6 월 12 일
난이도:  중급 영어로:  보기
페이지뷰:  850 회
의견:  


머리말

WebSphere® Integration Developer와 WebSphere Process Server는 기본적인 이벤트 관리 서비스를 제공하는 방식으로써 Common Event Infrastructure (CEI)를 도입했다. CEI는 CBE 스팩에서 정의된 대로 Common Base Events (CBE)를 처리한다. CEI는 표준 XML 기반 포맷을 제공하는데, 이는 로그와 쿼리 이벤트에 기본적인 메커니즘이 된다. WebSphere Integration Developer에서의 CEI 지원을 통해 CBE 이벤트가 만들어 진다. 예를 들어, Business Process Execution Language (BPEL) 액티비티를 선택하고, 액티비티-시작 또는 액티비티-중지 이벤트를 선택할 수 있는데, 이는 자동으로 CBE를 만들어 낸다. 하지만, WebSphere Integration Developer 이벤트에 상응하지 않는 비즈니스 레벨 이벤트를 만들 필요는 없다. 여기에는 Process Engine (BPE) API를 사용할 수 있다. 하지만, 이 API는 CBE 포맷과 다른 CEI 스팩의 애트리뷰트도 노출하기 때문에, 이 API의 관련 부분들은 이벤트의 기록, 쿼리, 보기를 지원하는 사용하기 쉬운 아티팩트 세트에 저장된다. 이 글에서는, 이러한 아티팩트들을 설명하고, 이들을 복합 애플리케이션에서 사용하는 방법을 설명한다.

비즈니스 레벨 이벤트 파악하기

복합 애플리케이션을 측정하기 위해서 비즈니스 레벨 이벤트를 포착(capture)해야 한다. 비즈니스 레벨 이벤트들은 비즈니스와 관련된 정보를 캡쳐하는 이벤트이다. 예를 들어, 은행 자금이 한 계좌에서 다른 계좌로 인출될 때 이벤트가 기록된다. 비즈니스 레벨 이벤트는 기업이 비즈니스를 수행하는 방식을 파악하고 향상시킬 수 있도록 도움을 준다. 비즈니스 이벤트가 기록된 후에 이들을 모아서 비즈니스 경향을 파악할 수 있고, 결국 비즈니스를 향상시키는데 필요한 평가를 내릴 수 있는 것이다. 하지만, 비즈니스 레벨 이벤트가 특정한 WebSphere Integration Developer 액티비티와 반드시 연관되어야 하는 것은 아니다. WebSphere Integration 액티비티는 WebSphere Integration Developer 단계들에 상응할 수 있다. 그림 2는 전형적인 WebSphere Integration Developer 액티비티를 나타내고 있다. 비즈니스 레벨 이벤트는 WebSphere Integration Developer 액티비티에 상응할 수 있다.

측정 가능한 애플리케이션이 되려면 이벤트에 임의의 데이터를 영속시키는 기능이 있어야 한다. 이러한 임의의 데이터들은 비즈니스 레벨에서 의미를 갖는다. CBE 스팩은 CBE의 ExtendedDataElement 섹션을 사용하여 임의의 데이터를 영속시킨다. 이 섹션에서는 애플리케이션 스팩의 데이터가 이름 값 쌍의 포맷으로 되어 있다.


CBE 이벤트 생성하기

비즈니스 프로세스, 비즈니스 규칙 같은 측정 가능한 컴포넌트 유형은 WebSphere Integration Developer에 사전 정의된 비즈니스 이벤트 세트를 갖고 있다. (표 1) 하지만, 가끔 이러한 사전 정의된 이벤트들이 비즈니스 레벨 이벤트를 생성하지 않을 때도 있다. 따라서, 측정 가능한 기능을 갖춘 복합 애플리케이션을 제공하려면 언제라도 비즈니스 레벨 이벤트를 생성할 수 있어야 한다.


표 1. 각 에디터용 측정 가능한 엘리먼트
에디터측정 가능 엘리먼트
Assembly editor (CEI 전용)Operation
Business process editor (CEI and Audit Log)Assign, Compensate, Empty, Flow (Parallel Activities), Invoke, Pick (Receive Choice), Process, Receive, Reply, Rethrow, Scope, Script, Sequence, Staff, Switch (Choice), Template (not shown), Terminate, Throw, Variable, Wait, While (While loop)
Business object-mapping editor (CEI 전용)Map, Transformation (all kinds)
Business rule-group editor (CEI 전용)Operation
Business state machine editor (CEI 전용)Action, Entry, Exit, Guard, State, State Machine Definition (State Machine), Timer, Transition
Human task editor (CEI와 Audit Log)Escalation, Task, Task Template (not shown)
Interface-mapping editor (CEI 전용)Operation Binding, Parameter mediation (all kinds)
Selector editor (CEI 전용)Operation

주: 표 1에서 Audit Log로 되어 있는 이벤트들은 프로세스 구성 데이터베이스에서 감사(audit) 이벤트로서 생성된다. CEI로서 구분된 이벤트들은 CEI 데이터 스토어에서 생성된다.


표 2. 액티비티와 이와 관련된 기본 이벤트
액티비티기본 이벤트 이름
InvokeCompletion forced, Entry, Exit, Expired, Failed, Retry forced, Skipped, Stopped, Terminated
ProcessCompensated, Compensating, Compensation failed, Correlation, Deleted, Entry, Event handler escalated, Event received, Exit, Failed, Failing, Restarted, Resumed, Suspended, Terminated, Terminating, Work item created, Work item deleted, Work item transferred
ReceiveEntry, Exit, Terminated
ReplyExit, Failed, Skipped
ScopeCompensated, Compensating, Compensation failed, Entry, Event handler escalated, Event received, Exit, Failed, Failing, Skipped, Terminated
StaffAssigned, Completion forced, Created, Deassigned, Escalated, Exit, Expired, Failed, Fault set, Output set, Retry forced, Skipped, Stopped, Terminated, Work item created, Work item deleted, Work item refreshed, Work item transferred
Template (not shown)Deleted, Entry


CBE 보기

CBE를 검색하고 분석하는데 사용할 수 있는 두 개의 옵션들이 있다.

  • WebSphere Process Server에서 제공하는 CBE Event Browser는 CBE 뷰를 제공하고, 서버 뷰의 WebSphere Integration Developer 또는 http://localhost:9060/ibm/console/cbebrowser에서 실행된다. 이 옵션은 생성된 이벤트를 보기 원하는 개발자들에게 유용하다. (그림 1)
  • 프로그램을 사용하여 이벤트를 검색하고 분석과 표현을 수행할 수 있다. 이 아티팩트는 이러한 옵션들을 다룬다.

그림1. CBE Event Browser
CBE Event Browser

재사용 가능한 CEI 아티팩트 사용하기

비즈니스 레벨 이벤트를 처리하기 위해서는, 세 개의 기본적인 아티팩트를 다운로드 해야 한다. 비즈니스 레벨 이벤트들은 CEIEventEmitter를 통해 생성되고, CEIQueryService로 쿼리되며, CEIMeteringViewPortlet을 통해 볼 수 있다.

CEIEventEmitter 사용하기

CEIEventEmitter(그림 2)는 자바™ 또는 비즈니스 프로세스에서 호출된 Service Component Architecture (SCA) 컴포넌트에서 비즈니스 레벨 이벤트를 생성할 수 있도록 해준다. 이 이벤트는 비즈니스 레벨 이벤트와 연결되고, 임의의 이름 값 쌍을 포함하고 있다.


그림 2. CEIEventEmitter의 클래스 다이어그램
CEIEventEmitter의 클래스 다이어그램

자바 코드에서 이벤트 생성하기

Listing 1은 자바 코드에서 비즈니스 레벨 이벤트를 만들어 내는 예제이다. Factory Pattern을 사용하여 이벤트 에미터(emitter)를 생성하고 알맞은 데이터로 이를 호출할 수 있다. 간단한 메시지를 포함하고 있는 로그 이벤트(emitLogMessage)를 생성하거나, eventName, eventTrackingId, 이벤트에 대한 데이터를 포함하고 있는 이름 값 쌍을 포함한 표준 이벤트(emitEvent)를 만들 수 있다.


Listing 1. 자바 코드
                
ICEIEventEmitter eventEmitter = CEIEventManagementFactory.createEventEmitter();
eventEmitter.emitLogMessage(String application, String eventTrackingId, String message);
eventEmitter.emitEvent(String application, String eventTrackingId, String event,
                       String[] eventDataName, String[] eventDataValue)
                       throws CEIEventException;

eventTrackingId는 모든 관련 이벤트들과 연관된다. 예를 들어, 하나의 비즈니스 프로세스에 같은 eventTrackingId를 사용할 수 있다. 이 이벤트는 이미 발생했던 비즈니스 레벨 이벤트를 나타내는 하나의 스트링이다. WPS:BusinessLevelEvent:FundTransferEvent처럼 콜론(colon)을 사용하여 의미가 있는 이벤트 이름들을 만들 수 있다.

Listing 2는 계좌 이체 동안 비즈니스 레벨 이벤트를 기록했던 은행 애플리케이션에서 사용되었던 코드 예제이다.


Listing 2. CEIEventEmitter를 사용하는 은행 애플리케이션 예제
                
// Bean implementation class for Enterprise Bean: AccountTransferService
public class AccountTransferServiceBean implements javax.ejb.SessionBean {
  //some code is ignored here
  public void makeTransfer( String bankId, String fromAccId, String toAccId,
                            BigDecimal amount, String description)
                             throws EJBException, TransferException {
    // some code is ignored here
    try {
      fromTransaction = transactionsLocalHome.create(time.toString(),
                                                   fromAccId,fromBankId,"Transfer",time);
      fromTransaction.setDescription(description);
      fromTransaction.setTotal(amount);
      fromTransaction.setToaccid(toAccId);
    } catch (CreateException e2) {  e2.printStackTrace();} 
		
    meterDebitEvent(fromBankId,fromAccount.getCustomerid(),fromAccId,amount);
    meterCreditEvent(toBankId,toAccount.getCustomerid(),toAccId,amount);
  }

  private void meterDebitEvent( String bankId,String userId,String fromAcc,
                                BigDecimal amount) {
    try {
      ICEIEventEmitter emitter = CEIEventManagementFactory.createEventEmitter();
      emitter.emitEvent("Jivaro", "Jivaro", "transfer_funds", new String[] {
                        "OpCode", "AgentID", "BfsID", "SubscriberID", "UserID",
                        "HostName", STATIC_Metering_ACTID, STATIC_Metering_AMOUNT},
                        new String[] {  STATIC_Metering_DEBIT_OPCODE,
                        STATIC_Metering_AGENTID, STATIC_Metering_BFSID, bankId, userId,
                        java.net.InetAddress.getLocalHost().getHostName().toString(),
                        fromAcc, amount.toString()});
    } catch(Exception e)  { e.printStackTrace(); }
  }

  private void meterCreditEvent(String bankId,String userId,String toAcc,
                                BigDecimal amount) {
  }
  // some code is ignored here
}

SCA 컴포넌트에서 이벤트 만들기

CEIEventEmitterRouter (다운로드 가능)는 CEIEventEmitter를 웹 서비스로서 래핑(wrap)한다. 웹 서비스를 WebSphere Integration Developer로 반입하고, 호출 기능을 하는 SCA 컴포넌트를 연결하면(그림 3), CEIEventEmitter가 서비스로서 호출될 수 있다. 성능이 문제가 된다면 SCA 모듈에 이 아티팩트를 포함시키고 이를 표준 자바 빈으로서 호출할 수도 있다.


그림 3. 서비스로서의 CEIEventEmitter
서비스로서의 CEIEventEmitter

CEIQueryService 사용하기

CEIQueryService(그림 6)는 CEI 영속 상태를 쿼리할 수 있도록 해주고, 지정된 코릴레이션 영역 내에서 CBE로부터 데이터를 리턴한다. 코릴레이션 영역은 모든 관련된 CBE들을 함께 그룹핑한다.

CEIEventEmitter가 이벤트들을 유지할 때, trackingId는 코릴레이션 영역을 형성하는데, 이는 관련된 이벤트들을 연결시키는데 사용된다. 여러분은 모든 관련된 CBE 이벤트들을 검색할 수 있다. 이 아티팩트에 대한 인터페이스는 웹 서비스이고, 이벤트들은 쉬운 액세스를 위해 CBE 대신 Plain Old Java Object (POJO)로 리턴된다.

아티팩트는 두 개의 부분들이 있다. 첫 번째 부분은 실제 웹 서비스와 관련 아티팩트이고, 이는 CEIQueryServiceEAR 파일에 저장된다. 이러한 아티팩트들은 WebSphere Process Server 인스턴스에 전개된다. CEIQueryService 아티팩트의 두 번째 부분은 웹 서비스에 대한 클라이언트 인터페이스와 관련된 프록시 클래스들이다. 이것은 CEIQueryServiceClientEAR 파일에 저장된다. 클라이언트 인터페이스는 테스트에 사용할 수 있는 WAR에 쉽게 액세스 할 수 있도록 EAR 파일로 되어있다. 이 클라이언트 프로젝트는 WebService 프록시와 관련 클래스들을 제공하여 CEIQueryService에 연산을 호출한다. 일반적으로, CEIQueryServiceProxy를 인스턴스화 하고 웹 서비스에 원하는 연산을 호출함으로써 웹 서비스를 시작한다. 데이터는 CEIQueryEventData 객체들의 어레이를 포함하고 있는 CEIQueryEvent 객체로 리턴된다.


그림 4. CEIQueryService 클래스 다이어그램
CEIQueryService 클래스 다이어그램

CEIQueryWebService를 호출하는 방법을 보여주는 샘플이 있다. 이 샘플을 통해, 생성된 프록시를 사용하여 웹 서비스를 테스트 할 수 있다. TestClient.jsp를 선택하고, Run > Run on Server를 선택한다. 웹 브라우저가 열리면, 실행할 연산을 선택할 수 있다. 서비스가 원격 호스트에 전개되어 있을 경우 엔드포인트를 바꿔야 한다.

주: 모든 프로젝트들을 성공적으로 컴파일 하려면, WPS_RUNTIME/CEI/client/events-client.jar 파일이 프로젝트 빌드 경로에 있어야 한다. WPS_RUNTIME은 WebSphere Process Server가 설치된 디렉토리이다. (C:/Program Files/IBM/Rational/SDP/6.0/runtimes/bi_v6)

CEIMeteringViewPortlet 사용하기

CEIMeteringViewPortlet(그림 5)는 CEIEventEmitter로 생성되었던 측정 이벤트들을 볼 수 있는 포틀릿이다. CEIMeteringPortlet은 CEIQueryService를 사용하여 이벤트를 검색하고 이들을 포틀릿 페이지에서 리스팅 한다. (그림 6) 이 포틀릿에서는 사용자들이 날짜, 에이전트, 등록자에 따라서 이벤트들을 정렬할 수 있다.


표 3. 필드 설명
기준사용법
Start date이 날짜 이전에 생성된 어떤 이벤트도 보이지 않는다.
End date이 날짜 이후에 생성된 어떤 이벤트도 나타나지 않는다.
Agent이 에이전트가 생성한 이벤트들이 보인다. 에이전트는 이벤트 소스를 나타내는 스트링이다. 이벤트를 보내기 위해 애플리케이션이 선택한 임의의 스트링이다. 이는 CBE의 sourceComponentId/@application 애트리뷰트에 상응한다.
Subscriber등록자가 등록한 이벤트가 나타난다. 등록자는 이벤트 소스가 선택한 스트링이다. 이 이벤트와 관련된 당사자들을 나타낸다. 이는 SubscriberID 이름을 가진 CBE의 ExtendedDataElement에 상응한다.

필터링 기준 영역은 선택적이다. 포틀릿은 이벤트를 필터링 하기 위해 사용할 수 있는 기준만 사용한다. 이 기능은 많은 이벤트들에 특히 유용하다.

이 포틀릿의 기능들 중 하나는 XPATH 쿼리 스트링을 사용하여 필터링을 하는 기능이다. CEIMeteringPortlet는 사용자가 정한 기준으로 XPATH 쿼리 스트링을 만들고 이 쿼리 스트링을 CEIQueryService로 보낸다. CEIQueryService는 XPATH 쿼리 스트링을 사용하여 이벤트를 검색하고 비 순응 이벤트들을 가려낸다.


그림 5. CEIMeteringViewPortlet의 클래스 다이어그램
CEIMeteringViewPortlet의 클래스 다이어그램

그림 6. CEIMeteringViewPortlet 요약
CEIMeteringViewPortlet 요약

하나의 이벤트를 선택하여 애트리뷰트를 상세히 볼 수도 있다. (그림 7)


그림 7. CEIMeteringPortlet 상세 보기
CEIMeteringPortlet 상세 보기

결론

지금까지, 측정 가능한 복합 애플리케이션을 만드는 것이 왜 중요한지를 설명했다. 비즈니스 레벨 이벤트의 역할과, 복합 애플리케이션에서 비즈니스 레벨 이벤트를 생성하고, 쿼리하며, 보는데 사용할 수 있는 세 개의 아티팩트들을 설명했다. 이러한 재사용 가능한 아티팩트들 덕택에, 복합 애플리케이션들을 측정할 수 있고, 더 나아가 전체적인 비즈니스 프로세스를 향상시킬 수 있다.













다운로드 하십시오

설명이름크기다운로드 방식
서버 측 프로젝트1assetsserviceside.zip117KBHTTP
클라이언트 측 프로젝트assetsportlet.zip2832KBHTTP
다운로드 할 수 있는 모든 프로젝트 리스트projectlist.zip6KBHTTP

다운로드 방식에 대한 정보

Note

  1. 본 아티팩트들은 Project Interchange Format으로 제공됩니다. 반입하려면 File>Import를 선택한 다음 Project Interchange를 선택하십시오.

참고자료

교육

토론

필자소개

Photo of Javier Garcia

Javier Garcia는 20년 개발 경력을 지닌 자문 소프트웨어 엔지니어이다. 현재 SWG Strategy and Technology 부서에서 SOA와 복합 애플리케이션 관련 작업을 하고 있다.

Photo of DuoWei (David) Sun

DuoWei (David) Sun은 China Software Development Lab (CSDL) 소속 소프트웨어 엔지니어이다. 현재 SOA 개발 분야에서 일하고 있다.

Photo of Zhi (James) Gan

Zhi Gan은 IBM China Development Lab 소속 소프트웨어 엔지니어이다. Shanghai JiaoTong University에서 박사 학위를 받은 후에 IBM에 입사했다. SOA, AOP, Eclipse가 전문 분야이다. 현재 모델 중심 개발 분야에 집중하고 있다.

잘못된 도움말 신고

부정사용 신고

감사합니다. 이 항목은 운영자가 관심을 표시했습니다.


잘못된 도움말 신고

부정사용 신고

제출실패 신고. 나중에 다시 실행해주세요.


디벨로퍼웍스 로그인


IBM ID가 필요하세요?
IBM ID를 잊으셨습니까?


비밀번호를 잊으셨습니까?
비밀번호 변경

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관.

 


developerWorks에 처음 로그인하면 developerWorks프로파일이 생성됩니다.귀하의 프로파일에서 동의하신 내용이 공개되지만 이 사항은 언제든지 변경 가능합니다. 귀하의 성명(숨김으로 체크되어 있어도 표시됩니다)과 디스플레이 이름은 게시한 컨텐츠나 사이트 엑세스시 표시됩니다.

화면상에 보여지는 닉네임을 정하세요.

처음 developerWorks에 로그인할 때 프로파일이 작성되므로, 이를 위해 디스플레이 이름을 선택해야 합니다. 선택하신 디스플레이 이름은 developerWorks에 게시한 컨텐츠에 표시됩니다.

3글자 이상 31글자 이하의 길이로 사용 가능합니다. dW커뮤니티 내에서는 보안상 이메일주소를 제외한 다른 이름을 지정하셔야 합니다.

3개의 &이나 대쉬를 포함해주시고 31글자내로 제한해주세요.


developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관.

 


아티클 순위

의견

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=20
Zone=SOA와 웹서비스
ArticleID=230151
ArticleTitle=SOA 복합 비즈니스 서비스 구현하기, Part 4: Common Event Infrastructure에서 측정 가능한 복합 애플리케이션 개발하기 (한글)
publish-date=06122007
author1-email=javierg@us.ibm.com
author1-email-cc=flanders@us.ibm.com
author2-email=sunduow@cn.ibm.com
author2-email-cc=flanders@us.ibm.com
author3-email=ganzhi@cn.ibm.com
author3-email-cc=flanders@us.ibm.com

태그

Help
검색 필드를 사용하여 My developerWorks 내에서 해당 태그가 사용된 모든 종류의 컨텐츠를 검색하십시오.

태그를 더 많이 보거나 적게 보기 위해 슬라이더 막대를 사용하십시오.

인기 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 최고 인기 태그를 보여줍니다.

내 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 귀하의 태그를 보여줍니다.

검색 필드를 사용하여 My developerWorks 내에서 해당 태그가 사용된 모든 종류의 컨텐츠를 검색하십시오. 인기 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 최고 인기 태그를 보여줍니다. 내 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 귀하의 태그를 보여줍니다.