SOA 베스트 프랙티스: BPEL Cookbook

워크플로우/프로세스 모니터링을 위한 리치 인터넷 애플리케이션(RIA)의 구현
저자 Doug Todd

Oracle BPEL Manager API를 확장하여 실시간 워크플로우/프로세스 모니터링 대시보드를 구현하는 방법을 설명합니다.

전체 BPEL Cookbook 목록

아티클 관련 다운로드:
Oracle BPEL Process Manager

게시일: 2005년 11월

점점 더 많은 기업들이 운영 효율성을 개선하기 위한 목적으로 핵심 비즈니스 프로세스를 자동화하고 있습니다. 하지만, 자동화된 프로세스라 하더라도 수작업 요소의 개입이 불가피한 상황이 두 가지 있습니다. 그 하나가 다음 단계로의 프로세스 진행(워크플로우)이 필요한 경우, 이고 또 하나가 엔드유저를 위한 실시간 프로세스 가시성(프로세스 모니터링)이 필요한 경우입니다.

새로운 은행 계좌를 열기 위한 비즈니스 프로세스를 생각해 봅시다. 먼저 고객은 계좌를 여는데 필요한 상세 정보(이름, 주소, 주민등록번호, 최초 예치금)를 입력합니다. 일단 프로세스가 시작되면, 사용자는 요청 처리 상황을 추적하고 은행으로부터 전달되는 추가적인 질의에 신속하게 응답할 수 있기를 원할 것입니다. 이와 같은 프로세스가 구현되려면 고객이 참여하는 형태의 워크 플로우가 필요하며, 또 고객이 요청 상황을 추적하기 위한 프로세스 모니터링이 마련되어야 합니다.

Oracle BPEL Process Manager는 기본적인 워크플로우 기능과 프로세스 액티비티 모니터링 기능을 제공하고 있습니다. 하지만 더 나아가, Oracle BPEL Process Manager의 프로세스, 인스턴스, 워크플로우 관련 방대한 API를 활용하여 고급 워크플로우 및 프로세스 액티비티 모니터링을 가능하게 하는 리치 인터넷 애플리케이션(RIA)를 구현하는 것 또한 가능합니다. 고급 워크플로우 기능을 이용하면 사용자와 프로세스 간의 커뮤니케이션 지연 요소를 원천적으로 제거할 수 있고, 고급 프로세스 액티비티 모니터링은 워크플로우에 프로세스 상태 정보를 실시간으로 전달하고 적절한 조치가 취해지는 것을 가능하게 합니다.

"BPEL Cookbook" 시리즈의 이번 연재에서는, 실시간 워크플로우 및 고급 프로세스 액티비티 모니터링 기능을 필요로 하는 샘플 비즈니스 시나리오를 검토해 보기로 하겠습니다. 또 BPEL Process Manager API를 활용한 Macromedia Flash 기반의 RIA 아키텍처를 살펴보고, RIA를 이용하여 프로세스를 시작하고 워크플로우를 통합하는 방법에 대해 설명하겠습니다. 그리고 사용 가능한 프로세스 경로와 현재 인스턴스에서 선택한 경로 등을 시각화하는 방법을 배우실 수 있을 것입니다 (이 기능은 프로세스 검토 시 매우 요긴하게 활용됩니다). 마지막으로, API 인터페이스를 이용하여 감사 로그를 저장하는 방법을 설명합니다.

RIA 배경 정보

RIA는 웹 애플리케이션과 고전적인 데스크탑 애플리케이션의 하이브리드 솔루션으로, JavaScript, Flash, Java Applets, XML User Interface Markup Language (XUL), Extensible Application Markup Language (XAML), JavaServer Faces, Swinglets 등의 “인터액티브” 테크놀로지를 이용하여 구현되며, 경우에 따라 AJAX (Asynchronous XML and JavaScript) 방식이 적용되기도 합니다. RIA는 온라인 애플리케이션의 사용편의성과 효율성 뿐 아니라 개발자의 생산성 또한 개선하는 효과를 제공합니다. 가트너 그룹의 분석에 따르면, 2010년까지 신규 애플리케이션의 최소 60%가 RIA 테크놀로지를 어떤 형태로든 포함하고 있을 것으로 예측되고 있습니다.

