난이도 : 초급 Chandra Venkatapathy, 마켓 매니저, IBM Simon Holdsworth, 개발팀 리더, IBM
2002 년 5 월 01 일 웹 서비스는 기업의 방화벽 내에서 그리고 그 이상의 장소 에서 애플리케이션과 프로세스로 부터 액세스 될 수 있다. 이것의 기본은 기업 네트워크 깊숙한 곳에 자리잡은 서비스가 외부 사용자에게 어떻게 노출되는 가이다. 이 글에서는 이러한 접근방식과 관련한 문제를 다루겠다.
시작
웹 서비스는 기업에 있어서 효율적인 프로세스 통합을 위한 매커니즘으로 업계에서 인식되었다. 기업 네트워크를 위해 웹 서비스를
구축할 때, 방화벽의 한계를 뛰어넘어 서비스의 범위를 성장시킬 필요를 보게된다. 여러분은 비지니스 파트너, 고객, 회원들에게
서비스를 제공할 수 있고 그들을 비지니스 프로세스의 통합된 부분으로 만들 수 있다. 네트워크를 통해서 서비스에 다른 액세스를
제공하기에 앞서 많은 비지니스 문제들을 해결해야 하지만 여기에서는 기술적 문제들에 포커스를 맞추겠다.
기업의 네트워크 영역을 넘어 웹서비스를 외부로 제공할 때(externalize) 많은 문제들에 부딪치게 된다. 이러한 문제들
중에는, 보안, 신뢰성, 서비스의 질(QOS), 통신 호환성 등등이 있을 것이다. 통신 호환성 문제를 보면 다양한 프로토콜과
OS 플랫폼, 다른 프로그래밍 언어 사이에서 통신을 수행한다는 데서 난관을 겪게될 것이다.
위 문제들은 전개와 운영 모델에 관계된 것들이다. 웹 서비스 게이트웨이 기술은 웹 서비스를 외부에 제공할 때 발생하는 문제들을
해결하도록 만들어졌다. 비지니스 관점에서 볼 때 이는 파트너, 고객, 회원들이 웹 서비스를 공유함으로서 리소스의 재사용이 향상된다고
볼 수 있다.
웹 서비스 게이트웨이
웹 서비스 게이트웨이(Web Services Gateway)는 WSDL 문서에 기반하여 설정가능한 매핑을 제공하는 런타임(run-time)
컴포넌트 이다. 이것은 사용가능한 전송 채널에서 WSDL 정의의 서비스를 다른 서비스로 매핑한다. 방화벽에서 주로 전개되고 내부
서비스로 액세스된다. 웹 서비스 게이트웨이는 다음과 같은 기능이 있다:
웹 서비스 게이트웨이 작동방법
웹 서비스 게이트웨이는 많은 전송 채널로 설정된다. 전송 채널은 웹 서비스 호출의 기반 전송 매커니즘으로 정의될 수 있다. 이러한
채널은 웹 서비스를 가능하게 하는 방식을 통해 전송 선택권을 제공한다. 게이트웨이를 통해 서비스를 매핑할 대 전송 채널을 지정할
수 있다. 서비스의 WSDL의 위치, 게이트웨이에서의 서비스 이름 등.. 웹 서비스 게이트웨이는 IBM의 Web Services
Invocation Framework (WSIF)에서 구현되며 웹 서비스 호출과 관련하여 모든 WSDL 정의의 웹 서비스로 매핑된다.
시나리오 1. 인바운드 요청 처리
기업의 방화벽내부에서 전개된 StockQuote 서비스를 제공하고 있고 그 서비스를 파트너와 고객과 공유한다고 가정해보자.
Step 1. WSDL 문서 만들기
StockQuote 서비스를 설명하고 호출하는 WSDL 문서를 만든다. Listing 1은
StockQuote 서비스를 설명하는 WSDL 샘플이다. 솝 주소 위치가 방화벽 안에 있는 myhost를
지정하고 있다.
Listing 1. StockQuote SOAP service WSDL
<definitions targetNamespace=...>
<message name="GetQuoteInput">
<part name="symbol" type="xsd:string"/>
</message>
<message name="GetQuoteOutput">
<part name="quote" type="xsd:float"/>
</message>
<portType name="StockquotePT">
<operation name="getQuote">
<input message="tns:GetQuoteInput"/>
<output message="tns:GetQuoteOutput"/>
</operation>
</portType>
<binding name="SOAPBinding" type="tns:StockquotePT">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="getQuote">
<soap:operation soapAction="http://example.com/GetTradePrice"/>
<input>
<soap:body use="encoded" namespace="urn:xmltoday-delayed-quotes"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</input>
<output>
<soap:body use="encoded" namespace="urn:xmltoday-delayed-quotes"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</output>
</operation>
</binding>
<service name="StockquoteService">
<documentation>Stock quote service</documentation>
<port name="SOAPPort" binding="tns:SOAPBinding">
<soap:address location="http://myhost:8080/soap/servlet/rpcrouter"/>
</port>
</service>
</definitions>
|
Step 2. WSDL 문서를 게이트웨이로 임포트하기
Gateway에서 호스팅 되는 서비스의 이름을 제공하고, SOAP/HTTP 전송 채널을 선택하고, StockQuote WSDL
파일의 위치를 지정하면서 요청한다. 게이트웨이는 파트너와 공유될 수 있는 새로운 WSDL 파일을 만든다. 이 두 파일의 차이점은
파일을 생성한 게이트웨이는 서비스 엔드포인트로서 게이트웨이를 갖게되고 바인딩과 portType은 인터페이스 WSDL 파일로 분리된다는
것이다. Listing 2는 적절한 변화가 있는 게이트웨이 생성 파일을 보여주고 있다.
Listing 2. Gateway StockQuote service implementation
WSDL
<definitions targetNamespace=...>
<import namespace="http://www.ibm.com/namespace/wsif/samples/stockquote"
location="http://gatewayhost:80/wsgw/ServiceInterface?name=StockQuote"/>
<service name="StockQuote">
<port name="StockquotePTApacheSOAPBindingPort"
binding="interface:StockquotePTApacheSOAPBinding">
<soap:address location="http://gatewayhost:80/wsgwsoap1/soaprpcrouter"/>
</port>
</service>
</definitions>
|
Step 3. WSDL 문서를 방화벽 밖의 요청자와 공유하기
- 서비스 요청자가 UDDI 검색을 사용하여 WSDL을 획득한 경우에 게이트웨이에게 UDDI로 서비스를 퍼블리시 할 것을
요청한다.
- 게이트웨이에서 획득한 WSDL의 복사본을 사용한다.
- 게이트웨이에서 동적으로 WSDL을 획득한 URL에 액세스 한다 (Listing 3).
Listing 3. Gateway Web service URL
http://gatewayhost:gatewayport/wsgw/ServiceDefinition?name=gatewayservicename
|
Step 4. 서비스 요청자는 게이트웨이에 SOAP 요청을 보낸다.
서비스 요청자는 SOAP 요청을 게이트웨이에 보내고 이것은 방화벽 내부의 서비스를 호출한다(그림1).
그림1. 게이트웨이를 통한 인바운드 리퀘스트
시나리오 2. 아웃바운드 요청 처리:
인바운드 요청처리와 같다. 다만 방화벽 밖의 제공자의 WSDL 문서를 게이트웨이에 임포트한다는 것을 제외하고는 인바운드 요청
처리와 같다. 이것은 내부 서비스 요청자에의해 사용될 새로운 WSDL 문서를 만든다. 그림 2
는 아웃바운드 요청의 흐름이다.
그림 2. 게이트웨이를 통한 아웃바운드 요청
시나리오 3. 프로토콜 전송
시나리오 1을 확장시켜보자. 내부의 StockQuote 서비스가 SOAP/JMS상에서 가능하고 고객과 파트너가 이를 HTTP를
통해 SOAP에서 호출한다. 이 경우 대부분은 시나리오 1과 같은 단계로 진행한다. 하지만 2 단계에서 여러분은 게이트웨이에서
서비스가 HTTP를 통해 SOAP에 의해 액세스될 것을 정의한다. Gateway는 파트너와 공유할 새로운 WSDL 문서를 만든다.
특별히 WSDL 인터페이스 파일에는 원래의 SOAP/JMS 파일이 아닌 SOAP/HTTP 바인딩 파일이 포함되어있다.
그림 3. 프로토콜 전송
시나리오 4. non-SOAP 서비스에 액세스하기
StockQuote 서비스는 자바 객체로서 구현되었다. 하지만 SOAP/HTTP를 사용하는 클라이언트에서 사용해야 한다면? 이
경우 서비스용 WSDL은 자바 바인딩이 포함된다는 것을 제외하고는 시나리오 1과 같다 (Listing
4).
Listing 4: StockQuote 서비스용 자바 바인딩
<definitions ...>
<binding name="JavaBinding" type="tns:StockquotePT">
<java:binding/>
<format:typeMapping encoding="Java" style="Java">
<format:typeMap typeName="xsd:string" formatType="java.lang.String" />
<format:typeMap typeName="xsd:float" formatType="java.lang.Float" />
</format:typeMapping>
<operation name="getQuote">
<java:operation methodName="getQuote"/><input/><output/>
</operation>
</binding>
<service name="StockquoteService">
<documentation>Stock quote service</documentation>
<port name="JavaPort" binding="tns:JavaBinding">
<java:address className="services.stockquote.Stockquote"/>
</port>
</service>
</definitions>
|
이 서비스가 게이트웨이에 전개되고 SOAP/HTTP 전송 채널이 선택될 때, 게이트웨이의 WSDL에는 SOAP 바인딩과 SOAP/HTTP
포트가 포함된다.
http://www7b.boulder.ibm.com/wsdd/downloads/wsgw/wsgw.html을 참조하기 바란다.
요약
웹 서비스 전개가 증가하고 방화벽 내부와 외부 모두에 빈번히 사용되면서 기존의 비 웹서비스 방식의 애플리케이션 노출은 유지보수와
신뢰성의 문제를 직면하게 되었다. 웹 서비스 게이트웨이의 유연한 추상 접근방식은 이러한 문제에 대한 솔루션으로 설계되었다. 애플리케이션과
프로세스 같은 자산을 더욱 많이 사용할 수 있게 된 것이다.
참고자료
필자소개  | 
| Chandra Venkatapathy은 IBM Software Group의 웹스피어 웹 서비스 마케팅 매니저이다. |
 | 
| Simon Holdsworth는 IBMs Hursley에서 개발 팀을 이끌고 있으며 웹 서비스 게이트웨이용 시스템 디자이너이다. |
기사에 대한 평가
|