웹서비스(Web Service) 정의, (SOAP, WSDL)
웹 서비스 (일반적으로 서비스 라 불리는) 는 개방형 프로그램적 인터페이스를 갖는 약간의 컨텐트, 또는 약간의 프로세스, 또는 둘 다로 구성되어 있습니다. 간단한 사례: 통화 변환기, 주식 시세, 사전. 보다 복잡한 사례: 여행 입안자, 조달 워크플로우 시스템. 서비스는 다음과 같은 특징을 갖고 있습니다:
-
특정 작업을 수행하고 표준 사양으로 컴파일하는 인터넷-기반 애플리케이션.
-
XML 및 XML 메시징을 통해 표현되면서 액세스되는 실행 파일.
-
분산 컴퓨팅 환경에서 동적으로 퍼블리싱 (publishing), 디스커버리 (discovery) 그리고 호출 등이 가능합니다.
- 플랫폼 및 언어에 독립적입니다.
웹 서비스는 메시징 프로토콜, 프로그래밍 표준, 네트워크 등록 그리고 디스커버리 기능 등을 통해 모든 웹-연결 장비에서 액세스할 수 있는 소프트웨어 컴포넌트로서 비연속 (discrete) 비즈니스 프로세스를 캡슐화합니다:
- WSDL (Web Services Description Language) 에서 기능 및 속성을 내보이고 기술을 합니다.
- 애플리케이션 및 다른 서비스들이 UDDI (Universal Description, Discovery, and Integration) 레지스트리를 사용하여 웹 상에 그것을 위치시키게 해줍니다.
- 원격 애플리케이션 및 서비스들이 SOAP (Simple Object Access Protocol) 와 같은 표준 인터넷 프로토콜을 사용하여 그것을 호출할 수 있게 해줍니다.
- 동일한 프로토콜 상에서 요청 애플리케이션에게 응답을 반환합니다.
일반적으로, 웹 서비스는 세 가지 특징을 갖고 있습니다:
- EJBs, PL/SQL 프로시저, 다른 웹/데이타베이스 컨텐트 또는 애플리케이션 등과 같은 한 개 이상의 정보 소스를 캡슐화합니다.
- 이벤트, 변형, 그리고 조건부 로직 등을 처리할 수 있는 실행 플로우를 갖고 있습니다
- 일정한 XML 인터페이스를 통해 액세스가 가능합니다.
다음은 웹 서비스에 대한 디스커버리 및 액세스의 고급 프로토콜 예입니다. 작업은 다음과 같이 진행됩니다:
- 웹 서비스 개발자는 서비스를 생성한 후 그것을 서버로 배포합니다. 서비스의 위치는 엔드포인트 (endpoint) 라고 불립니다. 개발의 일부로서 또는 개발 툴을 통해 WSDL 의 형태로 서비스 기술 (description) 이 생성됩니다.
- 엔드포인트와 WSDL 위치 등을 포함하는 웹 서비스 정보는 선택적으로 UDDI 디렉토리에 퍼블리싱될 수 있습니다.
- 웹 서비스 클라이언트는 WSDL 사양 기반의 툴을 통해 구축되거나 생성될 수 있습니다. 클라이언트는 SOAP 메시지를 엔드포인트로 보내고, 응답을 처리합니다.
웹 서비스 기반구조의 두 가지 주요 부분은 웹 서비스의 기술 언어인 WSDL; 그리고 웹 서비스의 통신 프로토콜인 SAOP 입니다.
Web Services Description Language (WSDL) 는 웹 서비스 인터페이스와 위치의 구문 (syntax) 을 기술하는 XML 언어입니다. WSDL 사양 은 그것을 “네트워크 서비스를 문서-중심 또는 프로시저-중심 정보를 포함하는 메시지에서 동작하는 일련의 엔드포인트로 기술하기 위한 XML 포맷” 이라고 부릅니다. 그 컨텍스트를 통해, 아래 다이어그램은 WSDL 문서에 나타나는 요소들을 설명하면서 그것들이 어떻게 관련되었는지를 보여주고 있습니다.
프로그래머 또는 자동화된 개발 툴은 서비스를 기술하는 WSDL 파일들을 생성할 수 있고, 인터넷 상에서 기술을 할 수도 있습니다. 클라이언트-사이드 프로그래머와 개발 툴은 사용 가능한 웹 서비스 정보를 얻을 수 있고, 또한 사용 가능한 서비스에 액세스하는 프록시 또는 프로그램 템플릿 등을 구축하고 생성하는 퍼블리싱된 WSDL 기술을 사용할 수도 있습니다.
WSDL 문서는 다음 테이블에서 기술된 바와 같이 유형, 메시지, portypes
바인딩, 그리고 서비스 요소 등을 포함하는 정의 요소를 보유하고 있습니다.
정의 |
한 개 이상의 서비스를 정의합니다. 정의 요소는 다음 속성들을 지원합니다:
|
유형 | WSDL 문서에서 사용하는 복합 데이타 유형의 정보를 제공합니다. 간단한 유형이 사용될 때에는 WSDL 문서가 이 섹션을 필요로 하지 않습니다. |
메시지 | 통신되는 데이타의 추상적 정의. |
운영 | 서비스가 지원하는 작업의 추상적 기술. |
portType | 한 개 이상의 엔드포인트가 지원하는 작업들의 추상적 집합. |
바인딩 | 작업과 메시지를 위한 명확한 프로토콜과 데이타 포맷 사양을 지정하여 작업이 호출되는 방식을 기술합니다. |
포트 | 단일 통신 엔드포인트를 정의하면서, 단일 엔드포인트를 바인딩을 위한 주소로 지정합니다. |
서비스 | 바인딩의 포트 주소를 지정합니다. 서비스는 네트워크 엔드포인트 또는 포트의 모음입니다. |
다음 목록은 BC4J-VSM 가 사용하는 Credit Card Web Service 의 WSDL 코드를 보여주고 있습니다.
<?xml version = '1.0' encoding = 'UTF-8'?> <!--Generated by the Oracle9i JDeveloper Web Services WSDL Generator--> <!--Date Created: Fri Oct 25 15:05:09 IST 2002--> <definitions name="oracle.otnsamples.vsm.services.CreditCardServiceWS" targetNamespace="http://oracle/otnsamples/vsm/services/CreditCardServiceWS.wsdl" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://oracle/otnsamples/vsm/services/CreditCardServiceWS.wsdl" xmlns:ns1="http://oracle.otnsamples.vsm.services/ICreditCardServiceWS.xsd"> <types> <schema targetNamespace="http://oracle.otnsamples.vsm.services/ICreditCardServiceWS.xsd" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"/> </types> <message name="validateCard0Request"> <part name="provider" type="xsd:string"/> <part name="ccNum" type="xsd:string"/> </message> <message name="validateCard0Response"> <part name="return" type="xsd:string"/> </message> <portType name="CreditCardServiceWSPortType"> <operation name="validateCard"> <input name="validateCard0Request" message="tns:validateCard0Request"/> <output name="validateCard0Response" message="tns:validateCard0Response"/> </operation> </portType> <binding name="CreditCardServiceWSBinding" type="tns:CreditCardServiceWSPortType"> <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="validateCard"> <soap:operation soapAction="" style="rpc"/> <input name="validateCard0Request"> <soap:body use="encoded" namespace="oracle.otnsamples.vsm.services.CreditCardServiceWS" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </input> <output name="validateCard0Response"> <soap:body use="encoded" namespace="oracle.otnsamples.vsm.services.CreditCardServiceWS" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </output> </operation> </binding> <service name="oracle.otnsamples.vsm.services.CreditCardServiceWS"> <port name="CreditCardServiceWSPort" binding="tns:CreditCardServiceWSBinding"> <soap:address location="http://localhost:8888/VSM-BC4J-VSM-BC4J-context-root/ oracle.otnsamples.vsm.services.CreditCardServiceWS"/> </port> </service> </definitions> |
SOAP 의 정의
Simple Object Access Protocol (SOAP) 는 분산 환경에서 정보를 교환하기 위한 경량의 XML-기반 프로토콜로서, 다음과 같은 정보 교환의 유형들을 지원하고 있습니다:
- 엔드포인트가 프로시저-지향 메시지를 받은 다음, 상호 관련된 응답 메시지로 대답하는 곳에서 요청-응답 프로세싱을 허용하는 Remote Procedure Call style (RPC)
- 메시지가 전송은 되지만 전송자가 즉각적인 응답은 기대하거나 기다리지 않는 곳에서 비즈니스 또는 다른 유형의 문서들을 교환할 필요가 있는 구성 및 애플리케이션들을 지원하는 메시지-지향 정보 교환.
SOAP 는 다음과 같은 특징을 갖고 있습니다:
- 프로토콜 독립성
- 언어 독립성
- 플랫폼 및 운영 체제 독립성
- (멀티파트 MIME 구조를 사용하여) 첨부를 통합하는 SOAP XML 메시지 지원
SOAP 메시지는 두 개의 데이타 구조, SOAP 헤더, SOAP 본문 그리고 그것들을 정의하기 위해 사용되는 이름 공간의 정보 등을 포함하는 SOAP 봉투 (envelope) 로 구성되어 있습니다. 헤더는 선택 사항입니다; 그것이 나타날 때에는 SOAP 본문에서 정의한 요청 정보를 전달하게 됩니다. 예를 들면, 헤더는 트랜잭션, 보안, 컨텍스트 또는 사용자 프로파일 정보 등을 포함할 수 있습니다. 본문은 웹 서비스 요청을 포함하거나 요청을 XML 포맷으로 응답을 합니다. 다음 그림은 SOAP 메시지의 고급 구조를 나타내고 있습니다.
SOAP 메시지가 웹 서비스 요청 및 응답의 전달을 위해 사용될 때에는 사용 가능한 웹 서비스의 WSDL 정의를 따를 수 있고, WSDL 은 웹 서비스 액세스를 위해 사용되는 SOAP 메시지, SOAP 메시지가 교환 가능한 프로토콜, 그리고 이 웹 서비스를 액세스할 수 있는 인터넷 장소 등을 정의할 수 있습니다. WSDL 디스크립터 (descriptor) 는 UDDI 또는 다른 디렉토리 서비스 내에 위치하면서, 구성 또는 SOAP 요청의 본문과 같이 다른 수단을 통해 제공될 수도 있습니다.
SOAP 사양은 요청 및 응답을 암호화하는 표준 방식을 제공하고 있습니다. 그리고, XML 스키마를 사용하여 메시지 페이로드 (payload) 의 구조 및 데이타 유형도 기술하고 있습니다. 다음은 웹 서비스의 메시지 및 응답을 위하여 SOAP 이 사용되고 있는 방식입니다:
- SOAP 클라이언트는 SOAP 사양을 따르면서 서비스 요청을 포함하고 있는 XML 문서를 사용하고 있습니다.
- HTTP or HTTPS. SOAP 클라이언트는 SOAP 서버에게 문서를 전송하고, 서버 상에서 실행되는 SOAP 서블릿은 예를 들면, HTTP 또는 HTTPS 등을 사용하여 문서를 처리합니다.
- 웹 서비스는 SOAP 메시지를 수신한 다음, 요청 서비스를 제공하는 애플리케이션에 대해 서비스를 호출하는 것처럼 그 메시지를 디스패치 (dispatch) 합니다.
- 서비스 응답은 다시 SOAP 프로토콜을 사용하여 SOAP 서버로 반환이 되고, 이 메시지는 원래 SOAP 클라이언트에게 반환이 됩니다.
SOAP 은 XML 에 대한 산업 투자의 활용 방법을 제공하고 있습니다. 그리고, 일반적으로 SOAP 가 HTTP 와 SMTP 등과 같이 “방화벽에 친숙한” 프로토콜에 대하여 정의되어 있기 때문에, 방화벽 기술에 대한 산업 투자도 잘 활용할 수 있습니다. 또한 산업계는 SOAP 을 웹 서비스의 필수 요소로 정의하여 다른 전략 보다도 웹 서비스의 볼륨 생산을 적절히 사용하고 있습니다.
출처: http://blog.naver.com/kjs_3047/50003016500