본 문서의 샘플 애플리케이션은 통합적인 대시보드 형태의 BPEL 워크플로우 인터페이스와 프로세스 모니터링 콘솔로 구성되어 있습니다. 이 애플리케이션이 Oracle BPEL Console, 또는 진정한 의미의 Business Activity Monitoring (BAM)과는 분명한 차이를 갖는다는 사실을 명심하시기 바랍니다. 특정 기능은 중복되는 것이 사실이지만, RIA가 타겟으로 하는 사용자 커뮤니티는 Oracle BPEL Console과 BAM이 타겟으로 하는 대상과 극명한 대조를 보입니다. BPEL Console은 프로세스 인스턴스의 디버깅, 구축, 유지보수를 담당하는 운영자 및 개발자에게 보다 적합하며, BAM은 프로세스 소유자(임원, LOB 관리자 등), 또는 KPI(key performance indicators)를 측정하거나 프로세스를 최적화하기를 원하는 IT 관리자들을 위한 애플리케이션으로 활용됩니다. 이에 반해, RIA 애플리케이션은 엔드유저, 다시 말해 KPI, 프로세스 개선 등에는 관심이 없고 비즈니스 프로세스의 상태를 추적할 수 있기를 원하는 고객, 파트너, 공급업체 등을 주요 대상으로 합니다.

샘플 프로세스

샘플 비즈니스 프로세스인 "New Account Request”는 금융중개 업체 및 해당 업체의 금융 파트너(보험 업체 및 금융분석기관), 뮤추얼 펀드 업체, 어음교환소 등을 위한 계좌를 생성하는, 금융기관 커뮤니티를 위한 애플리케이션입니다. 여기에서는 프로세스의 처음 두 단계에 초점을 맞추기로 합니다.

  1. 프로세스에 고객의 SSN(사회보장번호)을 입력하면, 데이터베이스로부터 고객의 정보(이름, 주소)가 조회됩니다.
  2. 고객이 조회된 데이터를 승인하고, 일정 금액을 이체한 후 Submit 버튼을 누릅니다.
여기서 고객은 SSN을 입력하고, 이름 및 주소를 승인하고, 이체 금액을 결정하기 위한 워크플로우 인터페이스를 필요로 합니다. 또 고객이 프로세스의 진행 상황을 시각적으로 모니터링할 수 있는 기능이 필요합니다.

다음 섹션에서는, 이와 같은 애플리케이션을 개발하는 과정에서 필요한 고려사항을 짚어보기로 하겠습니다. 그런 다음, New Account 비즈니스 프로세스를 실행하는 방법을 설명하기로 합니다.

애플리케이션의 구현

앞에서 설명한 것처럼, 애플리케이션은 두 가지 설계 목적을 갖습니다:

  • 사용자가 프로세스 상태를 추적하고 필요한 경우 정보를 입력할 수 있는 RIA 사용자 인터페이스를 제공한다. (RIA 프론트엔드)
  • 고급 프로세스 모니터링 환경을 제공한다. (BPEL Process Manager API 백엔드)

RIA 프론트엔드. RIA 사용자 인터페이스는 애플리케이션의 “얼굴” 부분으로, New Account 비즈니스 프로세스의 실행 및 관리를 담당합니다. 프리젠테이션 계층은 Macromedia Flex 테크놀로지와 ActionScript 스크립팅 언어를 사용하여 구현되며, 사용자 입력을 받아들이고 BPEL 프로세스에 이를 전달하는 역할을 수행하게 됩니다. 또 프로세스의 현재 상태를 디스플레이하는 기능이 추가됩니다.

그림 1은 New Account 비즈니스 프로세스를 위한 RIA 프론트엔드를 보여주고 있습니다.

figure 1

