[CS/네트워크] SOAP

황제연·2025년 6월 16일
0

CS학습

목록 보기
107/193
post-thumbnail

SOAP란?

SOAP란 Simple Object Access Protocol의 약자로 XML기반의 메세지 교환 프로토콜입니다
SOAP는 서로 다른 플랫폼 언어로 구현된 애플리케이션 간에
구조화된 정보를 주고받기 위해 설계되었습니다

SOAP의 특징

XML 기반과 플랫폼 독립성

모든 메세지가 XML문서 형태로 인코딩되므로 언어나 플랫폼에 독립적입니다

HTTP 이외의 다양한 프로토콜 사용가능

주로 HTTP를 이용하지만 SMTP, JMS 등의 프로토콜을 통해서도 메세지를 전송할 수 있습니다

확장성

SOAP Header를 통해 보안, 트랜잭션, 인증, 라우팅 등 다양한 확장이 가능합니다

WS-* 표준 연계

WS-Security, WS-ReliableMessaging, WS-Transaction 등 고급 웹서비스 표준과 결합할 수 있습니다

오류 처리의 표준화

SOAP Fault를 통해 표준적일 오류 처리를 지원합니다

SOAP 메세지 구조

SOAP 메세지는 Envelope, Header, Body, Fault 구성요소로 이루어집니다

구조 예시

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
  <soap:Header>
    <m:Authentication xmlns:m="http://example.org/auth">
      <m:UserName>JohnDoe</m:UserName>
      <m:Password>1234</m:Password>
    </m:Authentication>
  </soap:Header>

  <soap:Body>
    <m:GetPrice xmlns:m="http://example.org/stock">
      <m:StockName>Google</m:StockName>
    </m:GetPrice>
  </soap:Body>

  <soap:Fault>
    <soap:Code>
      <soap:Value>soap:Sender</soap:Value>
    </soap:Code>
    <soap:Reason>
      <soap:Text>Invalid Stock Name</soap:Text>
    </soap:Reason>
  </soap:Fault>
</soap:Envelope>

요소별 설명

요소명필수 여부설명
Envelope필수SOAP 메세지 전체를 감싸는 최상위 요소
Header선택확장 정보를 포함(보안, 인증, 라우팅 등)
Body필수실제 요청 및 응답 데이터를 포함
Fault선택오류 발생 시 오류정보를 표준적으로 포함

SOAP Fault의 상세 구조

SOAP 메세지 처리 중 오류가 발생하면, Fault 요소를 이용하여 표준화된 형태로 응답합니다

<soap:Fault>
  <soap:Code>
    <soap:Value>soap:Sender</soap:Value>
    <soap:Subcode>
      <soap:Value>m:InvalidMessage</soap:Value>
    </soap:Subcode>
  </soap:Code>
  <soap:Reason>
    <soap:Text xml:lang="en">Invalid Stock Name</soap:Text>
  </soap:Reason>
  <soap:Detail>
    <m:ErrorDetail xmlns:m="http://example.org/stock">
      The provided stock name was not recognized.
    </m:ErrorDetail>
  </soap:Detail>
</soap:Fault>
  • Code: 오류 종류를 나타내는 코드(Receiver, Sender 등)
  • Reason: 오류에 대한 설명
  • Detail: 추가적인 상세 정보 제공 가능

SOAP의 메세지 전송 방식 (바인딩)

SOAP는 기본적으로 전송 프로토콜과 독립적이지만, 대표적인 전송 방식은 다음과 같습니다.

  • HTTP(S): 웹 환경에서 가장 많이 사용
  • SMTP: 이메일 전송 프로토콜 사용 가능
  • JMS(Java Message Service): 메시지 큐를 통한 비동기적 메시지 처리 가능

HTTP를 사용할 경우 일반적으로 POST 메서드를 사용하며, 메시지의 MIME 타입은 다음과 같습니다.

  • SOAP 1.1: text/xml
  • SOAP 1.2: application/soap+xml

SOAP의 장단점

장점

  • 플랫폼과 언어에 독립적이고 강력한 확장성과 엄격한 오류처리가 존재합니다

단점

  • XML의 무거운 구조로 성능 저하 및 오버헤드 발생 가능합니다

REST와의 비교

SOAPREST
프로토콜이 엄격하고 명확함가볍고 가벼운 구조
XML 기반XML, JSON 등 자유로운 포맷 사용
Stateful 가능Stateless를 원칙으로 함
확장성이 뛰어나지만 복잡함간단하고 직관적인 제공

stateful vs stateless

stateless

서버가 클라이언트의 이전 요청 상태를 전혀 기억하지 않고, 모든 요청이 독립적으로 처리되는 방식입니다
각 요청에 서비스 수행에 필요한 모든 정보가 포함되어야 합니다

stateful

서버가 클라이언트와의 세션 상태를 저장/관리하며, 연속된 요청을 하나의 흐름으로 취급합니다
초기 요청 이후 추가정보를 서버가 내부적으로 유지합니다

SOAP의 Stateful 선택 기준

  • 강력한 트랜잭션 보장이 필요할 때
  • 메세지 신뢰성 보장 가능
  • 복잡한 프로세스나 이벤트 기반 통신

참고로 SOAP의 기본 스펙은 stateless이며,
WS-* 확장(WS-ReliableMessaging, WS-AtomicTransaction)을 붙여 stateful 플로우를 구현
할 수 있습니다

profile
Software Developer

0개의 댓글