WSDL
Web Service Description Language, 즉 WSDL은 XML 기반의 웹서비스 명세 언어입니다. 2001년에 IBM 등의 회사에서 W3C에 제안을 한 것입니다. 2007년에 W3C에 표준으로 지정이 되었습니다. WSDL은 웹서비스 간에 교환되는 메시지 포맷과 데이터 타입, 그리고 전송 방식에 대한 정보를 기술할 수 있는 언어입니다.
WSDL을 사용하는 웹서비스 명세는 abstract한 부분과 concrete한 부분, 두 레벨로 구성이 됩니다. abstract-level 명세는 웹서비스가 받고 전달을 해야 되는 메시지를 중심으로 interface를 기술하는 것입니다. concrete한 level의 명세는 웹서비스 호출을 위한 네트워크상의 주소, 프로토콜, 이러한 기술적인 것들을 기술하기 위한 부분입니다.
WSDL은 현재 두 가지 버전이 사용이 됩니다. WSDL 1.1과 WSDL 2.0가 있습니다. WSDL 2.0가 더 새로운 표준이지만, 현재 여전히 WSDL 1.1을 많이 사용하고 있습니다. 구조적으로 크게 차이가 나는 것은 아닙니다. 사용하는 tag element 이름 상 조금 차이가 납니다.
즉 WSDL 2.0에서 interface라고 부르는 것을 WSDL 1.1에서는 portType이라고 합니다. 또한 서비스 end point를 WSDL 1.1에서는 port라고 합니다.
Abstract Interface Definition
WSDL의 abstract-level 명세는 웹서비스의 interface에 대한 정의를 하기 위한 것입니다. 서비스의 각 interface가 interface라는 element, 또는 portType이라는 element로 표현됩니다. 그리고 각 interface를 구성하는 논리적인 operation들 그리고 각 operation의 입출력 메시지, 또 각각의 입력 또는 출력의 메시지의 정의, 각 메시지를 구성하는 part에 대한 명세로 전체적으로 구성이 됩니다.
Concrete level Descriptions
WDSL의 concrete한 level의 명세는 어떠한 서비스를 호출하는 데 사용할 수 있는 port들에 대한 집합으로 정의가 됩니다. 각각의 port는 서비스를 호출할 때 필요로 하는 주소, 그리고 프로토콜 정보를 표현하고 있습니다. 각 port는 바인딩 요소와 연계가 됩니다.
그리고 각 바인딩 요소는 abstract-level 명세에서 정의된 interface를 어떻게 사용해서 서비스의 기능을 호출하는지를 정의한 것입니다. 각 operation을 호출하기 위한 메시지 포맷과 프로토콜들이 정의가 됩니다.
WSDL Example
웹서비스의 명세는 Definitions라는 element, tag로부터 시작을 합니다. 이 tag의 attribute로는 WSDL의 명세 이름, eBay watcher service가 명시되어 있습니다. 그리고 abstract-level의 명세의 첫 부분에는 이 웹서비스를 사용하기 위해서 교환해야 되는 메시지에 대한 정의가 되어 있습니다.
두 개의 메시지가 정의가 돼 있습니다. 첫 번째 메시지의 경우는 그 이름이 get current price request라고 돼 있습니다. 그 메시지는 하나의 파트, 부분으로 구성이 돼 있습니다. 그 부분의 파트 이름은 auction ID라고 정의가 돼 있습니다. 그 파트의 데이터가 표현되는 형식은 string 형식으로 된다는 것이 지정된 것을 확인할 수 있습니다.
메시지 정의 다음에는 interface에 대한 정의가 포함돼 있습니다. interface 정의는 WSDL 1.1에서는 portType이라는 XML element를 통해서 표현을 합니다. 그 portType의 이름으로 eBady watcher portType으로 지정됩니다.
interface의 정의는 거기서 제공하는 여러 개의 operation들을 명세를 함으로써 구성이 됩니다. operation의 이름은 get current price라고 되어 있습니다. 이 operation을 호출하기 위해서 전송을 해야 되는 input-parameter는 하나가 지정이 됩니다. input message는 앞서 abstract-level에서 정의했던 get current price request라는 메시지 형식을 사용한다고 지정이 되어 있습니다. 그리고 output message인 get current price response는 앞서서 abstract-level에서 정의했던 get current price response라는 메시지 형식을 따른다고 지정된 것을 확인할 수 있습니다.
message type definitions
경우에 따라서는 꽤 복잡한 데이터들을 메시지 파트의 value로 표현합니다. 이렇게 하기 위해서는 types라는 element를 통해서 사용할 데이터 타입을 정할 수 있습니다. 이 예에서는 phone이라는 복잡한 데이터 타입을 정하고 있습니다. 이 phone이라는 complex 타입은 세 개의 element로 구성이 돼 있습니다.
첫 번째는 area 코드고, 두 번째는 exchange, 그리고 세 번째는 number입니다. 각각은 모두 integer로 표현이 되는 요소들이 있습니다. 즉 전화번호가 이렇게 세 가지로 구성되는 것을 복잡한 데이터 형식으로 정리를 합니다. 그러고 나서는 이러한 복합 형태의 메시지 타입을 실제 메시지를 정의합니다.
concrete definition example
정의 eBay watcher portType이라는 interface와 binding이 어떻게 되는지를 보여주고 있습니다. 이 binding의 이름은 eBay watcher binding이라고 돼 있습니다. interface가 type으로 지정된 모습을 볼 수 있습니다. 그리고 이 binding 정보에서는 인코딩하는 스타일이 RPC라고 표현이 돼 있습니다.
그리고 이러한 interface를 통해서 메시지가 전송이 될 때는 SOAP HTTP transfer protocol을 사용하라는 지정이 돼 있습니다. 그 이후에는 실제 앞서서 abstract-level에서 정의했던 operation을 어떻게 호출하면 되는지 구체적인 기술적인 내용이 포함되어 있습니다. 먼저 SOAP action이라는 attribute에는 실제 HTTP header에 포함돼야 하는 SOAP action header information이 포함이 되어 있습니다.
그리고 그 이후에는 input message, output message가 어떻게 인코딩이 돼야 하는지가 또 명시가 돼 있습니다. 이 경우에는 인코딩 스타일로 SOAP을 사용하는 것이 지정된 모습을 확인합니다. 그리고 concrete-level 명세에서 서비스에 대한 정의는 앞서서 설명 드린 것과 같이 서비스를 호출하는 데 사용될 수 있는 port의 정보로 구성이 됩니다.
이 예에서는 eBay watcher라는 서비스가 정의가 되고 있습니다. 이 eBay watcher service 안에는 하나의 interface와의 연결을 이루는 port가 정의가 돼 있습니다. port의 이름은 eBay watcher port입니다. 이것은 앞서서 정의했던 eBay watcher binding과 연결이 되어 있는 모습을 볼 수 있습니다. 그리고 이 port를 통해서 eBay watcher service를 액세스하기 위해서 실제로 사용해야 되는 주소값이 location이라는 attribute에 명시된 모습을 볼 수 있습니다.
SOAP SERVICE REQUEST
sevrvice binding 정보를 통해서 호출할 수 있는 operation의 이름, 즉 get current price를 확인해서 넣을 수가 있습니다.
그리고 이 operation을 RPC 형태로 호출해야 함을 파악을, WSDL 명세를 통해서 확인할 수가 있습니다. 그래서 이 operation 호출을 위해서 필요로 하는 input값으로 auction ID값을 string 형태로 명시해야 됨을 확인합니다. 그것을 request message에 포함을 해서 작성을 할 수 있습니다.
이렇게 SOAP request message를 만든 이유에는 실제 eBay watcher service 서버와 연결을 시킨 후에 전송해서 그 결과값으로 현재의 원하는 상품의 값을 확인합니다.
'SW > 클라우드 서비스 아키텍처' 카테고리의 다른 글
서비스 아키텍처 : 서비스 모델의 필요성 : 개념, 정의, 개요 (0) | 2020.05.31 |
---|---|
서비스 기반 어플리케이션 기반 : 웹 서비스 코디네이션 모델 : 개요, 개념, 정의 (0) | 2020.05.21 |
SOAP : simple object access protocol : 개념, 정의, 개요, 예제 (0) | 2020.05.19 |
서비스 기반 아키텍처 : SOA 구축 : 사례, 정의, 개요, 개념 (0) | 2020.05.17 |
웹 서비스 : 개념, 표준, 구성 요소, 상호작용 : 정의, 개요 (0) | 2020.05.17 |