그림 1
New Account 프로세스를 위한 RIA 프론트엔드

프로세스의 네 가지 주요 컴포넌트와 그 핵심 기능이 아래와 같습니다:

  • Workflow Bar: Workflow Bar는 사용자가 비즈니스 레벨에서 New Account 프로세스의 워크플로우 단계를 조회하는 기능을 제공합니다. Workflow Bar의 각 단계는 BPEL Panel에서 상세 조회가 가능합니다.
  • BPEL Panel: BPEL Panel은 New Account 프로세스의 각 단계에 대한 상세 뷰를 제공합니다. BPEL Panel은 특정 프로세스 인스턴스의 프로세스 모델과 감사 로그를 다이내믹하게 읽어 들이고, 선택 가능한 프로세스 경로와 현재 인스턴스가 선택한 경로를 함께 표시합니다. 또 감사 로그를 조회하여 현재 대기 중인 작업이 무엇인지 확인하고, 현재 프로세스의 상태를 시각적으로 표시해 줍니다. 이전에 실행된 프로세스의 특정 노드를 클릭하면, 각각의 성능부하(payload)를 조회할 수 있습니다. 이와 같은 기능을 통해 운영 관리자와 컴플라이언스 관리자가 과거, 현재, 그리고 미래의 프로세스 상태에 대한 가시성을 확보하도록 할 수 있습니다.
  • Workflow Forms: Workflow Form은 New Account BPEL 프로세스의 개별 워크플로우 단계에 대응됩니다. Flex “뷰 스택(view stack)”은 비즈니스 프로세스의 감사 로그와 커뮤니케이션을 수행하며, BPEL 프로세스의 컨텍스트에 맞게 뷰 스택을 다이내믹하게 변경합니다.
  • Zones: Zone은 경고 및 피드백을 통해 작업을 수행하는 사용자의 워크플로우 및 프로세스를 지원합니다.
    (본 문서에서는 다루어지지 않습니다.)
각각의 패널은 BPEL API와 연동하면서 매우 뛰어난 사용편의성을 제공합니다. 그럼 RIA 프론트엔드를 실행하기 위한 백엔드 API 함수들을 살펴보기로 합시다.

BPEL Process Manager API 백엔드. BPELService 클래스는 RIA 프로세스와 BPEL Process Manager API의 프로세스 액티비티 모니터링 기능 간의 상호작용을 관장합니다. 그림 2와 아래 표에서 확인할 수 있듯, BPELService는 BPEL Process Manager API의 다섯 가지 인터페이스를 이용하여 워크플로우 기반 프로세스 액티비티 관리 및 모니터링 기능을 구현합니다.

figure 2

그림 2
UI/BPELService 기능 매핑

인터페이스

사용자 제공 기능...

IDeliveryService

BPEL 프로세스 도메인에 구현된 프로세스로부터 인스턴스를 호출

IBPELProcessHandle

BPEL 프로세스 도메인에 구현된 BPEL 프로세스를 탐색

IInstanceHandle

액티브 인스턴스에 대해 작업을 실행

ITask

프로세스 도메인 상에서 인스턴스화된 태스크와 상호작용 수행

IWorklistService 프로세스 도메인 상에서 인스턴스화된 작업을 검색하고 실행을 완료

RIA 및 BPELService의 기본적인 구성요소를 이해하셨다면, 이제 이러한 구성요소가 어떻게 통합되는지 살펴보기로 하겠습니다.

New Account 프로세스의 실행

