REST & SOAP

Metronon·2024년 12월 31일
0

REST-API

목록 보기
10/12
post-thumbnail

SOAP (Simple Object Access Protocol)

SOAP란 REST 아키텍쳐 방식이 대중화되기전 사용되던 XML 기반의 메시지 교환 프로토콜이다.
HTTP URI와 HTTP Method를 사용하는 REST API와 다르게 SOAP는 다음과 같은 특징을 가진다.

  • XML 기반의 메시지 교환
  • 각 요청이 모두 POST 형식
  • 엄격한 표준과 규칙 준수
  • 상태 저장 가능 (Stateful)

REST vs SOAP

오늘날에는 데이터의 보안이 중요한 금융 서비스등에서만 SOAP를 이용한다.
그 이유는 REST와 SOAP의 특징이 다르기 때문이다.

1. 보안

SOAP : WS-Security, SSL등 내장되어 있는 보안 기능을 활용할 수 있다.
REST : HTTPS, JWT 등의 외부 보안 매커니즘을 가져와 사용할 수 있다.

2. 메시지 형식

SOAP : XML만을 지원한다.
REST : XML, HTML, JSON 등 다양한 형식을 지원한다.

3. 네트워크 사용량 (대역폭)

SOAP : XML을 사용하기 때문에 더 많은 대역폭이 필요하다.
REST : JSON을 주로 사용해 상대적으로 적은 대역폭을 사용한다.

4. 상태성

SOAP : Stateful로 세션을 유지해 복잡한 트랜잭션 처리에 용이하다.
REST : Stateless로 높은 확장성을 가진다.

상태성면에서 봤을때 SOAP가 연속적이고 복잡한 트랜잭션의 처리나 그에 따른 데이터의 무결성을 더욱 잘 유지할 수 있다.
따라서 일반적인 웹 서비스에선 REST가 대중화 되어있지만,
금융거래나 엔터프라이즈 환경에서는 SOAP가 더 적합할 수 있다.

SOAP 요청 예시

요청 (Request)

<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Header>
<auth>
<username>user123</username>
<apiKey>abc123xyz789</apiKey>
</auth>
</soap:Header>
<soap:Body>
<getUserRequest>
<userId>12345</userId>
</getUserRequest>
</soap:Body>
</soap:Envelope>

응답 (Response)

<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Body>
<getUserResponse>
<user>
<id>12345</id>
<name>홍길동</name>
<email>hong@example.com</email>
<age>30</age>
<address>
<street>강남대로 123</street>
<city>서울시</city>
<country>대한민국</country>
</address>
</user>
</getUserResponse>
</soap:Body>
</soap:Envelope>

REST 요청 예시

요청 (Request)

GET /api/users/12345 HTTP/1.1
Host: api.example.com
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
Accept: application/json

응답 (Response)

{
    "status": 200,
    "data": {
        "id": "12345",
        "name": "홍길동",
        "email": "hong@example.com",
        "age": 30,
        "address": {
            "street": "강남대로 123",
            "city": "서울시",
            "country": "대한민국"
        }
    }
}
profile
비전공 개발 지망생의 벨로그입니다!

0개의 댓글