대메뉴 바로가기 본문 바로가기

데이터 기술 자료

데이터 기술 자료 상세보기
제목 BPEL과 J2EE: 두 언어의 장점의 조합
등록일 조회수 5166
첨부파일  

BPEL과 J2EE: 두 언어의 장점의 조합

Mike Lehmann | Oracle Application Server Containers for J2EE 담당 수석프로덕트매니저

J2EE 1.4가 발표되면서, J2EE 개발자와 BPEL 개발자가 함께 협력하여 다수의 서비스를 하나의 비즈니스 프로세스로 통합하는 것이 가능하게 되었습니다.
BPEL과 J2EE를 이용한 애플리케이션 구축과정에서 개발자가 고려해야 하는 통합 포인트에 대해 설명하였습니다.

BPEL(Business Process Execution Language)는 느슨한 형태로 연계된 여러 개의 웹 서비스들을 조합하여 롱-러닝 워크플로우(long running workflow)를 생성하고 이를 하나의 비즈니스 애플리케이션으로 통합하는 것을 주된 목적으로 합니다. J2EE 및 .NET 진영의 주요 벤더들이 적극적으로 BPEL을 지원하고 있는 것도, BPEL의 성숙도가 과거 플로우 랭귀지들의 그것을 훨씬 능가할 뿐만 아니라 XML 및 웹 서비스를 통한 언어 중립성의 제공에 초점을 맞추고 있기 때문입니다.
반면 J2EE는 퍼시스턴스(persistence), 엔터프라이즈 시스템 통합, 비즈니스 로직, 사용자 인터페이스 등을 위해 각각 개별적인 프로그래밍 접근법을 취하고, 이를 활용하여 객체 지향형 비즈니스 애플리케이션을 구축하는 것을 그 목적으로 합니다. J2EE의 대중성은 엔터프라이즈 애플리케이션을 구축하는 데 필요한 다양한 아키텍처와 스타일에 쉽게 적응할 수 있는 호환성에 기인한 바가 큽니다.
BPEL이 상위 레벨의 오브젝트를 대상으로 하고 데이타 조작 및 프로세스 플로우를 위한 기본적인 언어 요소들만을 가지고 있는데 반해, J2EE는 자바를 기반으로 하며 가장 낮은 수준의 오브젝트의 생성/조작을 가능하게 하는 요소들을 모두 포함하고 있습니다. 그렇다면 이 두 프로그래밍 접근법이 만나는 지점은 어디일까요? BPEL 개발자가 J2EE 애플리케이션을 어떻게 이용할 수 있을까요? 또 J2EE 개발자가 BPEL 프로세스를 어떻게 이용할 수 있을까요?

웹 서비스

J2EE는 Java Connector Architecture(JCA), Java Messaging Service, Message Driven Beans 등 통합을 목적으로 개발된 다양한 프로그래밍 API를 보유하고 있습니다. JCA에 기반한 통합은 이제 성숙된 시장을 형성하고 있으며 Oracle, Siebel, SAP, PeopleSoft와 같은 벤더들이 ERP, CRM 등의 시스템을 위한 어댑터를 제공하고 있습니다.
그러던 중 약 6개월 전 J2EE 1.4가 발표되었고, 웹 서비스는 이제 J2EE의 통합 프로그래밍 API의 한 부분으로서 자리잡게 되었습니다. 이제 웹 서비스를 구현하는 J2EE 개발자가 백엔드 애플리케이션 로직을 공개하고, BPEL 개발자가 이를 이용하여 다양한 서비스를 하나의 비즈니스 프로세스로 통합하는 것이 가능하게 된 것입니다.
특히 J2EE 개발자들에게 인기를 얻고 있는 프로그래밍 API로는 JAX-RPC(Java API for XML Remote Procedure Calls), J2EE Web Services (또는 JSR 109라 불림), EJB 2.1 등이 있습니다. 이러한 API는 자바 클래스와 EJB를 웹 서비스에 연계하여 시스템을 구성하고 WSDL(Web Service Description Language)를 이용하여 인터페이스를 기술하는 것을 가능하게 합니다. OracleAS 10.0.3은 J2EE 1.4의 초기 모델 및 JAX-RPC를 지원합니다. OracleAS 10.0.3을 다운로드 하려면 이곳을 클릭하시기 바랍니다.
WSDL을 통해 정보를 제공받은 BPEL 프로세스는, 라 불리는 개념을 이용하여 웹 서비스를 호출합니다. 는 웹 서비스(WSDL) 내부의 오퍼레이션을 기술하는 BPEL 추상화의 한 종류입니다. 여기서 웹 서비스 오퍼레이션은, SOAP 메시지의 marshalling/unmarshalling을 지원하는 자바 클래스 또는 EJB 컴포넌트의 퍼블릭 오퍼레이션(public operation)을 의미합니다.