앞에서 설명한 것처럼, 사용자는 제일 먼저 워크플로우 패널의 입력 스크린에서 SSN을 입력하게 됩니다. 사용자가 Submit을 클릭하는 순간, ActionScript가 "New Account Application" XML 문서를 생성하고, Flex의 Remote Object Architecture를 통해 BPELService 서버사이드 Java 클래스에 전달합니다. (이와 같은 메커니즘을 통해 BPELService와 같은 Java 오브젝트와 Flex 간의 직접적인 커뮤니케이션이 가능합니다.) Java 컴포넌트는 IDeliveryService 인터페이스의 인스턴스를 이용하여 BPEL 프로세스를 시작합니다. 아래의 initiateProcess Java 메소드는 새롭게 생성된 비즈니스 프로세스 인스턴스의 reference-id를 Flex 클라이언트에 반환합니다. 이후 reference-id는 비즈니스 인스턴스의 구분을 위해 지속적으로 활용됩니다.

  
/**
* This function initiates an instance of a BPEL PM process based on the
* process name. The function sets the function id and the reference id for
* future use.
* 
* @param xmlRequest
*            is the initiating request message for the process
* @param strBusinessProcess
*            the business process name
* @return the initiating response message for the process
*/
public String initiateProcess(Document xmlRequest, String strBusinessProcess) {
  
System.out.println("Initiate" + strBusinessProcess);
/*
* This interface allows users to invoke instances from processes
* deployed on a BPEL process domain.
*/
IDeliveryService deliveryService = getDeliveryService();
/*
* Construct the normalized message and send to Oracle BPEL process
* manager
*/
NormalizedMessage nm = new NormalizedMessage();
nm.addPart(PAYLOAD, xmlRequest.getDocumentElement());
  
NormalizedMessage responseNm = null;
try {
responseNm = deliveryService.request(strBusinessProcess, PROCESS,
nm);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("Could not initialize process.");
}
Map payload = responseNm.getPayload();
Document xmlResponse = getXMLDoc(XMLHelper
.elementToString((Element) payload.get(PAYLOAD)));
/*
* Sets the Instance reference ID for interagating active BPEL
* instances.
*/
setInstanceReferenceId(strBusinessProcess, xmlResponse);
  
return XMLHelper.elementToString(xmlResponse.getDocumentElement());
}
 
워크플로우의 활성화. 아래 그림 3에서 보여지듯, 고객의 데이터는 BPEL 프로세스를 통해 외부 시스템으로부터 조회되며, 워크플로우 패널을 통해 디스플레이됩니다. 사용자는 데이터를 검증하고, 예치 금액을 입력한 후 OK를 클릭합니다.

figure 3

그림 3
고객 데이터의 검증 및 예치 금액의 입력

이러한 워크플로우 기능은 ITask와 BPEL Process Manager가 제공하는 IWorklistService 인터페이스를 기반으로 구현됩니다. RIA는 IWorklistService 의 태스크와 주어진 태스크를 완료하는데 필요한 워크플로우 스크린을 연계합니다. 필요한 검증 작업이 완료되는 경우, 사용자 인터페이스는 아래의 completeTask 메소드로 원격 오브젝트 호출을 발생시키고 UI에 캡처된 데이터를 BPEL 프로세스에 전달합니다.

  
/**
* This function gets the use input from workflow zone, relates it to a task 
* and completes the task. The function uses instance reference id for
* identifying process instance.
*/
  
public String completeTask(String strInstanceReferenceID,
String strActivityLabel, Document payload) {
System.out.println("completeTask-" + strInstanceReferenceID + "-"
+ strActivityLabel);
String strStatus = "OK";
try {
IWorklistService worklist = getWorklist();
// get task reference
ITask task = getTask(strInstanceReferenceID, strActivityLabel);
  
// set task payload
task.setAttachment(payload.getDocumentElement());
  
worklist.completeTask(task);
  
} catch (Exception e) {
e.printStackTrace();
strStatus = ERROR_STRING;
}
return strStatus;
}
위 코드는 ITask 인터페이스가 제공한 태스크 첨부(task attachment)에 특정 데이터를 입력하는 작업을 수행합니다. 이 인터페이스를 통해 BPEL 프로세스에 관련 데이터가 전달될 뿐 아니라, BPEL 프로세스의 감사 로그에 데이터를 기록하는 작업 또한 수행됩니다.

다음으로, RIA 애플리케이션의 또 다른 핵심 속성인 프로세스 모니터링을 구현하는 방법을 설명해 보겠습니다.

