728x90

HTTP, WebSocket, SOAP은 모두 '데이터를 주고받는 방식'이지만, 연결 구조와 사용 목적이 전혀 다르다.


핵심 개념 설명

HTTP (HyperText Transfer Protocol)

공식 기반: IETF RFC 7230 ~ 7235 (HTTP/1.1), RFC 9110 (HTTP 시맨틱스)

 

HTTP는 클라이언트(브라우저, 앱)가 서버에 요청(Request)을 보내면, 서버가 응답(Response)을 돌려주는 구조다.
응답이 끝나면 연결도 끊어진다. (Stateless - 상태를 기억하지 않음)

웹의 기본 통신 방식이며, REST API가 대표적인 HTTP 기반 통신이다.


WebSocket (소켓 통신)

공식 기반: IETF RFC 6455 (The WebSocket Protocol)

 

WebSocket은 한 번 연결하면 서버와 클라이언트가 계속 연결된 상태를 유지하며 양방향으로 데이터를 주고받는다.
HTTP처럼 매번 요청하지 않아도 서버가 먼저 데이터를 클라이언트에 보낼 수 있다.

실시간 채팅, 주식 시세, 게임처럼 빠르고 지속적인 데이터 교환이 필요할 때 사용된다.


SOAP (Simple Object Access Protocol)

공식 기반: W3C SOAP 1.2 Specification (https://www.w3.org/TR/soap12/)

 

SOAP은 XML 형식으로 데이터를 포장해서 주고받는 통신 규약이다.
HTTP뿐 아니라 SMTP(이메일), TCP 등 다양한 전송 방식 위에서 동작할 수 있다.
엄격한 규격과 오류 처리 구조를 갖고 있어, 금융·공공기관·엔터프라이즈 시스템에서 주로 사용된다.


쉽게 이해하는 비유

방식 비유
HTTP 편의점에서 물건을 사고 나오는 것. 거래 끝나면 관계 종료.
WebSocket 전화 통화. 한 번 연결하면 서로 계속 말할 수 있음.
SOAP 공문서 양식. 내용을 정해진 서식(XML)에 맞춰 작성해야 처리됨.

curl 예시로 보는 실제 사용법

HTTP 요청 예시 (REST API)

# GET 요청: 데이터 가져오기
curl -X GET https://api.example.com/users/1

# POST 요청: 데이터 보내기
curl -X POST https://api.example.com/users \
  -H "Content-Type: application/json" \
  -d '{"name": "홍길동", "email": "hong@example.com"}'

-X: HTTP 메서드 지정 / -H: 헤더 설정 / -d: 보낼 데이터


SOAP 요청 예시 (XML 포장)

curl -X POST https://api.example.com/soap \
  -H "Content-Type: text/xml; charset=utf-8" \
  -H "SOAPAction: \"getUserInfo\"" \
  -d '<?xml version="1.0"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
  <soapenv:Body>
    <getUserInfo>
      <userId>1</userId>
    </getUserInfo>
  </soapenv:Body>
</soapenv:Envelope>'

SOAP은 반드시 XML 형식의 Envelope(봉투) 구조로 감싸야 한다.
SOAPAction 헤더로 어떤 동작을 요청하는지 명시한다.


WebSocket (curl로는 한계 있음 - wscat 사용)

WebSocket은 지속 연결 방식이라 curl로 완전한 테스트가 어렵다.
테스트 시에는 wscat(Node.js 기반 CLI 도구)을 사용한다.

# wscat 설치
npm install -g wscat

# WebSocket 서버에 연결
wscat -c ws://echo.websocket.org

# 연결 후 메시지 전송 가능
> Hello Server
< Hello Server  ← 서버가 즉시 응답

curl로도 --http1.1 --include --no-buffer 옵션으로 Upgrade 핸드셰이크까지는 확인 가능하나, 실제 양방향 통신 테스트는 wscat이 적합하다.


세 가지 통신 방식 비교 정리

항목 HTTP WebSocket SOAP
연결 방식 요청-응답 후 종료 지속 연결 (양방향) 요청-응답 후 종료
데이터 형식 JSON, XML, HTML 등 자유 텍스트, 바이너리 반드시 XML
실시간성 낮음 높음 낮음
표준 기반 RFC 9110 RFC 6455 W3C SOAP 1.2
주요 사용처 REST API, 웹 페이지 채팅, 알림, 게임 금융, 공공, 레거시 시스템
복잡도 낮음 중간 높음

핵심 정리

  • HTTP는 요청하면 응답하고 끝나는 단방향 단발성 통신이다.
  • WebSocket은 한 번 연결 후 끊기지 않고 서버-클라이언트가 자유롭게 데이터를 주고받는다.
  • SOAP은 XML 봉투 구조를 강제하는 엄격한 규격 기반 통신으로, 오류 처리와 보안이 강하다.
  • 현대 웹 API는 대부분 HTTP(REST) 기반이며, 실시간이 필요하면 WebSocket을 추가한다.
  • SOAP은 신규 서비스보다 금융·공공기관 등 기존 레거시 시스템과의 연동에서 주로 마주친다.

추가 정보: 언제 무엇을 선택해야 하나?

상황 권장 방식
일반 데이터 조회 / 전송 (로그인, 검색 등) HTTP (REST)
실시간 채팅, 알림, 주식 시세 WebSocket
공공 API 연동, 금융 시스템, 레거시 연계 SOAP

주의: WebSocket은 프록시 서버나 방화벽 환경에서 연결이 차단될 수 있다.
이런 경우 Server-Sent Events(SSE) 또는 Long Polling이 대안으로 사용된다.
(SSE는 W3C HTML Living Standard에 정의되어 있다.)

반응형