안녕하세요. 성조입니다.
이번에는 Simple Object Access Protocol의 준말인 SOAP에 대해서 정리하는 포스팅을 다뤄보려 합니다.
올바른 지식을 전달하기 위해서 노력하고 있지만. 혹여나 잘못된 정보가 있다면 언제든지 댓글로 피드백 주시면 감사드리겠습니다!
SOAP(Simple Object Access Protocol)이란?
SOAP는 웹 서비스의 중요한 프로토콜 중 하나로, HTTP 통신을 통한 XML 기반 메시지를 전송하는 프로토콜이다.
SOAP 프로토콜은 웹 서비스가 다른 네트워크, 언어 및 플랫폼에서도 정보를 교환하도록 설계되었다. 여기서 핵심은 정보를 안전하게 교환하기 위해서 선택된 것이다. SOAP는 HTTP, HTTPS, SMTP, FTP 등의 다양한 프로토콜을 통해 네트워크 상에 메시지를 주고받는 데 사용된다.
SOAP(Simple Object Access Protocol) 구조
[이미지로 설명]
Envelope: 메시지의 시작과 끝을 표시하며, 이곳에 SOAP 네임스페이스가 정의된다.
Header: 이 부분은 선택적으로 사용될 수 있으며, 메시지 처리에 필요한 속성을 포함할 수 있다.
Body: 실제 SOAP 메시지가 포함되는 부분으로, 웹 서비스 호출에 필요한 정보들이 들어가 있는 곳이다.
Fault: 오류가 발생했을 때 해당 정보를 통하여 전달하는 영역으로, 오류가 발생했을 경우에만 이 부분에 자세한 정보가 포함된다.
[예제 코드로 설명]
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Header>
</soap:Header>
<soap:Body>
<!-- 메시지 본문이 이곳에 위치한다. -->
</soap:Body>
</soap:Envelope>
soap:Envelope: SOAP 메시지의 최상위 요소로서, 메시지의 시작과 끝을 표시한다. 그리고 Envelope 네임스페이스는 메시지가 SOAP를 따르고 있다는 것을 얘기한다.
soap:Header: 메시지를 처리하는데 필요한 추가 정보를 제공하는 선택적 요소의 위치다. 예로 들면 인증 정보, 트랜잭션 요구사항 등의 메타데이터를 포함시킬 수 있다.
soap:Body: 메시지의 본문을 포함하는 요소로, 이곳에 웹 서비스의 실제 데이터가 위치한다.
soap:Fault: 메시지 처리 중 발생한 오류 정보를 담는 요소이다. Body 요소 내에 위치하게 되는데 메시지 처리에 실패했을 경우에만 포함된다.
[w3c 예제 코드]
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Header>
...
</soap:Header>
<soap:Body>
...
<soap:Fault>
...
</soap:Fault>
</soap:Body>
</soap:Envelope>
SOAP(Simple Object Access Protocol)의 장단점
SOAP는 언어와 플랫폼에 독립적인 통신이 가능하다는 점이 매우 강력한 매력을 가지고 있는 프로토콜이다. 다양한 플랫폼과 언어에서 웹 서비스를 구현할 수 있게 해 주며, WSDL(Web Services Description Language)과 결합하여 웹 서비스를 자동화하고 표준화하는데 도움을 준다.
그러나 SOAP의 경우 XML 기반의 표현을 진행하고 있으며, XML 자체가 자유도가 너무 높기 때문에 모든 것을 표현하고 규약 하기 에는 복잡하며, XML 정의에 따라서 매우 무거워진다. 이로 인해서 통신 데이터 하나의 더미를 보내는 데 있어서 처리해야 할 XML 자료가 많아져서 속도가 느려질 수 있고, 구현이 어려워질 수 있다. 또한, SOAP 통신은 일반적으로 바이너리 데이터를 포함하지 않기 때문에 비효율적인 측면이 존재한다.
SOAP API와 REST API 간단 비교
1. 보안
SOAP는 WS-Security와 같은 고급 보안 표준을 지원하며, 메시지 수준에서의 보안을 제공한다.
REST는 SSL 또는 HTTP/HTTPS의 내장 보안 기능에 의존하는 편이다.
2. 데이터 포맷
SOAP는 XML에 의존한다.
REST는 XML, JSON, YAML 등 다양한 데이터 포맷을 지원하고 있다. 또한 최근에 데이터 통신을 JSON 형식으로 많이 하면서 더욱 인기가 핫해졌다.
3. 네트워크 프로토콜
SOAP는 HTTP/HTTPS, SMTP 등 다양한 프로토콜을 지원한다.
REST는 주로 HTTP/HTTPS를 지원한다.
4. 오버헤드와 성능
SOAP 메시지는 상대적으로 무겁고 복잡하기 때문에 더 많은 전처리 시간과 메모리를 소비할 수 있다. 정보의 표현에 자율성이 높기 때문에 누군가 1부터 10까지 정한다 해도 다른 누군가는 1부터 1000까지의 데이터를 정해서 전송할 수 있기 때문에 각 통신하는 네트워크가 정보 표현이 정해지지 않은 경우 너무 많은 데이터를 보낼 수 있다.
XML 자체의 유례 또한 1990년대 후반에 전자상 거래가 많아지면서 급격하게 늘어났던 것 때문이다. 그렇게 대량의 전자 문서를 저장하고 관리하며, 검색이 가능한 XML이 당시에는 좋았지만 최근에는 상대적으로 경량화되고, 다양한 포맷을 지원하는 REST를 선호하게 됐다.
REST는 상대적으로 경량화되어 있으며, 특히 최근에 많이 활용되는 JSON 통신할 때 준수한 성능을 보여준다.
[여담]
최근에는 SOAP API보다 매우 많은 곳이 REST API를 채택하여 구축을 진행하고 있다.
궁금한 부분이 있다면 언제든지 댓글 남겨주시면 최대한 추가 설명드릴 수 있도록 하겠습니다!
오타나 이상한 부분이 있어도 언제든지 댓글 남겨주시길 바랍니다!
감사드립니다. 다음 포스팅 때 뵙겠습니다!
- 참고 -
https://ko.wikipedia.org/wiki/SOAP
https://www.redhat.com/en/topics/integration/whats-the-difference-between-soap-rest
'Network' 카테고리의 다른 글
[Network] URI, URL, URN이란? (a little deep dive) (0) | 2023.05.19 |
---|---|
[Network]브라우저 렌더링 원리 (0) | 2023.04.03 |
[Network] 브라우저 요청/응답 원리 (0) | 2023.01.18 |
[Network] 프로토콜(Protocol)이란? (0) | 2022.11.24 |
[Network] 인터넷(Internet)이란? (0) | 2022.09.28 |