프로세스 액티비티의 모니터링

위에서 설명한 처음 두 단계(프로세스의 시작 및 워크플로우의 활성화)가 진행되는 동안, 프로세스의 상태는 IProcessHandle and IInstanceHandle API 인터페이스를 통해 업데이트됩니다.

Oracle BPEL Console은 BPEL 프로세스의 구축, 관리, 운영, 디버깅을 위한 웹 기반 인터페이스를 제공합니다. 이 인터페이스는 JSP 페이지와 BPEL Process Manager API를 호출하기 위한 서브렛(servlet)을 이용하여 설계됩니다. 또는, API를 이용하여 비즈니스 레벨 프로세스 모니터링 인터페이스를 제공하는 RIA 콘솔을 쉽게 개발할 수 있습니다.

이 콘솔은 프로세스의 특정 인스턴스에 대한 비주얼 피드백을 제공하고, 또 프로세스의 특정 단계에 관련된 감사 로그의 링크를 함께 제공합니다. 하지만 RIA 콘솔의 가장 큰 장점은 “actual vs. planned” 분석 기능에 있습니다. 콘솔은 프로세스가 실행 과정에서 선택할 수 있는 모든 경로를 디스플레이하고, 실제로 실행 과정에서 선택된 경로를 함께 렌더링 합니다. 사용자는 임의의 프로세스 노드를 클릭하여 BPEL 페이로드를 조회하고 페이로드 정보를 대화상자에 표시할 수 있습니다.

엔드유저는 프로세스 경로에 대한 “actual vs. ideal” 분석 기능을 이용하여, IT 부서의 도움 없이도 프로세스를 분석하고 문제가 되는 부분을 발견해낼 수 있습니다. 그림 4는 “actual vs. ideal” 프로세스 경로 분석의 예를 보여주고 있습니다. "Actual” 경로는 초록색으로 표시되어 있습니다.

figure 4

그림 4
“Actual vs. ideal” 프로세스 경로 분석

다음으로, RIA 애플리케이션에서 분석을 위해 프로세스를 렌더링하고 감사로그를 조회하여 시각적으로 표시하는 방법을 알아보기로 하겠습니다.

프로세스의 렌더링

Flex BPEL Panel 컴포넌트는 IProcessHandle 인터페이스에 대한 호출을 통해 비즈니스 모델의 XML 표현을 가져옵니다. BPEL 패널은 IInstanceHandle 인터페이스를 이용하여 현재 인스턴스의 감사 로그에 대한 XML 표현을 가져옵니다. 그런 다음, BPEL Panel은 두 개의 XML 표현을 비교 및 병합함으로써, 전체 모델 및 경로를 표시하기 위한 사용자 인터페이스를 생성합니다.

Flex는 네이티브 XML 지원 기능을 제공한다는 점에서 이러한 작업에 매우 적합합니다. Flex의 리피터 컨트롤(repeater control)과 ActionScript를 조합하면 두 개의 XML 표현을 쉽게 병합할 수 있습니다. Flex와 ActionScript는 XML을 어레이로 변환하고, 어레이 처리 기능을 통해 XML을 병합하는데 필요한 모든 기능을 제공하고 있습니다.

Process Model XML은 모든 사용 가능한 노드에 대한 정보를 포함하고 있으며, 따라서 BPEL Panel을 위한 기반으로 활용됩니다. Process Model의 각 단계별로, Process model ID와 감사 로그의 model ID가 비교됩니다. 프로세스와 감사 로그의 ID가 일치하는 경우, 해당 노드의 결과값이 감사 로그 모델로부터 프로세스 모델로 복사됩니다. 이 과정에서 어떤 프로세스 경로가 사용되었는지 확인하는 것은 쉽습니다. 모델의 어떤 노드가 실제 인스턴스 데이터를 가지고 있는지 조회하기만 하면 됩니다.

아래 코드는 getProcessModel 메소드와 getInstanceAuditTrail 메소드의 구현 방법을 예시하고 있습니다.

getProcessModel method

