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 를 구현하는 과정은 일방적으로 다음과 같습니다.:
- WSDL 작성 : WSDL(Web Services Description Language) 문서를 통해 서비스의 인터페이스를 정의 합니다. 이는 서비스가 제공하는 메소드, 요청 및 응답 메시지의 구조, 데이터 타입 등을 명시합니다.
- SOAP 메시지 생성 : 클라이언트와 서버 간의 통신에 사용될 SOAP 메시지를 XML 형식으로 작성합니다. 이 메시지는 헤더(선택적) 와 바디(필수) 그리고 실제 요청 데이터를 포함합니다.
- 서버 구현 : 서비스의 비즈니스 로직을 구현하고, 요청을 처리한 후 적절한 응답을 SOAP 메시지로 반환합니다.
- 클라이언트 구현 : 클라이언트 애플리케이션에서는 서비스 요청을 위한 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 보단 복잡하고 높은 오버헤드에도 불구하고 사용하는 이유는 높은 보안 요구 사항과 트랜잭션 관리가 필요할 경우 인 것 같습니다.
'IT 지식' 카테고리의 다른 글
POJO(Plain Old Java Object) (0) | 2024.04.18 |
---|---|
소프트웨어 디자인의 빌더 패턴 이해 (0) | 2024.03.27 |
Java의 ObjectMapper 이해 (0) | 2024.03.26 |
이클립스 실행이 안될때 해결법 (1) | 2024.03.14 |
MSA(Microservice Architecture, 마이크로서비스 아키텍처) (0) | 2024.01.26 |