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

SOAP : simple object access protocol : 개념, 정의, 개요, 예제

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

SOAP

SOAP은 웹서비스 간에 교환되는 메시지의 packaging과 전송을 위한 표준 프레임워크로서 두 가지 정의가 있습니다.

첫 번째 정의는 service oriented architecture protocol이라는 정의입니다. SOAR을 이루는 서비스의 인터페이스를 정의하고 이에 따라서 서비스 간의 정보를 교환하는 프로토콜을 의미합니다.

두 번째 정의는 RPC 모델을 기반으로 서비스를 원격으로 호출합니다. 이때 필요로 하는 메시지를 marshaling, unmarshaling하기 위한 프로토콜이라는 정의가 있습니다.

 

SOAP : simple object access protocol : 개념, 정의, 개요, 예제

 

이러한 SOAP 메시지는 네 개의 요소로 구성이 되어 있습니다. 먼저 전체 SOAP 메시지는 SOAP envelope이라는 것으로 감싸져서 전송이 됩니다. 그 SOAP envelope 안에는 SOAP header와 SOAP body 부분으로 이루어집니다. 여기서 SOAP header는 꼭 필요한 것은 아닙니다. SOAP body에서 처리해야 되는 데이터에 관련된 정보가 header를 통해서 전송합니다. 즉 header는 처리해야 되는 데이터를 application specific하게, 또 부가 정보를 제공하기 위해서 사용합니다.

그리고 SOAP body 부분에는 실제로 앞서서 설명 드렸던 RPC 모델에 기반해서 어떤 operation을 호출합니다. operation 호출에 필요로 하는 입력값이나 혹은 operation에 수행된 결과값들이 표현돼서 전달합니다. 만약에 어떤 서비스를 수행하는 과정에서 오류가 발생될 경우에는 그 오류 정보도 이 body 부분에 포함이 돼서 전달될 수 있습니다. 그럴 경우에는 fault라는 element를 body 부분에 optional하게 넣어서 전송을 합니다.

여기에 XML 형태로 표현된 SOAP의 틀이 있습니다. 이 XML 틀은 envelope으로 시작을 합니다. 그 envleope 안에는 header와 body 부분의 요소들로 구성되는 것을 확인할 수 있습니다. 그리고 body 부분에는 fault라는 element가 또한 포함됩니다.

envelope 안에 body 부분이 들어 있습니다. 그 body 부분에는 구글 서치를 호출하기 위한 operation 이름, 즉 do google search가 명시됩니다. 그리고 그 element 아래에는 search, 검색을 위해서 필요로 하는 parameter값 들이 각각의 element들로 표현이 돼 있습니다. 예를 들면 key라는 element는 구글 서치 엔진을 호출하기 위해서 필요로 하는 key값이 됩니다. 그 아래에 있는 q라는 element는 검색을 위한 qual이 키워드를 명세하는 부분이 됩니다.

이러한 parameter와 operation 이름을 통해서 SOAP 메시지를 구성합니다. 그리고 이것을 구글 server에게 전달을 함으로써 검색을 이루게 돕니다. 이러한 SOAP request 메시지를 전달하기 위해서는 HTTP 연결을 server와 이루고 SOAP 메시지를 전달을 해야합니다. 구글의 검색 엔진 server에 HTTP 포트에 해당하는 80번 포트로 연결을 이룹니다. 그 이후에는 HTTP header에 전송하는 메시지가 SOAP 메시지임을 명시를 합니다.

그 이후에는 SOAP request 메시지를 그대로 넣어서 전송을 합니다. 이렇게 SOAP request 메시지를 검색 엔진에 보내고 나면 그 검색 엔진은 검색을 실제로 수행해서 그 결과를 다시 SOAP 메시지로 만들어서 client에게 전송을 합니다. 먼저 결과에 관련된 메타 데이터 정보가 header로 구성됩니다.

어떠한 operation을 호출했습니다. 그 다음에 결과값의 index가 어떻게 되는지, 그리고 전체 검색된 웹페이지의 수가 얼마가 되는지, 이러한 정보들이 포함됩니다. 그리고 이어서 실제로 검색된 결과가 나열되어 있습니다. 즉 result elements라는 tag 아래 검색된 결과 하나 하나씩 item들이 나열이 됩니다.

 

