🧼 SOAP(Simple Object Access Protocol)란?
SOAP(심플 오브젝트 액세스 프로토콜, Simple Object Access Protocol)은 웹 서비스 간 데이터를 교환하는 프로토콜입니다. 주로 XML 기반으로 구조화된 메시지를 사용하여 네트워크를 통해 원격 프로시저 호출(RPC, Remote Procedure Call)을 수행합니다.
SOAP의 핵심 개념
- XML 기반 메시징
- SOAP 메시지는 XML 형식으로 데이터를 전송하여 플랫폼 및 프로그래밍 언어에 관계없이 사용할 수 있음.
- 프로토콜 독립적
- HTTP, SMTP, TCP 등 다양한 프로토콜 위에서 동작할 수 있음.
- 하지만 일반적으로 HTTP + SSL(HTTPS)와 함께 사용됨.
- 웹 서비스 표준과 연동
- WSDL(Web Services Description Language)와 함께 사용하여 서비스를 자동으로 설명하고 사용 가능.
- SOAP 메시지를 주고받는 방식이 엄격한 표준을 따르므로 신뢰성이 높음.
- RPC(Remote Procedure Call) 지원
- 원격 서버의 함수를 호출하고 결과를 받을 수 있음.
- 예: 클라이언트가
getUserInfo(12345)
를 호출하면 서버에서 해당 유저 정보를 반환.
- 보안
- 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로 테스트하는 방법
- SOAP UI 설치
- SOAP UI 다운로드
- 설치 후 실행
- 새 프로젝트 생성
- "New SOAP Project" 클릭
WSDL URL
에http://127.0.0.1:8000/?wsdl
입력- "OK" 클릭
- SOAP 요청 전송
say_hello
메소드 선택name
필드에"John Doe"
입력- "Send" 버튼 클릭
- 결과 확인
- 응답 메시지 창에서
Hello, John Doe! Welcome to SOAP service.
확인
- 응답 메시지 창에서
✔ SOAP 서버를 Python으로 쉽게 구현 가능 (spyne
사용)
✔ SOAP 클라이언트를 zeep
로 간단하게 작성 가능
✔ XML 기반 메시지를 주고받아 플랫폼 독립적인 통신 가능
✔ SOAP UI
를 사용하면 GUI 환경에서 쉽게 테스트 가능
✔ 금융, 기업용 서비스, 보안이 중요한 환경에서 유용
SOAP 서비스가 필요한 경우 REST보다 보안성과 신뢰성이 높은 SOAP을 사용!
댓글