Oracle9i JDeveloper 를이용한웹서비스의개발및구축 소개웹서비스는 새로운기술 (new kids on the block) 로서성장기의모든기술이그랬던것처럼약간의문제를가지고있으며이해하기까지다소시간이걸릴뿐만아니라항상무언가새로운것으로여러분을테스트할수있습니다. 이러한상황에서개발자는웹서비스를어떻게시작할수있을까요? 보다숙련된개발자의경우는개발, 디버깅및배포사이클의속도를어떻게높일수있을까요? 본백서에서는이러한질문에대한빠른해결책을제공할수있을것입니다. 다음과같은단계에따라웹서비스를개발하는데따른기본사항을다루게될것입니다. 웹서비스모델링 EJB 기반의웹서비스개발 EJB 웹서비스퍼블리싱 Oracle9i Application Server 및 Apache SOAP 서버로웹서비스배포하기 WSDL를이용한작업 웹서비스클라이언트의개발 써드파티웹서비스의통합웹서비스의개발, 디버깅및배포의생산성을최대한높이기위해여기에서는 Java, XML 및웹서비스환경을하나로통합한 Oracle9i JDeveloper를사용할것입니다. 웹서비스개요 웹서비스는모든언어로작업하는애플리케이션개발자가손쉽게호출할수있고충분히설명된인터페이스를제공하는인터넷애플리케이션입니다. 애플리케이션을웹서비스로퍼블리싱하기위해많이사용되는간단한표준은다음과같습니다. SOAP(Simplified Object Access Protocol): 웹서비스를호출하는데사용되는프로토콜 WSDL(Web Services Description Language): 웹서비스의기술자또는정의 UDDI(Universal Description, Discovery and Integration): 웹서비스가있는레지스트리이표준은 J2EE RMI(Remote Method Invocation), Net9i(Oracle9i Database 네트워크 ( 프로토콜 ) 및 DCOM( 마이크로소프트의분산컴포넌트모델프로토콜 ) 같이내부적인작업에초점을맞춘프로토콜에비하면인터넷중심의인터넷가능한편리한분산프로그래밍호출입니다.
웹서비스애플리케이션이수행한비즈니스논리는 Java와 PL/SQL을포함한모든언어로작성할수있습니다. 사실, 모델링, 프로그래밍, 보안및기본컴포넌트모델을포함한대부분의개발사이클은웹서비스로변경되지않습니다. 변경이이루어지게될경우설명하고 (WSDL), 액세스하고 (SOAP), 퍼벌리싱하기 (UDDI) 위한추가단계가수행됩니다. 표 1은웹서비스의개요를나타내고있습니다. Web Service Client XML SOAP HTTP(S) Invoke (SOAP) Query UDDI Internet Web Service Directoty Publish WSDL Web Service Provider 그림 1: SOAP, WSDL 및 UDDI 의웹서비스 웹서비스는자주근본적으로새로운개념으로과대선전되지만사실은개념적으로 J2EE, Corba 및 DCOM과같은다른분산프로그래밍모델과매우유사합니다. 그러나한가지중요한차이점은웹서비스표준이기본애플리케이션을설명하는애플리케이션구현의위에있는 XML 메타데이타레이어라는것입니다. 이는비즈니스논리나프로세스개발의표준이아니라단지이를설명하는것뿐입니다. 예를들어, CORBA를사용하는경우 IDL(Interface Definition Language) 을 WSDL에비유하는것이가능합니다. 이들둘모두클라이언트가비즈니스논리를호출하는데필요한비즈니스논리와인터페이스에의해구현되는서비스를설명합니다. 애플리케이션논리나프로세스가아닙니다. CORBA의원격요청프로토콜은개념적으로 SOAP과비교할수있는 Internet Inter-ORB Protocol이라고합니다. 둘모두인수를마샬링하고마샬링해제하는방법을제공합니다. SOAP의경우기본마샬링언어는 XML입니다. CORBA의네이밍서비스 (Cos Naming) 및 IOR(Interoperable Object References) 은개별 CORBA 오브젝트를찾는방법을제공하는반면 WSDL과 UDDI 표준의조합은웹서비스를찾는비슷한방법을제공합니다. 웹서비스에대한혁명적인추세는분산컴포넌트모델이특히, HTTP처럼프로토콜을사용함으로써인터넷전반에서프로그래밍을통해상호작용할수있도록한다는것입니다. 초기에단순성과상호운영성에중점을둔웹서비스는업계전반에걸친강력한지지, 광범위한확산및혁신을이루어냈습니다. 흥미로운것은단순형웹서비스가이제보편적인개발방법이되고있으며. 많은관심과적극적인노력이복합형웹서비스의영역에서시작되었습니다. 복합형웹서비스는 SOAP, WSDL 및 UDDI의기본표준을사용하며장기적으로실행되는트랜잭션, 비동기식트랜잭션, 인증, 암호화및부인방지등에대한요구사항을지니고있는보다수준높은비즈니스프로세스로발전하고있습니다. 이분야에서오라클과같은웹서비스벤더는 ebxml(electronic Business XML) 과 RosettaNet의지식과표준은물론앞서수많은구현을통해복잡한비즈니스프로세스를구현하면서이루어진많은작업을수행한 e-business 제품군의실세계비즈니스프로세스지식을활용하고있습니다.
웹서비스의개발및조립요구사항 Java 개발자가웹서비스의출현에대해어떻게대응하고있을까요? 오라클은웹서비스가기존 J2EE 개발방식을보완할것으로기대하고있습니다. 웹서비스는 J2EE 1.4 및 Java Specification Request 109에서 Java Community Process 를통해 J2EE 플랫폼을자연스럽게확장하고있습니다. 웹서비스개발자는이를염두에두고먼저엔터프라이즈 J2EE 개발자의요구를충족시킬수있는개발환경을선택해야합니다. 그툴은모델링, 소프트웨어구성관리, 신속한애플리케이션개발, 디버깅, 성능조정및테스트를지원해야합니다. 웹서비스는웹서비스의퍼블리싱및소비, 웹서비스찾기및상세보기그리고마지막으로웹서비스의개발및조정등과같은추가적인요구를개발환경에추가하고있습니다. 생산성을최대한높이기위해이는통합되지않은개별툴이아니라표준개발환경을구성하는기능이되어야합니다. 이것이 Oracle9i JDeveloper의비전입니다. Oracle9i JDeveloper는완벽하게 Java로작성된 Java IDE입니다. 따라서 Windows, Solaris 및 Linux에서사용할수있습니다. 이는 J2EE 개발을위해위에서설명한엔터프라이즈기능을모두갖추고있을뿐만아니라제품전반에풍부한웹서비스기능을결합하고있습니다. Oracle9i JDeveloper를이용한웹서비스의개발웹서비비스모델링 Oracle9i JDeveloper는개발자가시각적으로비즈니스애플리케이션을설명하도록지원하는일련의 UML 모델러를제공합니다. 클래스모델러 (Class Modeller) 는비즈니스오브젝트사이의관계를설명하고액티비티모델러 (Activity Modeller) 는비즈니스프로세스를설명합니다. 웹서비스측면에서액티비티모델러는웹서비스통합을설명하는데유용하며클래스모델러는개별웹서비스구현을설명하는데유용합니다. 비즈니스프로세스를시각화하는것이외에도액티비티모델러와같은툴이제공하는중요한가치는단순형웹서비스 ( 예 : 원격프로시저호출 ) 를일련의웹서비스가호출및순차처리되고다른웹서비스및비웹서비스애플리케이션과조율되는복합형웹서비스로확장할수있다는것입니다. 또한이벤트처리, 비동기화, 병렬처리및통보를처리할수있는인프라의경우복합형웹서비스를구축하는것이필수적입니다. 예를들어, Oracle9i JDeveloper를이용할경우, 개발자는액티비티모델러를통해 Oracle9i Application Server에서제공하는워크플로우엔진과통합기능을사용함으로써웹서비스를위해이들기능을갖춘비즈니스프로세스를생성할수있게됩니다. 그림 2는 Oracle9i JDeveloper Activity Modeller을이용한웹서비스시나리오를제공하고있습니다. 본시나리오는 Trip Planning Service, Trip Costing Service 및 Trip Booking Service 등 3 가지웹서비스프로세스를설명하고있습니다. 본단계에서는각프로세스작업에대한세부사항이제공되지않지만본백서의나머지에서는이액티비티모델의 J2EE 웹서비스중심구현을제공하는데중점을두게됩니다.
Plan Trip Curreney Conversion Check Credit Valid? Book Trip Reject Trip 그림 2: Oracle9i JDeveloper Activity Modeller 의웹서비스모델링 EJB 기반의웹서비스구축 Oracle9i JDeveloper를사용해웹서비스를개발하는경우표준 Enterprise Java Bean으로시작할수있습니다. Stateless 또는 stateful 세션 EJB 아니면 Bean Managed, Container Management Entity EJB나 Message Driven Beans와같은모든유형의 Enterprise Java Beans를선택할수있는것처럼일반적인 Java 클래스를선택할수있습니다. 예를들어, 그림 2의액티비티모델을사용하는 Plan Trip 액티비티는그림 3의 TravelSearchEJB라고하는 stateless Enterprise Java Bean으로구현할수있습니다. 간단하게하기위해본 EJB는출발지공항과도착지공항의항공기리스트를반환하는단일메소드인 findflight를보유하고있습니다. 그림 3: Oracle9i JDeveloper 를이용한선언적 EJB 개발 findflight 메소드의구현코드는리스팅 1과같습니다. 이코드는출발지와도착지공항을파라미터로 SQL 문을통해 TRAVEL 데이타베이스스키마로부터항공기이름을검색하는것을보여주고있습니다. 이는일반적인 J2EE 개발자가쉽게작성할수있는전통적인 Java 코드입니다.
public String[]findFlight(StringString,String dest) throws RemoteException{ String[]flights = new String[5]; String SQL ="selectflight.air_code,flight.flight_number,+fare.standard_price,"+ "to_char(departure.departure_date,'mon,dd,rrrr')"+ "departure.departure_time"+ "from flight_route flight,fare_schedules,fare,flight_departures"+ "where origin_arp_code =? "+ "and dest_arp_code = and departure.flr_id = flight.route_id"+ "and flight route_id = flight flr_id"+ "and (sysdate < departure.departure_date "+ "order by departure.departure_date asc"; try { conn = getconnection(dsname); ps =.setstring(1,origin); ps = setstring(2,dest); ps =.executequery(); ResultSet rs = ps.getresultset(); int i = o; while ((rs.next()) && (i < 5) { Flights [1] = new string(1)+" "+ rs.getstring (2)+ "/" + rs.getstring(4)+ "/" + $"+rs.getstring(3)); i++; catch (SQLException e) { throw new RemoteException(e.getMessage()); finally { try{ ps.close(); try{ conn.close(); catch (Exception e) { flights;return 리스팅 1: findflight EJB 메소드의구현 개발된 Java 애플리케이션의유형에따라 EJB용 Enterprise Java Bean JAR 파일, 웹애플리케이션용웹아카이브파일및단순한 Java 클래스용일반 JAR 파일등여러 J2EE 아카이브배치옵션을사용할수있습니다. Oracle9i JDeveloper는 J2EE 기술자를구성하고단한번의마우스클릭으로실제배포프로세스를처리하도록함으로써손쉽게배포될수있도록합니다. 이포인트앤클릭배치는 Oracle9i Application Server Containers for J2EE 및 BEA Weblogic과같은써드파티애플리케이션서버에대해서도제공됩니다. 그림 4는 Oracle9i JDeveloper에서사용할수있는개발옵션을보여주며그림 5는여기에구축된 TravelSearchEJB 에대한 Enterprise Java Beans를배포하는사용자경험을보여주고있습니다.
그림 4: Oracle9i JDeveloper J2EE 배포옵션 그림 5: Oracle9i JDeveloper 를이용해단한번의클릭으로 EJB 개발 EJB 웹서비스퍼블리싱 Oracle9i JDeveloper에서웹서비스퍼블리싱은 EJB 원격인터페이스를상세히확인하는웹서비스툴을실행하는것만큼간단하며개발자가어떤메소드를웹서비스로퍼블리싱해야하는지선택할수있도록합니다. Oracle9i JDeveloper는 Sun Java Community Process의 J2EE 1.4 또는 JSR 109에대한새로운스펙을기반으로하는 Oracle9i Application Server용 J2EE 웹서비스퍼블리싱을지원합니다. 또한 Apache SOAP 인프라를사용해웹서비스를완벽하게지원합니다. TravelSearchEJB 를웹서비스로퍼블리싱하는작업은일반적으로그림 6에서 9과같은순서로이루어지게됩니다.
그림 6: 웹서비스툴선택하기 그림 7: 원격 EJB 인터페이스선택하기및 URI 식별자제공하기 ( 개발플랫폼에는 Oracle9i Application Server Web Service(J2EE 1.4/JSR 109 기반 ) 와 Apache SOAP 2.0 및 2.2 가포함된다는점을유념해야합니다 ) 그림 8: 웹서비스로퍼블리싱할메소드선택하기
그림 9: 웹서비스의 WSDL 기술작성하기 웹서비스를배포하기위해서는웹서비스마법사가수집한메타데이타를패키징해애플리케이션서버로배포해야합니다. J2EE용 Oracle9i Application Server Containers에퍼블리싱된웹서비스의경우이메타데이타는 J2EE web.xml 파일로패키징되고표준 WAR 파일을사용해배포됩니다. web.xml 파일은배포프로세스동안 Oracle9i Application Server에의해자동으로생성된서블릿을구성하며, 호출을위해들어오는 SOAP 메시지를기본 EJB로변환하고나가는결과를다시 SOAP 메시지 1 로변환합니다. WAR 배포프로세스는그림 10과같이원클릭으로실행됩니다. 그림 10: Oracle9i Application Server 에대한원클릭웹서비스배포 Apache SOAP이선택된경우에 Oracle9i JDeveloper 웹서비스마법사는 Apache SOAP을가진웹서비스에등록하는데필요한배포기술자를생성합니다. Oracle9iAS 웹서비스와달리 Apache SOAP은 SOAP 메시지를처리하기위한단일서블릿을사용하며각 SOAP 서비스를기본컴포넌트로대응하는데기술자를필요로합니다. 그림 11은 TravelSearchEJB EJB에대해자동으로생성된 SOAP 기술자를 Apache SOAP Servers에등록하는등록프로세스를보여주고있습니다. 1 Oracle9iAS Web Service를사용함으로써각 Enterprise Java Bean은 SOAP 메시지의마샬링및해제를위한자동생성된전용서블릿을보유하고있도록추정하는것은타당합니다.
그림 11: Oracle9i JDeveloper 의원클릭 Apache SOAP 서비스배포 이들두경우모두개발자가수행해야하는작업은원클릭으로웹서비스마법사를호출하고웹서비스로퍼블리싱할 Enterprise Java Bean과메소드를선택한다음웹서비스인프라에배포하는것입니다. 이것은간단한퍼블리싱프로세스로서개발자가웹서비스의형식보다는애플리케이션자체에중점을둘수있도록합니다. WSDL를이용한작업웹서비스가퍼블리싱되면자연히다음단계는웹서비스를호출하기위한클라이언트를구축하는것입니다. Oracle9i JDeveloper와같은툴을사용해클라이언트생성을자동화할수있도록하는표준은 WSDL(Web Service Description Language) 입니다. Oracle9i JDeveloper는 WSDL 파일을사용해웹서비스구현에서기대하는 SOAP 메시지를마샬링및해제할수있는클라이언트스텁을자동으로생성할수있습니다. 문제는개발자가 WSDL 파일을어디에서찾는가하는것입니다. WSDL 파일을가져올수있는많은표준이발표되어있습니다. 기존웹서비스의경우일반적으로찾는장소는 XMethods(http://www.xmethods.com) 및 SalCentral(http://www.salcentral.com) 과같은널리사용되는웹서비스레지스트리입니다. 이사이트들은종종공개적으로사용할수있는웹서비스와그에해당하는 WSDL 파일리스팅을 URL로퍼블리싱하며보다최근에는웹서비스리스트를 UDDI 조회에사용할수있도록했습니다. 이미웹서비스인프라를보유하고있는경우내부 UDDI 레지스트리에도 WSDL 파일이있을수있습니다. 예를들어, Oracle9i Application Server는 UDDI 레지스트리를웹서비스구현기능으로서포함하고있습니다. 신규또는기존 J2EE 애플리케이션의경우본백서에서사용되는 TravelSearchEJB 예제처럼 Oracle9i JDeveloper 웹서비스마법사가 WSDL 파일을자동으로생성합니다. 그림 12 는이문서에서작성한예제 Enterprise Java Bean을위해생성된 WSDL을보여주고있습니다.
그림 12: Oracle9i JDeveloper 웹서비스툴로생성된 WSDL 편집하기 Oracle9i Application Server로배포되는웹서비스의경우 WSDL을검색하는데추가옵션을사용할수있습니다. 웹서비스개발동안자동으로만들어진서블릿은 WSDL 인수를받아들이며필요시 WSDL을생성합니다. 예를들어, TravelSearchEJB 웹서비스의경우 WSDL은다음 URL에서검색할수있습니다. http://localhost:8888//travel-context-root/urn:ws.travelsearchejb?wsdl 이는개발자가 Oracle9i JDeveloper 외부에서웹서비스 WSDL에독립적으로액세스하길원할경우유용할수있습니다. 개발자가아마도웹서비스를구현하기전에웹서비스정의프로세스를통해 WSDL 파일을조정하거나복잡한파라미터를처리하는경우가있을수있습니다. Oracle9i JDeveloper는스키마중심 XML 편집기와 WSDL 작성툴을제공함으로써 WSDL 파일의작성및편집을지원합니다. Oracle9i JDeveloper의 XML 편집기를이용해 XML 스키마를등록하면편집기가문서에포함된 XML 스키마를편집하는동안코드를볼수있습니다. 그림 12는 TravelSearchEJB 웹서비스 WSDL 파일뿐만아니라 Oracle9i JDeveloper가제공하는실행중인코드전체보기기능을지닌 WSDL 파일편집, XML 문서구조네비게이터및 XML 속성편집기기능을보여주고있습니다. 그림 13 은 Oracle9i JDeveloper에스키마를등록하는기능을보여주고있습니다. 기본적으로, WSDL용스키마와기타공통의 XML 스키마는사전등록되어있습니다.
그림 13: 스키마중심편집기구성하기 웹서비스클라이언트의구축지금까지개발된시나리오에서 TravelSearchEJB 웹서비스사용에관심을있는개발자라면그다음으로웹서비스클라이언트를구축하는작업에착수하게될것입니다. 이들개발자는웹서비스자체를구현하는데대해서는알필요가없으며웹서비스를호출하기위해적절한 SOAP 메시지를작성할 WSDL 파일만을필요로합니다. XMethods나 SalCentral 같은사이트상의 Oracle9i JDeveloper에서직접작성됐거나 Oracle9i Application Server에있는것과같은 UDDI 레지스트리를브라우징해 WSDL 파일을찾으면개발자의준비는끝난것입니다. Oracle9i JDeveloper는 WSDL에서직접웹서비스클라이언트를만드는프로세스를자동화합니다. 그림 14에서 16은 Web Service Stub/Skeleton 툴을보여주고있습니다. 그림 14: 웹서비스 Stub/Skeleton 툴선택하기
그림 15: 액세스할서비스를위한 WSDL 파일의위치정의하기 그림 16: 웹서비스클라이언트를위한메소드선택하기 Web Service Stub/Skeleton Wizard에서작성되는스텁은웹서비스구현에대해서는전혀모르며웹서비스자체에서 SOAP 메시지를마샬링및해제하는간단한 Java 클래스입니다. 본백서에서사용되는예제에서 TravelSearchEJB EJB의메소드 findflight는파라미터로서출발지공항과도착지공항이포함된문자열파라미터를사용하며이에일치하는항공기를반환합니다. 웹서비스클라이언트나스텁은들어오는 Java 파라미터를 SOAP 메시지로변환해웹서비스로보내고역으로, 웹서비스 SOAP 결과를 Java에해당하는결과로변환합니다. 리스팅 2는 WSDL 파일에서작성된 Java 스텁을보여주고있습니다.
package ws; import oracle.soap.transport.http.oraclesoaphttpconnection; import java.net.url; import org.apache.soap.constants; import org.apache.soap.fault; import org.apache.soap.soapexception; import org.apache.soap.rpc.call; import org.apache.soap.rpc.parameter; import org.apache.soap.rpc.response; import java.util.vector; import java.util.properties; public class TravelSearchEJBStub { publicstringendpoint="http://localhost:8888/soap/servlet/soaprouter"; private OracleSOAPHTTPConnection m_httpconnection = null; public TravelSearchEJBStub() { m_httpconnection = OracleSOAPHTTPConnection(); public String[]findFlight (StringStringorigin,Stringdest) throwexception String[]Renturnval = null; URLendpointURL=newURL(endpoint); Call call=new Call(); call..setsoaptransport(m_httpconnection); call.settargetobjecturi("urn:ws.travelsearchejb"); call.setmethodname("findflight"); call.setencodingstyleuri(constants.ns_uri_soap_enc); Vector pagram = new Vector(); params.addelement(new Parameter("origin",String.class,origin,null)); params.addelement(new Parameter("dest",String.class,dest,null)); call..setparam(params); Response response = call.invoke(endpointurl,""); if (! response. generatedfault()) { parameter result = response.getreturnvalue(); returnval = (String[])result.getValue(); else { Fault fault = response.getfault(); thrownewfaultsoapexception(fault.getfaultcode(),.faultgetfaultstring()); return returnval; public void setmaintainsession(boolean mantainsession) { m_httpconnection.setmaintainsession(maintainsession); public boolean getmaintain Session() { return m_httpconnection.getmaintainsession(); public void settransportproperties(properties props) { m_httpconnection.setportproperties(props); { public Properties gettransportproperties() { return m_httpconnection.getproperties(); 리스팅 2: WSDL 에서 Oracle9i JDeveloper 를이용한 SOAP 클라이언트의자동생성
개발자는이웹서비스스텁을유지하지않을것이라는사실을유념해야합니다. 그림 17에서와같이 Oracle9i JDeveloper는간단히오른쪽마우스를클릭해웹서비스스텁을재작성할수있으며 WSDL 파일은지속적으로업데이트되어야합니다. 또한 Oracle9i Application Server로배포되는웹서비스의경우스텁을검색하는데추가옵션을사용할수있습니다. Oracle9i Application Server 웹서비스를배치하는동안자동으로만들어진서블릿은 proxy_source 인수를받아들이며필요시 Java 스텁을생성합니다. 예를들어, TravelSearchEJB 웹서비스의경우 Java 스텁은다음 URL에서검색할수있습니다. http://localhost:8888//travel-context-root/urn:ws.travelsearchejb?proxy_source 이두번째방식은개발자가 Oracle9i JDeveloper에독립적인스텁에액세스하길원하는경우유용할수있습니다. : 그림 17: SOAP 서비스스텁을원클릭으로재생성하기애플리케이션, Java Server Page 또는 Enterprise Java Bean 내에서이 TravelSearchEJB 웹서비스스텁을호출하는것이마지막단계입니다. 그림 18은 TravelSearchEJB 웹서비스를호출하기위해 JSP scriptlet을작성하는동안스텁을호출하기와 Oracle9i JDeveloper 코드전체보기를보여주고있습니다. 그림 18: Oracle9i JDeveloper 에서웹서비스를호출하는동안 Java Server Page 코드전체보기실행
JavaServer Page 의경우웹서비스에대한클라이언트구축의최종결과는웹서비스가일반애플리케이션과거의비슷해보입니다. 그림 19는웹서비스결과를반환하는완성된클라이언트를보여줍니다. 그러나여기에는두가지차이점이있습니다. 1. 웹서비스자체가 Enterprise Java Bean 으로구현되긴하지만해당클라이언트는 HTTP 를통해 SOAP 메시지를사용해웹서비스와상호작용합니다.Enterprise Java Bean 은조직의방화벽내부나외부에있을수있습니다. 2. Enterprise Java Bean 을웹서비스로서제시한다음웹서비스를소비하는개발환경은전통적인 J2EE IDE 의완벽한확장이었습니다. 그림 19: Java Server Page 를웹서비스클라이언트로실행하기 써드파티웹서비스의통합그림 2의액티비티모델러에서설명하는시나리오로돌아가면 Trip Planning 프로세스만이구현되었습니다. 액티비티를나타내는 Enterprise Java Bean, TravelSearchEJB은웹서비스로제공되었으며이를호출하기위해웹서비스클라이언트가구축되었습니다. 다음단계는이구현을다음 Trip Costing 프로세스와통합하는것입니다. 이경우 Trip Costing 프로세스는간단한통화변환액티비티로구현됩니다. 시간과노력을줄이는한가지방법은통화변환을전문으로하는외부웹서비스를사용하고그다음이를애플리케이션플로우에통합하는것입니다. 다행히인터넷상에웹서비스로서제시되는여러통화변환서비스가출시되어있습니다. 그림 20과 21에있는것은이러한서비스가 XMethods 와같은웹사이트에어떻게퍼블리싱및애드버타이즈되는지보여주고있습니다.
그림 20: 웹사이트 Xmethods 상의통화변환서비스 그림 21: 통화변환서비스를위한 WSDL 통화변환웹서비스를전체여행애플리케이션으로통합하는단계는매우간단합니다. 1. XMethods 사이트에서제공되는 WSDL을사용해웹서비스스텁을개발합니다. 2. 통화변환스텁을기존애플리케이션에통합합니다. 그림 22와 23은 Oracle9i JDeveloper의 Web Service Stub/Skeleton Wizard를사용해웹서비스클라이언트를구축하는단계를보여주고있습니다.
그림 22: 통화변환 WSDL 의 URL 위치정의하기 그림 23: 웹서비스메소드를위한통화변환 WSDL 상세보기 그다음 TravelSearchEJB 예제처럼통화변환웹서비스에대한요청을 JavaServer Page 또는다른 J2EE 컴포넌트에통합할수있습니다. 그림 23은 JavaServer Page 요청에대한통화변환웹서비스요청을보여주고있습니다. 그림 24는 TravelSearchEJB 웹서비스와통화변환웹서비스를모두결합해실행되는 JavaServer Page를보여주고있습니다.
그림 23: 통화변환웹서비스를여행웹서비스 Java Server Page 에추가하기 그림 24: 통합된여행서비스및통화변환서비스를실행하기 보다많은웹서비스선택하기개발자가가장생산적이고익숙한개발패러다임과웹서비스를위한가장안정적인비즈니스로직옵션을선택할수있도록하기위해, Oracle9i JDeveloper는개발자가자체 J2EE 프레임워크, Business Components for Java 그리고 PL/SQL 내에프로그래밍된저장프로시저를사용해개발된 EJB를웹서비스로게시할수있도록지원합니다. Business Components for Java는개발자가 J2EE 애플리케이션을신속하게작성하고, 높은품질을유지하며, 빠르게실행하도록지원하는업계최고의실행방안을토대로개발된 J2EE 프레임워크입니다. 객체관계대응, 선언적비즈니스로직및 XML, JSP, Swing 클라이언트를위한프레젠테이션바인딩레이어를제공합니다. 프레임워크에서개발된컴포넌트는일반적으로 Enterprise Java Beans로서배포된포괄적인비즈니스오브젝트이며본백서에서설명한것과동일한
Oracle9i JDeveloper 툴을사용해웹서비스로서제공할수있습니다. Oracle Database를사용하는많은기업들이 PL/SQL에상당한투자를하고있으며웹서비스를통해이런투자가새로운고객창출로이어질수있도록할것이라고기대하고있습니다. Oracle9i JDeveloper는개발자에완벽한 PL/SQL 개발과디버깅환경을제공합니다. Oracle9i JDeveloper는저장프로시저를웹서비스로서제시하기위해 JPublisher라고하는유틸리티를기본제공하며단한번의클릭으로모든 PL/SQL 저장프로시저를 Java 클래스로래핑할수있습니다. Java 클래스로서래핑되면본백서에서설명한것과동일한 Oracle9i JDeveloper 툴을사용해다시 PL/SQL 저장프로시저를웹서비스로서퍼블리싱할수있습니다. 결론본백서는 Oracle9i JDeveloper가제공하는강력한웹서비스기능에대해개략적으로소개했습니다. 개발자는 UML 모델에서웹서비스를만들고손쉽게 Java 및데이타베이스애플리케이션을웹서비스로서제공하며웹서비스클라이언트를신속하게실행할수있게됩니다. 뿐만아니라, 모델링, 프로파일링, 소프트웨어구성관리, 디버깅과강력한 Java, XML 및 PL/SQL 편집등을포함한 Oracle9i JDeveloper의모든기능들은웹서비스와유연하게연동할수있습니다. 이러한광범위한웹서비스기능을바탕으로 Oracle9i JDeveloper는전체애플리케이션개발라이프사이클전반에서완벽하게통합된방식으로웹서비스를구현하는업계유일의 Java IDE로평가되고있습니다
한국오라클 ( 주 ) 서울특별시강남구삼성동 144-17 삼화빌딩대표전화 : 2194-8000 FAX : 2194-8001 한국오라클교육센타서울특별시영등포구여의도동 23-10 SK증권빌딩 11층 ( 사무실 ) 19 20층 ( 강의실 ) 대표전화 : 3779-4000 FAX : 3779-4100~1 대전사무소대전광역시서구둔산동 929번지대전둔산사학연금회관 18층대표전화 : (042)483-4131~2 FAX : (042)483-4133 대구사무소대구광역시동구신천동 111번지영남타워빌딩 9층대표전화 : (053)741-4513~4 FAX : (053)741-4515 부산사무소부산광역시동구초량동 1211~7 정암빌딩 8층대표전화 : (051)465-9996 FAX : (051)465-9958 울산사무소울산광역시남구달동 1319-15번지정우빌딩 3층대표전화 : (052)267-4262 FAX : (052)267-4267 광주사무소광주광역시서구양동 60-37 금호생명빌딩 8층대표전화 : (062)350-0131 FAX : (062)350-0130 고객에게완전하고효과적인정보관리솔루션을제공하기위하여오라클사는전세계 145개국에서제품, 기술지원, 교육및컨설팅서비스를제공하고있습니다. http://www.oracle.com http://www.oracle.com/kr 제품구입문의 수신자부담전화번호 : 00368-440-0051 수신자부담팩스번호 : 00368-440-0062 E-Mail 문의 : oracleisd_kr@oracle.com