SW/클라우드 서비스 아키텍처

WSDL : Web Services Desription Language : 개요, 개념, 정의, 예제

얇은생각 2020. 5. 20. 07:30
반응형

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

WSDL : Web Services Desription Language : 개요, 개념, 정의, 예제

 

웹서비스의 명세는 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

WSDL : Web Services Desription Language : 개요, 개념, 정의, 예제

 

경우에 따라서는 꽤 복잡한 데이터들을 메시지 파트의 value로 표현합니다. 이렇게 하기 위해서는 types라는 element를 통해서 사용할 데이터 타입을 정할 수 있습니다. 이 예에서는 phone이라는 복잡한 데이터 타입을 정하고 있습니다. 이 phone이라는 complex 타입은 세 개의 element로 구성이 돼 있습니다.

첫 번째는 area 코드고, 두 번째는 exchange, 그리고 세 번째는 number입니다. 각각은 모두 integer로 표현이 되는 요소들이 있습니다. 즉 전화번호가 이렇게 세 가지로 구성되는 것을 복잡한 데이터 형식으로 정리를 합니다. 그러고 나서는 이러한 복합 형태의 메시지 타입을 실제 메시지를 정의합니다.

 

 

concrete definition example

WSDL : Web Services Desription Language : 개요, 개념, 정의, 예제

 

정의 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

WSDL : Web Services Desription Language : 개요, 개념, 정의, 예제

 

sevrvice binding 정보를 통해서 호출할 수 있는 operation의 이름, 즉 get current price를 확인해서 넣을 수가 있습니다. 
그리고 이 operation을 RPC 형태로 호출해야 함을 파악을, WSDL 명세를 통해서 확인할 수가 있습니다. 그래서 이 operation 호출을 위해서 필요로 하는 input값으로 auction ID값을 string 형태로 명시해야 됨을 확인합니다. 그것을 request message에 포함을 해서 작성을 할 수 있습니다.

이렇게 SOAP request message를 만든 이유에는 실제 eBay watcher service 서버와 연결을 시킨 후에 전송해서 그 결과값으로 현재의 원하는 상품의 값을 확인합니다.

반응형