SOAP : simple object access protocol : 개념, 정의, 개요, 예제

 

각각의 item은 찾아진 url, 그리고 그것의 directory 이름, category 이름, 문서의 제목, 그리고 어떠한 summary 정보, 이런 것들이 다 포함이 되는 모습을 볼 수 있습니다. 즉 일반적으로 브라우저를 통해서 구글 검색 엔진을 접근했을 때, 받아보실 수 있는 검색 결과가 바로 이러한 XML SOAP 안에 다 포함돼 있는 모습을 볼 수 있습니다. 

 

 

SOAP Nodes & Message Path

SOAP 메시지를 전송하고 받고 처리하기 위해서는 SOAP node라고 부르는 것을 통하게 됩니다. SOAP node는 각각마다 그 역할이 부여됩니다. 가장 기본이 되는 역할은 SOAP 메시지를 전송을 하는 SOAP sender의 역할이 있습니다. 그리고 SOAP 메시지를 받는 receiver의 역할이 있습니다.

그리고 SOAP 메시지는 여러 SOAP node를 거쳐서 전달이 될 수 있습니다. 그런 SOAP 메시지 전달 경로를 SOAP message path라고 부릅니다. 그리고 SOAP message path 상에서 가장 처음에 메시지를 전송하는 node를 initial SOAP sender라고 부릅니다.

또 최종적으로 메시지를 받는 node를 ultimate SOAP receiver라고 합니다. 그리고 이 두 node 사이에는 여러 node들이 존재할 수 있습니다. 그런 걸 SOAP intermediary라고 부릅니다. 여기서 SOAP intermediary들은 SOAP header block에 있는 정보를 처리합니다. 이에 따라서 SOAP 메시지를 다음 node로 전달하는 역할을 수행을 합니다.

 

 

SOAP HEAD BLOCK

SOAP header는 header block들로 구성이 됩니다. 각각의 header block에는 먼저 이름이 명시가 됩니다. 이후에는 SOAP node들의 역할과 행위를 정의하는 attribute들이 나열이 되어 있습니다. 그리고 그 이하에는 전달하고자 하는 정보, item들이 subelement로 들어갑니다. 각각의 header block에는 attribute들을 지정을 할 수 있습니다. 먼저 role은 header block이 처리해야 하는 SOAP node를 지정하기 위한 것입니다.

즉 role이 next라고 지정되어 있는 경우에는 SOAP message path 상에서 initial sender 다음에 모든 node들이 해당 header block을 처리해야 한다는 것을 의미를 합니다. role이 ultimate receiver라고 지정된 경우에는 오직 맨 마지막에 있는 ultimate receiver node만 header block을 처리하면 된다는 것을 의미를 합니다.

role이 만약 none으로 지정되어 있을 경우에는 SOAP message path 상에 있는 어떠한 SOAP node도 header block을 처리할 필요가 없다는 것을 의미를 합니다. 이러한 none으로 지정된 header block은 이 header bolck을 직접 처리하기 위한 것이 아닙니다. 다른 header block이 이 header block을 참조하기 위한 목적이라 합니다. 특별히 역할을 부여받지 못한 SOAP node가 있습니다.

그런 경우에는 역할을 부여받지 않았을 때는 그냥 그 다음 node로 SOAP header를 포워딩을 합니다. 그리고 만약에 must-understand라는 attribute가 있을 경우에는 만약에 자신이 처리해야 되는 경우는 그것을 처리합니다. 그렇지 않은 경우는 지금 현재의 SOAP header block을 그 다음 node로 relay를 해줍니다. 그러니까 relay는 attribute가 true라고 돼 있을 경우는 그것을 포워딩해주고 그렇지 않을 경우는 그 header block을 지울 수 있습니다. 이러한 과정을 통해서 SOAP 메시지는 SOAP node를 거쳐서 relay가 되고 처리가 돼서 최종적인 ultimate receiver까지 전달이 됩니다.

