Content Introduction XML Protocol What is an RPC? SOAP의 정의 SOAP의 장점 Envelope Encoding rule Web Service
1.Introduction SOAP Simple Object Access Protocol XML 프로토콜 중 하나 즉, 분산 컴퓨팅을 수행하는 수단을 말함.
What is the XML Protocol-(1) 목적 분산 환경에서의 에플리케이션간 데이터 교환 Component Model로써의 XML 기존 컴포넌트 기술의 상호운용성 문제 XML은 플랫폼 및 프로그래밍 언어에 독립적 DOM/SAX와 같은 표준 API를 통한 접근 방법을 제공하고, XML 스키마에 의해 Datatype 확장가능 HTTP protocol 사용에 따른 웹으로의 이식용이
What is the XML Protocol-(2) 데이터 교환 시 Data Capsulation RPC와 같은 외부 함수 호출의 지원 비 구조적 데이터에 대한 Serialization HTTP 프로토콜을 그대로 이용
XML Protocol 메시지 구조 XML Protocol 메시지는 Header와 Body로 구성된 Envelope으로 구성 XML Protocol Envelope XML Protocol Header XML Protocol Block XML Protocol Body XML Protocol Body에 대한 추가적인 설명과 옵션을 정의하는 Meta Data XML Protocol Processor가 XML Protocol 메시지를 처리할 때 작업의 논리적 단위(fault존재) 최종 XML Protocol 수신측에 전송될 Content를 포함
XML Protocol의 종류 WDDX(Web Distributed Data eXchange) 단점 프로그래밍 언어 사이에서의 복잡한 데이터 구조를 교환하기 위해 고안됨 XML을 이용하여 데이터 직렬화를 통한 데이터 전달 직렬화 된 메세지는 데이터에 대한 타입정보와, 변수명, 변수 값을 포함. 단점 데이터 직렬화에 대한 방법만이 정의되어 있다 RPC Call의 기능이 없다 XP Binding이 HTTP로 한정되어 있고 지원하는 데이터 타입 또한 한정되어 있다
XML Protocol의 종류 XML-RPC RPC기능을 XML로 구현 Remote Machine의 method 호출을 XML로 캡슐화하여 전달하고 결과 역시 XML로 전달받음 기존 HTTP 프로토콜을 그대로 이용 HTTP POST방식을 기반으로 구현 XML을 이용함으로써 프로그래밍 언어에 독립적 방화벽에서 특정 프로토콜에 대한 거부를 피하면서 분산 환경을 지원 자체 데이터 타입을 이용함에 따른 상호 운용성을 보장 할 수 없음
What is an RPC?-(1) RPC(Remote Procedure Call) 한 컴퓨터에 있는 코드가 다른 컴퓨터에 있는 코드를 호출하는 것 필요사항 호출하고 싶은 코드가 들어있는 위치 해당 코드가 필요로 하는 파라미터들, 존재한다면 그 파라미터들의 형식 프로시저가 리턴하는 데이터, 존재한다면 그 데이터들의 형식
What is an RPC?-(2) RPC사용의 예 Business Object Web Server Database RPC사용의 예 하나의 애플리케이션을 실행하기 위한 코드가 여러 대의 컴퓨터에 흩어져 있는 분산 시스템(distributed system)을 설계할 필요가 있는 경우 다음과 같이 서버들을 분리하여 각각의 서버들을 통신을 하게 할 필요가 있다. 비즈니스 로직 객체를 위한 서버 프리젠테이션 로직 객체를 위한 서버 데이터베이스 서버
RPC Protocol DCOM IIOP Java RMI COM(Component Object Model)을 기반으로 한 분산 COM(Distribute COM) COM 프로그래밍 모듈을 확장하여 에플리케이션이 원격 컴퓨터에 들어 있는 COM객체를 호출 할 수 있도록 해준다. Microsoft에 의존적 IIOP Internet Inter-ORB Protocol 플랫폼에 중립적 Java RMI Java Remote Method Invocation Java가 제공하는 분산 컴퓨팅에 사용할 수 있는 시스템 어떤 플랫폼에서도 사용할 수 있다.
SOAP의 정의 Simple Object Access Protocal 스펙에서는 “분권 및 분산 환경에서 정보를 교환하는 가벼운 프로토콜”이라고 정의 한 컴퓨터에서 다른 컴퓨터로 정보를 전달할 때, 그 정보를 XML로 표현하는 표준적인 방법을 제공 ▶XML로 markup한 다음, 보통 HTTP로 전송되는 프로토콜을 정의
SOAP의 장점 SOAP은 플랫폼, 언어, 벤더 중립적이다. SOAP은 XML과 (일반적으로) HTTP를 사용하여 구현되기 때문에 특정 벤더에 의존적인 툴을 사용하지 않고도 어떤 플랫폼, 어떤 언어로도 SOAP 요청을 쉽게 전송하고 처리할 수 있다. 구현이 매우 쉽다. SOAP은 다른 프로토콜보다 훨씬 덜 복잡하게 설계되어 있다. SOAP서버는 Web Server, ASP, CGI Script 중 어떤 것을 이용해서도 쉽게 구현할 수 있다. 방화벽(Firewall)에서도 안전하다. 프로토콜로 HTTP를 사용하고 있다고 가정하면 SOAP 메시지는 별도의 조작 과정을 거치지 않고도 방화벽을 넘어서 전달 될 수 있다.
SOAP의 작동원리-(1) SOAP의 규정 RPC가 전송되는 방법에 대한 규칙. SOAP 스펙은 어떤 네트워크 프로토콜을 사용해도 상관없다 하지만, 통상적으로 사용하는 HTTP에 맞는 특정한 규칙들이 포함된다. 전송되는 XML의 전체적인 구조. 이를 envelope라고 부른다. SOAP을 통해 오고 가는 모든 정보들은 envelope안에 포함된다. 데이터가 XML로 어떻게 표현되어야 하는가에 대한 규칙들. 이것을 encoding rule이라 한다.
SOAP의 작동원리-(2) Network 전송 대부분 HTTP프로토콜을 사용한다. SOAP에 HTTP를 사용하는 이유 HTTP는 이미 널리 구현되어 있으며, 이해하기 쉬운 프로토콜이다. 자체가 가지고 있는 요청/응답 패러다임이 RPC와 잘 들어맞는다. 이미 대부분의 방화벽이 HTTP에서 작업할 수 있도록 설정되어 있다. HTTP는 보안 소켓 레이어(Secure Socket Layer, SSL)를 이용하여 쉽게 보안을 구축할 수 있다.
Envelope-(1) 데이터를 SOAP서버에 보낼 때, 그 데이터는 반드시 특정한 방식으로 표현되어야 서버가 그 데이터를 이해할 수 있다. <Envelope>,<Body>:require <Header>:option <Fault>:error가 발생했을 때만 require 모든 속성(encodingStyle, mustUnderstand, actor):option <Envelope> SOAP의 Envelope 네임스페이스인 http://schemas.xmlsoap.org/soap/envelope/에 속하는 요소 <Body> SOAP메시지의 main body를 포함하는 요소이다. 실제의 RPC호출들은 <Body>요소의 직계 자식으로 쓰이게 되고, 이를 body entry라고 한다.
Envelope-(2) <Header> MustUnderstand 속성 SOAP메시지에서 호출하고 있는 프로시저에 의해 정의되는 내용 이외의 부가적인 정보를 넣어 줄 필요가 있을 때 사용된다. <Header>에 들어가는 요소들을 header entry라고 한다. MustUnderstand 속성 SOAP서버가 헤더에 있는 메시지를 처리하는 것이 절대적으로 필요한 것인지 아닌지를 규정하는 데 사용된다. 이 속성 값이 “1”인 경우 헤더 엔트리가 필수가 되지만, “0”인 경우 헤더 엔트리는 옵션이 된다.
Envelope-(3) actor속성 <Fault> SOAP메시지가 몇 개의 애플리케이션을 통해 최종 목적지에 전달될 때, 중간에 있는 컴퓨터를 SOAP intermediary라 한다. 특정 SOAP intermediary를 거칠 때 수행될 필요가 있는 SOAP헤더들에 대해 규정해 줄때 actor 속성을 사용 이 값은 URI이며, 각각의 intermediary를 고유하게 식별한다. <Fault> 메시지 처리에 필요한 리소스가 충분하지 않거나, 잘못된 파라미터가 전달되거나, SOAP 요청을 제대로 이해하지 못하는 경우 SOAP서버가 클라이언트에 오류를 알리는 fault코드를 리턴
Envelope-(4) <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope"> <SOAP-ENV:Header> <head-ns:someHeaderElem xmlns:head-ns="some URI" soap:mustUnderstand="1" soap:actor="some URI"/> </SOAP-ENV:Header> <SOAP_ENV:Body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" > <some-ns:someElem xmlns:some-ns="some URI"/> <!--or--> <SOAP-ENV:Fault> <faltcode/> <faltstring/> <faultactor/> <detail/> </SOAP-ENV:Fault> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
SOAP Message SOAP Envelope SOAP Header Block SOAP Body SOAP 페이로드
encoding rule 개발자들에게 SOAP이 유용한 것이 되기 위해서는 SOAP Body안에서도 이와 같은 종류의 데이터형들에 대한 정보를 전달할 수 있는 수단이 제공되어야 할 필요가 있다. 따라서, SOAP스펙에 일단의 encoding rule들에 대한 내용이 포함되었다. 이 rule들은 SOAP메시지를 통해 전송되는 XML에 복잡한 데이터 형식 및 직렬화된 객체들을 사용할 수 있도록 해준다.
Web Service SOAP이 단순히 원격 프로시저 호출을 가능하게 하는 분산 컴퓨팅의 문제의 일부분을 가능하게 하는 것이라고 하면, Web Service는 SOAP을 통해 프로시저를 사용하고 싶으면, 그 프로시저가 위치하는 곳(URL)은 어디이고, 그 프로시저가 정확하게 어떤 정보를 전달해야 하는 지(SOAP 메시지의 바디형식은 어떻게 되는지)를 알 수 있는 기능과 그 밖에, 프로시저가 어떤 정보를 리턴하는지에 대하여 알 수 있는 기능들을 제공한다. WSDL(Web Service Description Language) 웹 서비스와 그 이외의 시스템 사이에 계약을 맺을 수 있게 하는 XML기반 언어 UDDI(Universal Discovery, Description, and Integration) 웹 서비스들을 등록할 수 있게 해주어서 사용자들이 다른 웹 서비스들을 찾을 수 있게 해준다.