본문 바로가기
프로그램 (PHP,Python)

SOAP, 아직도 쓸까? 언제 사용할까? REST와 다른 점 XML 대화 웹서비스

by 날으는물고기 2025. 4. 24.

SOAP, 아직도 쓸까? 언제 사용할까? REST와 다른 점 XML 대화 웹서비스

728x90

🧼 SOAP(Simple Object Access Protocol)란?

SOAP(심플 오브젝트 액세스 프로토콜, Simple Object Access Protocol)은 웹 서비스 간 데이터를 교환하는 프로토콜입니다. 주로 XML 기반으로 구조화된 메시지를 사용하여 네트워크를 통해 원격 프로시저 호출(RPC, Remote Procedure Call)을 수행합니다.

SOAP의 핵심 개념

  1. XML 기반 메시징
    • SOAP 메시지는 XML 형식으로 데이터를 전송하여 플랫폼 및 프로그래밍 언어에 관계없이 사용할 수 있음.
  2. 프로토콜 독립적
    • HTTP, SMTP, TCP 등 다양한 프로토콜 위에서 동작할 수 있음.
    • 하지만 일반적으로 HTTP + SSL(HTTPS)와 함께 사용됨.
  3. 웹 서비스 표준과 연동
    • WSDL(Web Services Description Language)와 함께 사용하여 서비스를 자동으로 설명하고 사용 가능.
    • SOAP 메시지를 주고받는 방식이 엄격한 표준을 따르므로 신뢰성이 높음.
  4. RPC(Remote Procedure Call) 지원
    • 원격 서버의 함수를 호출하고 결과를 받을 수 있음.
    • 예: 클라이언트가 getUserInfo(12345)를 호출하면 서버에서 해당 유저 정보를 반환.
  5. 보안
    • WS-Security를 통해 메시지 암호화, 인증, 서명 등의 보안 기능을 제공.

SOAP 메시지 구조

SOAP 메시지는 Envelope(봉투) 내부에 Header(헤더)Body(본문)가 포함됨.

 

예제: SOAP 요청 메시지

SOAP 메시지는 XML 형식으로 다음과 같이 구성됩니다.

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
  <soap:Header>
    <Authentication>
      <Username>admin</Username>
      <Password>securepassword</Password>
    </Authentication>
  </soap:Header>
  <soap:Body>
    <GetUserInfoRequest>
      <UserID>12345</UserID>
    </GetUserInfoRequest>
  </soap:Body>
</soap:Envelope>

위 요청을 서버에 보내면, 12345번 유저 정보를 요청하는 것.

 

예제: SOAP 응답 메시지

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
  <soap:Body>
    <GetUserInfoResponse>
      <UserID>12345</UserID>
      <Name>John Doe</Name>
      <Email>johndoe@example.com</Email>
    </GetUserInfoResponse>
  </soap:Body>
</soap:Envelope>

서버에서 SOAP 응답을 받으면, 해당 유저 정보를 XML 형식으로 반환.

SOAP vs REST

SOAP과 REST는 모두 웹 서비스를 위한 통신 방식이지만 차이점이 있음.

특징 SOAP REST
프로토콜 HTTP, SMTP, TCP 지원 HTTP 기반 (GET, POST, PUT, DELETE)
데이터 포맷 XML만 사용 JSON, XML, YAML, HTML 등 사용 가능
보안 WS-Security 사용 HTTPS, OAuth 2.0 사용
속도 무겁고 속도가 느림 가볍고 빠름
표준화 엄격한 표준 준수 유연한 구조
사용 사례 금융, 엔터프라이즈 시스템 모바일, 웹 애플리케이션
  • 금융/보안이 중요한 환경에서는 SOAP
  • 빠르고 가벼운 API가 필요하면 REST

SOAP의 활용 예시

  • 기업용 웹 서비스 (예: 금융권, 보험사 API)
  • 은행 간 데이터 교환 (보안이 중요한 서비스)
  • IoT 디바이스 관리
  • 정부 기관 데이터 통합
  • B2B 시스템 연동 (SAP, Oracle 등)

 

✔ SOAP는 XML 기반의 웹 서비스 통신 프로토콜
✔ HTTP, SMTP, TCP 등 다양한 프로토콜에서 동작 가능
WS-Security를 통한 높은 보안성 제공
엄격한 표준을 준수하여 신뢰성이 높지만, REST에 비해 무거움
금융, 기업용 웹 서비스, 정부 시스템에서 주로 사용

SOAP 구현 및 테스트 단계

1. SOAP 서버 구현 (Python)

SOAP 서버를 만들기 위해 Spyne 라이브러리를 사용합니다.
Spyne는 Python에서 SOAP 서비스를 쉽게 만들 수 있도록 도와주는 라이브러리입니다.

 