BPEL과 J2EE의 연계

웹 서비스가 대부분의 자바 플랫폼에 반영된 지 이미 오랜 시간이 지났고 앞에서 설명한 것처럼 웹 서비스 지원 기능이 J2EE 1.4 플랫폼에 구현되었지만, 많은 기업이 비즈니스적인, 기술적인 이유로 기존 애플리케이션 또는 애플리케이션 인프라스트럭처를 웹 서비스의 형태로 노출하는 것을 꺼리고 있습니다.
그 이유로, 정상적으로 운영되고 있는 미션 크리티컬 시스템을 변경하는 데 따르는 위험부담, 기술 인프라의 업그레이드를 위한 비용부담, 웹 서비스 레이어를 추가하는 데 따르는 성능저하의 위험 등이 언급되곤 합니다. 하지만 이러한 문제들로 인해 (BPEL의 존재 목적인) “통합”의 필요성 자체가 부인될 수는 없습니다. 다만 통합을 구현하는 방법이 달라질 수 있을 뿐입니다.
이러한 문제에 대해 BPEL 언어 자체가 해답을 제시할 수는 없지만, 대부분의 BPEL 프로세스 엔진이 두 가지 방법을 통해 문제 해결을 시도하고 있습니다. 그 하나가 자바에 대한 직접 호출(direct call-out)이고, 또 하나가 WSIF(Web Services Invocation Framework)라 불리는 프레임워크입니다.

자바에 대한 직접 호출(Direct Call-Outs to Java)

BPEL 프로세스 내부에 자바 코드를 실행하기 위한 특수 BPEL 태그를 삽입하는 방법입니다. 일반적으로 EJB를 호출하거나 JMS 큐 (또는 토픽)에 메시지를 올림으로써, EJB 또는 JMS 큐/토픽을 BPEL 프로세스의 통합 포인트로서 활용하는 방법이 사용됩니다.
이러한 방법이 성공하려면 먼저 선결되어야 할 두 가지 문제가 있습니다:

ㆍBPEL 변수와 Java 변수 간의 투명한 데이타 이동을 보장할 수 있는 메커니즘이 마련되어야 합니다.

ㆍJ2EE 런타임이 적절한 J2EE 프로토콜(RMI for EJB 등)을 사용하여 네이티브 호출(native call)을 수행할 수 있는 기능이 제공되어야 합니다. OracleAS BPEL의 경우, Process Manager가 자체적으로 J2EE 애플리케이션으로서 기능하기 때문에 두 번째 이슈는 문제가 되지 않습니다.

Oracle BPEL Process Manager 에 포함된 데모 LoanFlowPlus는 BPEL 프로세스가 세션 EJB를 호출하는 방법을 예시하고 있습니다.

