본문 바로가기

잡인터뷰

잡 인터뷰 질문 1 - SOAP와 REST차이점

반응형

한참을 잡서치 하다 드디어 회사의 인터뷰에 응할 수 있는 기회가 있었고

인터뷰 중에 기억나는 질문 중에 하나였다. SOAP와 REST의 차이가 뭐고 어떤 상황일 때 뭐를 사용하는 게 적합한지 설명해 달라는 거였다.

나름대로 SOAP와 REST의 차이 점을 설명후 질문대로 보안이 필요한 정보를 주고받을 때 등등 그쪽 시나리오에 맞게 설명을 했다고 생각했다.. 그리고 혹시나 하며 다른 차이 점이 있는지 찾아보았다.

SOAP VS REST 차이점!

SOAP (Simple Object Access Protocol)와 REST (Representational State Transfer)는 모두 다른 프로토콜이며 웹에서 정보와 데이터를 주고받는 방법이지만, 그 방식이 조금 다르다.

1. 교환 방식

  • SOAP은 더 엄격하고 공식적인 접근 방식을 사용하는 프로토콜입니다. 데이터를 패키징 하기 위해 XML 구조를 필요로 하며 요청 및 응답을 보내는 데 특정한 메시지 형식을 사용한다.
  • REST는 더 유연하고 가벼운 접근 방식을 사용합니다. 다양한 데이터 형식 (예: JSON 또는 XML)과 HTTP 메서드(GET, POST, PUT, DELETE 등)를 사용하여 리소스와 상호작용을 한다.

2. 복잡성

  • SOAP은 공식적인 구조와 광범위한 명세로 인해 구현하고 사용하는 데 더 복잡할 수 있습니다. 데이터 교환을 처리하기 위해 더 많은 대역폭과 처리 능력이 필요하며 추가 구성 및 유지 관리가 필요하다.
  • REST는 일반적으로 표준 HTTP 메서드와 형식에 의존하여 더 간단하고 직관적으로 사용됩니다. 오버헤드나 특수 도구가 필요하지 않기 때문에 구현 및 유지 관리가 더 쉽다.

3. 보안성

  • SOAP은 WS-Security 표준을 통해 내장형 보안 모델을 제공하며, 암호화, 인증 및 권한 부여 기능을 포함합니다. 높은 수준의 보안 및 데이터 무결성이 필요한 응용 프로그램에 적합한 선택입니다.
  • REST는 SSL/TLS 암호화 및 HTTP 인증과 같은 기본 보안 기능에 의존합니다. 추가적인 보안 조치가 필요할 수 있습니다.

4. 리소스 처리

  • SOAP은 개별 메시지와 함께 작동하도록 설계되어 있으며, 각 요청과 응답에는 특정 데이터 집합이 포함된다. 여러 단계 또는 거래를 수행하는 복잡한 작업에 사용된다.
  • REST는 URL로 식별되는 리소스와 함께 작동하도록 설계되어 있으며, 표준 HTTP 메서드를 사용하여 액세스 하고 단순하게 조작할 수 있습니다.

결론적으로는 SOAP는 데이터 보안이나 무결성이 중요한 경우에 사용하기 좋고 복잡한 작업을 처리하는 데 사용될 수 있지만, 반면 REST는 더 단순하고 빠르게 구현할 수 있고 단순한 작업을 처리하는 데 사용될 수 있다.

간단히 말해서 SOAP는 엄격하고 복잡한 방법, REST는 자유롭고 간단한 방법으로 웹을 통해 데이터를 주고받는 방법이다.

 

간단한 코드로 예를 들자면 밑에와 같다.

SOAP로 통한 방식

import requests
from lxml import etree

# 요청할 XML 문서
soap_request = """<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <soap:Body>
        <GetCityWeatherByZIP xmlns="http://ws.cdyne.com/WeatherWS/">
            <ZIP>90210</ZIP>
        </GetCityWeatherByZIP>
    </soap:Body>
</soap:Envelope>
"""

# 요청 헤더 설정
headers = {
    "Content-Type": "application/soap+xml; charset=utf-8"
}

# 요청 보내기
response = requests.post(
    "http://wsf.cdyne.com/WeatherWS/Weather.asmx",
    headers=headers,
    data=soap_request
)

# 응답 XML 파싱
xml = etree.fromstring(response.content)

# 원하는 데이터 추출
temp = xml.xpath("//Temperature")[0].text
print("현재 온도: " + temp + "도")

REST로 쓰인 방식... 역시 REST가 간단하다.

import requests

# API 엔드포인트 URL
url = "https://api.github.com/repos/octocat/hello-world"

# 요청 보내기
response = requests.get(url)

# 응답 JSON 파싱
json_data = response.json()

# 원하는 데이터 추출
name = json_data["name"]
description = json_data["description"]
print("프로젝트 이름: " + name)
print("프로젝트 설명: " + description)

인터뷰때 좀 더 쉽게 설명했더라면 좋았겠지만.. 버스는 벌써 떠나버린 거겠지?

다른 인터뷰 하는 곳에서도 비슷한 질문을 해주면 좋을려만..

반응형