SOAP 서버 코드 (soap_server.py)

from spyne import Application, rpc, ServiceBase, Unicode
from spyne.protocol.soap import Soap11
from spyne.server.wsgi import WsgiApplication
from wsgiref.simple_server import make_server

# SOAP 서비스 정의
class HelloWorldService(ServiceBase):
    @rpc(Unicode, _returns=Unicode)
    def say_hello(ctx, name):
        return f"Hello, {name}! Welcome to SOAP service."

# SOAP 애플리케이션 생성
application = Application(
    [HelloWorldService], 
    tns="http://example.com/soap",
    in_protocol=Soap11(validator='lxml'),
    out_protocol=Soap11()
)

# WSGI 서버 실행
wsgi_application = WsgiApplication(application)

if __name__ == "__main__":
    server = make_server("127.0.0.1", 8000, wsgi_application)
    print("SOAP Server running on http://127.0.0.1:8000")
    server.serve_forever()
  • ServiceBase: SOAP 서비스의 기본 클래스
  • @rpc(입력형태, _returns=출력형태): SOAP 메소드 정의
  • Soap11(): SOAP 1.1 버전 프로토콜을 사용
  • WsgiApplication: WSGI 기반 SOAP 서버 실행
  • make_server("127.0.0.1", 8000, wsgi_application): localhost:8000에서 서버 실행

2. SOAP 클라이언트 구현 (Python)

SOAP 클라이언트는 zeep 라이브러리를 사용하여 서버와 통신합니다.

 

SOAP 클라이언트 코드 (soap_client.py)

from zeep import Client

# SOAP 서버 주소
wsdl_url = "http://127.0.0.1:8000/?wsdl"

# 클라이언트 생성
client = Client(wsdl_url)

# SOAP 요청 보내기
response = client.service.say_hello("John Doe")

# 응답 출력
print("SOAP Response:", response)
  • zeep.Client(wsdl_url): WSDL URL을 기반으로 SOAP 클라이언트 생성
  • client.service.say_hello("John Doe"): 서버의 say_hello 메소드 호출
  • print(response): 서버의 응답 출력

3. SOAP 서버 실행 및 테스트

1️⃣ SOAP 서버 실행

python soap_server.py

출력

SOAP Server running on http://127.0.0.1:8000

2️⃣ SOAP 클라이언트 실행

python soap_client.py

출력

SOAP Response: Hello, John Doe! Welcome to SOAP service.

4. SOAP 메시지 분석

SOAP 통신은 XML 기반 메시지를 사용합니다.

 

SOAP 요청 메시지

클라이언트가 서버에 say_hello("John Doe") 요청을 보낼 때의 XML 메시지

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
                  xmlns:tns="http://example.com/soap">
   <soapenv:Body>
      <tns:say_hello>
         <tns:name>John Doe</tns:name>
      </tns:say_hello>
   </soapenv:Body>
</soapenv:Envelope>

SOAP 응답 메시지

서버가 클라이언트에게 응답할 때의 XML 메시지

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
                  xmlns:tns="http://example.com/soap">
   <soapenv:Body>
      <tns:say_helloResponse>
         <tns:return>Hello, John Doe! Welcome to SOAP service.</tns:return>
      </tns:say_helloResponse>
   </soapenv:Body>
</soapenv:Envelope>

5. SOAP UI를 이용한 테스트

SOAP UI를 사용하면 GUI 환경에서 SOAP API를 쉽게 테스트할 수 있습니다.

 

SOAP UI로 테스트하는 방법

  1. SOAP UI 설치
  2. 새 프로젝트 생성
    • "New SOAP Project" 클릭
    • WSDL URLhttp://127.0.0.1:8000/?wsdl 입력
    • "OK" 클릭
  3. SOAP 요청 전송
    • say_hello 메소드 선택
    • name 필드에 "John Doe" 입력
    • "Send" 버튼 클릭
  4. 결과 확인
    • 응답 메시지 창에서 Hello, John Doe! Welcome to SOAP service. 확인

✔ SOAP 서버를 Python으로 쉽게 구현 가능 (spyne 사용)
✔ SOAP 클라이언트를 zeep로 간단하게 작성 가능
✔ XML 기반 메시지를 주고받아 플랫폼 독립적인 통신 가능
SOAP UI를 사용하면 GUI 환경에서 쉽게 테스트 가능
✔ 금융, 기업용 서비스, 보안이 중요한 환경에서 유용

 

SOAP 서비스가 필요한 경우 REST보다 보안성과 신뢰성이 높은 SOAP을 사용!

728x90
그리드형

댓글