<variables> <!-- input of this process --> <variable name="input" messageType="tns:LoanFlowPlusRequestMessage"/ <variable name="loanApplication" messageType="services:LoanServiceRequestMessage"/> </variables> <!--BPEL receive from a Web service call in--> <receive name="receiveInput" partnerLink="client" portType="tns:LoanFlowPlus" operation="initiate" variable="input" createInstance="yes"/> <!-- retrieve SSN using call out to session bean --> <bpelx:exec name="RetrieveSSN" language="java" version="1.4"> <![CDATA[ try { // Retrieve element from scope Element element = (Element)getVariableData("input","payload", "/loanApplication"); // Create an XMLFacade for the LoanApplication Document LoanApplication xmlLoanApp = LoanApplicationFactory.createFacade(element); // Manipulate XML document through typed facade String email = xmlLoanApp.getEmail(); // Use session bean to access external data source and lookup // the SSN of the customer based on his email. CustomerHome cHome = (CustomerHome) lookup("ejb/entities/Customer"); Customer customer = (Customer) cHome.findByPrimaryKey( email ); xmlLoanApp.setSSN(customer.getSSN()); . . . ]]> </bpelx:exec> <!-Continue BPEL process --> . . .

Web services Invocation Framework (WSIF)

기존 시스템에 영향을 주지 않는 두 번째 문제 해결 방법으로 WSIF가 있습니다. WSIF는 Apache에 의해 제안된 오픈 소스 프레임워크입니다. WSIF는 Oracle BPEL Process Manager에 이미 내장되어 있으며 향후 Oracle Containers for J2EE의 10.0.3 릴리즈에 포함되어 Oracle Application Server와의 호환성을 제공할 예정입니다. WSIF는 EJB, JCA 어댑터, JMS 큐/토픽의 백엔드 리소스에 대해 WSDL를 사용한 기술(description)을 가능하게 하는 한편, 이러한 리소스가 네이티브 프로토콜을 사용하여 호출되는 것을 방해 받지 않도록 보장하는 것을 목적으로 합니다.
WSIF를 사용하는 경우, BPEL 프로세스에 의해 호출되는 리소스가 (WSDL로 기술된) 일반적인 웹 서비스처럼 보이게 된다는 장점이 있습니다. 별도로 자바 프로그래밍을 수행할 필요가 없으며, 네이티브 BPEL 언어를 사용하여 마치 BPEL 런타임이 하부 리소스와 네이티브 바인딩을 수행하는 것처럼 구성할 수 있습니다. 이러한 접근법을 사용하는 경우, 네이티브 프로토콜의 성능을 보장하는 동시에 웹 서비스의 추상화 혜택을 누릴 수 있게 됩니다.
이러한 접근법의 효과를 가장 극명하게 보여주는 것이 BPEL Process Manager 환경에 포함된 JCA 어댑터입니다. 대부분의 ERP 및 CRM 벤더들은 WSIF를 이용한 바인딩과 BPEL 프로세스와의 통합을 지원하는 JCA 어댑터를 출시하고 있으며, 이로 인해 표준에 기반한 비즈니스 프로세스 통합의 실현이 한층 가까운 현실로 다가오고 있습니다.

J2EE와 BPEL

BPEL이 Java를 호출하고, Java가 다시 BPEL을 호출하는 관계를 이해하기 위해서는, 모든 BPEL 프로세스가 웹 서비스의 형태로 구현되며, 따라서 다른 웹 서비스와 마찬가지로 WSDL에 의해 기술된다는 사실을 명심할 필요가 있습니다. 그러므로 BPEL 프로세스를 호출해야 하는 J2EE 프로그램은 해당 플랫폼의 WSDL을 실행하여 웹 서비스 클라이언트를 먼저 구현해야 합니다. 앞에서 설명한 것처럼 J2EE 1.4에서 WSDL을 표준 Java API로 구현하고 있으므로, 조만간 모든 기업 환경에서 활용이 가능하게 될 것입니다.
Oracle BPEL Process Manager는 JSP(JavaServer Page) 개발자의 작업 편의성을 한층 향상시킵니다. BPEL 또는 웹 서비스의 개념에 익숙하지 않은 JSP 개발자도, BPEL 프로세스 호출을 위해 설계된 JSP 태그 라이브러리들을 이용하여 쉽게 BPEL 프로세스를 호출할 수 있습니다. 태그 라이브러리 인식기능을 갖춘 Oracle JDeveloper와 같은 툴을 이용하면 몇 번의 클릭만으로 태그 라이브러리를 추가하고 Oracle BPEL Process Manager와의 통합을 수행할 수 있습니다.

결론

이 문서를 통해, BPEL과 J2EE를 이용한 애플리케이션 구축과정에서 개발자가 고려해야 하는 통합 포인트에 대해 설명하였습니다. BPEL과 J2EE는 전혀 다른 설계 목적을 가지고 개발된 언어이지만, 상호보완적이며 함께 사용되는 경우 이전에는 가능하지 않았던 새로운 형태의 애플리케이션을 개발할 수 있는 잠재력을 내포하고 있습니다.

 

제공 : DB포탈사이트 DBguide.net