header block으로서 transaction ID 정보를 전달합니다. role은 ultimate receiver라고 지정돼 있기 때문에 이것은 이 header block이 최종 메시지 수신 node에서만 처리되면 된다는 것을 의미합니다. 그리고 must-understand가 true로 명시가 되어 있기 때문에 이 메시지를 수신하는 최종 node인 ultimate receiver는 이 transaction ID를 꼭 처리해야 됩니다. 그리고 실제 transaction ID값은 이 header block의 값으로 명시가 돼 있는 것을 확인할 수 있습니다.

 

 

SOAP BODY MESSAGE FORMATS

SOAP의 body message는 다음과 같이 세 가지 형태로 표현이 됩니다. 먼저 RPC-centric format이 있습니다. 이 RPC-centric format은 앞서 설명 드렸던 RPC 모델에 따라서 서비스의 기능을 호출하기 위한 목적입니다. 그래서 RPC 모델에 따라서 서비스를 호출하기 위해서는 그 operation의 이름, 그 operation에서 필요로 하는 input-parameter, 그리고 operation으로부터 나오는 결과값들을 표현하기 위한 목적들입니다. 

그래서 이때는 일반적으로 SOAP 표준 인코딩 방법을 사용해서 메시지 내용을 표현합니다. 두 번째 포맷은 Document-centric format이라고 합니다. 이것은 어떤 어플리케이션에서 필요로 하는 데이터를 일반적인 XML 문서 형태로 구성을 해서 전송을 하는 방법이 됩니다.

이 경우에는 application-specific한 schema에 따라서 XML 메시지를 표현합니다. 마지막으로 세 번째는 SOAP attachment라는 포맷이 있습니다. 이러한 SOAP attachment format은 SOAP 메시지와는 별도로 다른 문서를 구성해서 첨부하는 형태가 됩니다.

이때 SOAP body 부분에는 이 첨부 문서를 참조하는 링크를 포함합니다. 즉 이런 SOAP attachment 방법을 사용을 하면 SOAP body 내에 포함될 수 없는 이미지나 binary data를 전달 할 때 유용하게 사용됩니다.

 

SOAP : simple object access protocol : 개념, 정의, 개요, 예제

 

은행 웹서비스 호출을 통해서 새로운 계좌 개설을 위해 SOAP request message를 작성한 예입니다. 즉 예에서 보시면 SOAP body가 RPC-centric format으로 구성이 되어서 호출할 기능의 이름과 입력 데이터 parameter가 표현된 것입니다.

그리고 인코딩 방법으로 SOAP 인코딩을 사용하는 것으로 지정됩니다. 또 상세한 데이터 타입을 지정하기 위해서 XML schema가 사용되었습니다. 이러한 은행 계좌 개설에 필요한 요청 SOAP 메시지를 실제 은행 서비스 제공자에게 보내면 그 이후에 다음과 같은 SOAP response message를 받게 됩니다.

이 메시지도 역시 RPC 형태로 구성이 되어 있기 때문에 RPC procedure call을 한 다음에 return값 형태로 그 결과가 표현돼 있는 것을 확인합니다. 그리고 그 return된 값으로서는 개설된 계좌의 번호가 전달됩니다. 이러한 return값을 표현하기 위해서 역시 XML schema가 사용되었습니다.

 

 

SOAP : simple object access protocol : 개념, 정의, 개요, 예제

 

SOAP 프로토콜을 사용해서 웹서비스를 개발하고 활용할 수 있는 다양한 오픈소스 도구들이 존재합니다. 이 도구들을 사용해서 쉽게 웹서비스와 웹서비스 client를 개발을 합니다. 또 WSDL 기반으로 웹서비스를 명세해서 그것들을 publish할 수 있습니다.사용하고 계신 플랫폼과 익숙한 프로그래밍 언어에 따라서 여기 나열된 도구 중에서 적절한 것을 선택해서 활용할 수 있습니다.

 

출처 : http://www.kmooc.kr/courses/course-v1:KAISTk+CS459+2020_K12_01/course/

 

강좌 | CS459 | K-MOOC

 

www.kmooc.kr

반응형