본 내용은 Protocol중 하나 인, SOAP에 대한 개념 이해를 돕기 위해 제작되었습니다.
SOAP를 조사하게 된 계기는 회사 업무 중, 의약품 안전나라의 API를 이용해야 할 일이 있었다.
의약품 안전나라에서 제공한 가이드 문서는 다음과 같았고, SOAP를 이용하라는 이야기를 들었다.
...
이게 무슨 소리야
의약품 안전나라 측에서는 SOAP 방식을 통해서 API를 사용할 수 있도록 열어두었기 때문에, 나도 SOAP 방식으로 해당하는 결과를 받아올 필요가 있었다.
고로, SOAP에 대해서 공부해야 했고, 그 결과를 여기에 공유하려고 한다.
SOAP(Simple Object Acess Protocol)는 웹 서비스 상호작용에서 사용하는 XML 메시지 형식입니다. SOAP 메시지는 일반적으로 HTTP, HTTPS, SMTP 등을 통해 전송되지만 다른 전송 프로토콜을 사용할 수 있습니다.
SOAP는 웹 서비스 상호작용을 위한 프로토콜이고, XML로 작성되는 메시지 형식이라고 한다.
SOAP를 이용한 통신을 그림으로 표현하면 다음과 같다.
지금 처럼 설명한 그림이 인터넷에 많이 돌아다니는데, SOAP 통신 방식을 위해 알아야 할 3가지는 서비스 요청자, 서비스 브로커, 서비스 제공자이다.
서비스 요청자와 서비스 제공자는 우리가 익히 아는 Client, Server로 볼 수 있는데 서비스 브로커는 처음 들어보아서 좀 더 찾아보았다.
서비스 브로커는 서비스 제공자와 요청자 사이에 존재하며, 둘 사이를 중개하는 역할을 한다.
의 역할을 가진다.
특정 웹 서비스에서 SOAP을 사용하는 것은 WSDL
정의에서 설명된다.
WSDL(Web Services Description Language) 는 웹서비스가 기술된 정의 파일의 총칭으로 XML을 사용해 기술된다.
웹서비스의 구체적인 내용이 기술되어있는 문서이고 서비스 제공장소, 서비스 메세지 포맷, 프로토콜들이 기술되어있다.
해당 문서를 보고 Client는 서비스 위치, 필요한 파라미터 등의 정보를 알아낼 수 있다.
SOAP은 메시지를 포함하는 Envelope과 첨부 파일인 Attachment로 구성되며, Envelope은 Header와 Body로 구성 된다.
SOAP Message 구조는 다음과 같다.
SOAP Envelope
Header
: 선택적 요소로 메시지 처리와 관련된 속성 정보나, 메타데이터를 포함한다.Body
: 필수 요소로 실제 메시지 데이터가 포함된다. 요청이나, 응답이 해당 내용이 된다.Attachment
SOAP 메시지 예시는 다음과 같다.
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<!-- 헤더는 선택적으로 사용되며, 보안, 트랜잭션 등의 정보를 포함할 수 있습니다. -->
</soap:Header>
<soap:Body>
<!-- 'GetPrice' 메소드를 호출하고, 'productId' 파라미터를 전달합니다. -->
<m:GetPrice xmlns:m="http://www.example.org/stock">
<m:ProductID>12345</m:ProductID>
</m:GetPrice>
</soap:Body>
<!-- 만약 오류가 발생하면, Fault 요소가 여기 포함됩니다. -->
</soap:Envelope>
Client가 Service를 이용하는 Flow는 다음과 같다.
Service Search
먼저 Client가 Service Broker에게 어떤 서비스를 제공할 수 있는지 물어본다.
Service Request
그 이후, 서비스의 특정 요청을 브로커에게 보내면, 브로커가 이를 중개해, Service 제공자에게 요청을 전달하고 응답을 받아온다.
다음 게시글은, 우리가 사용하는 Backend Framework에서 어떻게 SOAP Broker와 통신할 수 있는지, 공유하고자 한다.