본문 바로가기
  • Thank you for visiting.....
IT 지식

SOAP(Simple Object Access Protocol)

by HyunSoooo 2024. 2. 20.
728x90

 

 

introduction-to-soap-api-for-web-services

 

SOAP (Simple Object Access Protocol) API 기본적인 개념, 장점 ,단점 에 대해 작성해보겠습니다.

 

SOAP 란 무엇인가?

SOAP(Simple Object Access Protocol) 는 웹 서비스 통신을 위한 프로토콜입니다. XML 기반 메시지 형식을 사용하여 애플리케이션 간 데이터를 교환합니다. SOAP는 인터넷 프로토콜(HTTP,HTTPS), 애플리케이션 프로토콜(SMTP) 등 다양한 통신 프로토콜 위에서 작동할 수 있으며, 보안, 트랜잭션 관리, 메시지 교환 등 복잡한 통신 오규 사항을 지원하는 강력한 기능을 제공합니다.

 

SOAP 의 주요 특징

  • 표준화된 프로토콜 : SOAP 는 W3C에 의해 표준화되어, 다양한 시스템, 플랫폼 간 호환성을 보장합니다.
  • 보안:WS-Security 와 같은 표준을 통해 메시지의 보안을 강화할 수 있습니다.
  • 확장 가능성 : WS-* 규격을 통해 트랜잭션 관리, 메시지 검증 등 추가 기능을 손쉽게 구현할 수 있습니다.
  • 높은 오버헤드: XML 메시지 포맷 떄문에 비교적 큰 오버헤드가 발생할 수 있습니다.

SOAP 사용 사례

SOAP는 특히 보안과 신뢰성이 중요한 분야에서 널리 사용됩니다. 금융 서비스, 텔레콤 , 의료정보 시스템 등이 대표적인 예시입니다. 이러한 분야에서는 안정성과 보안, 복잡한 트랜잭션 관리가 필수적이며, SOAP 는 이러한 요구 사항을 충족시킨느 데 적합한 프로토콜입니다.

SOAP 구성 요소

  • WSDL (Web Services Description Language): WSDL은 웹 서비스의 공개 인터페이스를 XML 형식으로 기술하는 표준입니다. 웹 서비스가 어떤 작업을 수행할 수 있는지, 입출력으로 무엇을 기대하는지, 서비스를 어떻게 접근할 수 있는지 등을 정의합니다.
  • SOAP 메시지: 데이터 교환의 기본 단위로, XML 형식을 사용하여 정보를 구조화하고 패키징합니다.
  • SOAP 바인딩: SOAP 메시지가 네트워크를 통해 어떻게 전송될지 정의합니다. 일반적으로 HTTP, HTTPS, SMTP 등이 사용됩니다.
  • SOAP 엔벨로프: SOAP 메시지의 최상위 요소로, 메시지가 SOAP 규격을 따르고 있다는 것을 나타냅니다. 엔벨로프 내에는 헤더와 바디가 포함됩니다.

SOAP API 구현 방법

SOAP API 를 구현하는 과정은 일방적으로 다음과 같습니다.:

  1. WSDL 작성 : WSDL(Web Services Description Language) 문서를 통해 서비스의 인터페이스를 정의 합니다. 이는 서비스가 제공하는 메소드, 요청 및 응답 메시지의 구조, 데이터 타입 등을 명시합니다.
  2. SOAP 메시지 생성 : 클라이언트와 서버 간의 통신에 사용될 SOAP 메시지를 XML 형식으로 작성합니다. 이 메시지는 헤더(선택적) 와 바디(필수) 그리고 실제 요청 데이터를 포함합니다.
  3. 서버 구현 : 서비스의 비즈니스 로직을 구현하고, 요청을 처리한 후 적절한 응답을 SOAP 메시지로 반환합니다.
  4. 클라이언트 구현 : 클라이언트 애플리케이션에서는 서비스 요청을 위한 SOAP 메시지를 생성하고, 서비스로부터 받은 응답을 처리합니다.

WSDL 예시

XML 형식으로 작성을 하며 " AdditionService "서비스가 두 정수를 입력 받아 합을 반환하는 예시 입니다.

<definitions name="AdditionService"
             targetNamespace="http://www.example.org/addition/"
             xmlns="http://schemas.xmlsoap.org/wsdl/"
             xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
             xmlns:tns="http://www.example.org/addition/"
             xmlns:xsd="http://www.w3.org/2001/XMLSchema">

  <message name="AdditionRequest">
    <part name="number1" type="xsd:int"/>
    <part name="number2" type="xsd:int"/>
  </message>

  <message name="AdditionResponse">
    <part name="sum" type="xsd:int"/>
  </message>

  <portType name="AdditionPortType">
    <operation name="Add">
      <input message="tns:AdditionRequest"/>
      <output message="tns:AdditionResponse"/>
    </operation>
  </portType>

  <binding name="AdditionBinding" type="tns:AdditionPortType">
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
    <operation name="Add">
      <soap:operation soapAction="http://www.example.org/addition/Add"/>
      <input>
        <soap:body use="literal"/>
      </input>
      <output>
        <soap:body use="literal"/>
      </output>
    </operation>
  </binding>

  <service name="AdditionService">
    <port name="AdditionPort" binding="tns:AdditionBinding">
      <soap:address location="http://www.example.org/additionService"/>
    </port>
  </service>
</definitions>

 

 

SOAP 요청 메시지 예시

SOAP 클라이언트가 위의 "AdditionServer" 서비스에 두 숫자를 더하도록 요청하는 SOAP 메시지는 다음과 같이 코드를 작성할 수가 있습니다.

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
                  xmlns:ex="http://www.example.org/addition/">
   <soapenv:Header/>
   <soapenv:Body>
      <ex:AdditionRequest>
         <number1>5</number1>
         <number2>3</number2>
      </ex:AdditionRequest>
   </soapenv:Body>
</soapenv:Envelope>

이 요청은 5와 3을 더하도록 서비스에 요청합니다.

 

SOAP 응답 메시지 예시

서비스로부터 받는 응답 메시지는 다음과 같습니다.

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
                  xmlns:ex="http://www.example.org/addition/">
   <soapenv:Header/>
   <soapenv:Body>
      <ex:AdditionResponse>
         <sum>8</sum>
      </ex:AdditionResponse>
   </soapenv:Body>
</soapenv:Envelope>

이 응답은 합 , 8을 반환합니다.

 

JSON 보단 복잡하고 높은 오버헤드에도 불구하고 사용하는 이유는 높은 보안 요구 사항과 트랜잭션 관리가 필요할 경우 인 것 같습니다.

728x90