/**
* This function gets the debugger XML model of a given BPEL process.
* 
* The function returns the xml model.
* 
* 
* @param strProcessID
*            the business process name.
* @return the xml process model.
*/
public String getProcessModel(String strProcessID) {
	System.out.println("getProcessModel - " + strProcessID);
	String strProcessModel = "";
	try {
		IBPELProcessHandle process = getLocator().lookupProcess(
				strProcessID);
		// Returns the debugger XML model of this BPEL process.
		strProcessModel = process.getProcessModel();
	} catch (Exception e) {
		e.printStackTrace();
		strProcessModel = ERROR_STRING;
	}
	return strProcessModel;
}
getInstanceAuditTrail method
/**
* This function gets the XML audit trail of a given BPEL process.
* 
* The function returns the xml model.
* 
* 
* @param strProcessID
*            the business process name.
* @return the xml process model.
*/
public String getInstanceAuditTrail(String strInstanceReferenceID) {
	System.out.println("getInstanceAuditTrail - " + strInstanceReferenceID);
	String strResponse = "";
	try {
	 IInstanceHandle instance = getInstance(strInstanceReferenceID);
		// Returns the XML representation of the audit trail of this
		// instance.
		strResponse = instance.getAuditTrail();
	} catch (Exception e) {
		e.printStackTrace();
		strResponse = ERROR_STRING;
	}
	return strResponse;
}
감사 로그 데이터의 조회

감사 로그 데이터는 이미 실행된 프로세스의 각 노드 별로 활용이 가능합니다. 이 기능은 BPEL Console이 제공하는 기능과 유사합니다. Flex 사용자 인터페이스는 사용자 인터페이스에서 선택된 프로세스의 노드에 대해 상세 데이터를 조회하는 기능을 수행합니다.
(그림 5 참고).

figure 5

그림 5
V페이로드 정보의 조회

감사 로그 데이터를 조회하기 위한 ActionScript 2.0 코드가 아래와 같습니다:

bpelObject.bpelDetails = eventData.event.details.data;
Flex 인터페이스는 폴링을 통해 현재 비즈니스 프로세스의 상태를 확인하고, 감사 로그의 변화를 추적하여 비즈니스 프로세스에서 대기 중인 단계가 존재하는지 확인합니다. 변경 사항이 감지된 경우, Flex 애플리케이션은 원격 호출을 통해 감사 로그를 가져오고 새로운 “current instance trace”를 요청합니다. 그런 다음 새로운 인스턴스 트레이스를 이용하여 각 BPEL 프로세스 사용자 태스크와 연관된 입력 스크린에 데이터를 디스플레이합니다. Flex 클라이언트 입력 스크린은 activity Correlation-ID를 통해 BPEL 프로세스의 각 단계와 매칭됩니다.

결론

프로세스 성능에 대한 시각적인 표현 및 태스크 통합 기능은 비즈니스 프로세스의 가치를 더욱 향상시키는 역할을 수행합니다. 본 문서를 통해 제시된 애플리케이션은 엔드유저에게 시각적인 면에서 매우 강한 호소력을 갖고 있습니다.

지금까지 설명된 것처럼, RIA는 신규 SOA 애플리케이션을 위한 느슨하게 통합된(loosely-coupled) 프리젠테이션 계층 접근방법을 제공합니다. RIA 프론트엔드와 SOA 백엔드를 조합함으로써, 기업은 인터넷 애플리케이션의 관리 및 구축 비용을 절감할 수 있을 것입니다.


Doug ToddDoug Todd는 지금까지 설명된 것처럼, RIA는 신규 SOA 애플리케이션을 위한 느슨하게 통합된(loosely-coupled) 프리젠테이션 계층 접근방법을 제공합니다. RIA 프론트엔드와 SOA 백엔드를 조합함으로써, 기업은 인터넷 애플리케이션의 관리 및 구축 비용을 절감할 수 있을 것입니다.

여러분의 의견을 보내 주십시오
E-mail this page
Printer View Printer View