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에 정의되어 있다.)
'네트워크 및 하드웨어 > 네트워크(Network)' 카테고리의 다른 글
| macOS에서 SSH Key 파일로 서버 접속하는 법 (0) | 2026.03.27 |
|---|---|
| 하이웨어(HIWARE)란? IT 보안 필수 솔루션 쉽게 이해하기 (0) | 2026.03.25 |
| Mac에서 Homebrew로 PuTTY 설치하기 (0) | 2026.03.20 |
| GET vs POST — 표준에 따른 차이점 (0) | 2025.09.12 |
| Ubuntu 서버 기본 셋팅 가이드 (0) | 2025.07.12 |
