Computer Science/CS 지식
[CS 지식] HTTP & Websocket & STOMP
웅지니어링
2025. 3. 5. 11:03
* HTTP
HTTP는 웹 브라우저와 웹 서버 간의 데이터 송수신을 담당하는 프로토콜이다.
주로 HTML, JSON, 이미지, 동영상 등 웹 컨텐츠를 전송하는 역할을 한다.
기본적으로 TCP/IP 네트워크 위에서 동작하는 프로토콜이다.
HTTP는 클라이언트에서 서버로 요청(Request)을 하고 서버가 응답(Response)을 주는 단방향 구조를 가지고 있다.
* Websocket
Websocket은 브라우저와 서버 간의 양방향 통신을 제공하는 프로토콜이다.
HTTP와는 다르게 한 번 연결을 맺으면, 지속적으로 데이터를 주고 받을 수 있다.
그리고 클라이언트 -> 서버로의 요청이 아니라 클라이언트의 요청 없이도 서버 -> 클라이언트로 정보를 실시간으로 보내줄 수 있다.
HTTP 통신이 아니기 때문에 http:// 대신 ws://의 rul을 가진 웹 소켓 프로토콜을 사용한다.
STOMP 메시지 프레임워크를 사용할 때는 명시적으로 ws:// 프로토콜을 사용하지 않지만, 내부적으로 ws:// 프로토콜을 사용한다.
* HTTP vs Websocket
- HTTP
- HTTP는 비연결형 프로토콜로, 클라이언트가 매번 서버에 요청을 보내 새롭게 TCP 연결을 시도하며, 요청 처리 후 연결을 끊는다.
- 매번 요청을 통해 연결을 맺고 끊어야 하고, 그 때마다 http 메시지를 보내야 하므로 지속적 통신에 있어서 성능 저하가 발생한다.
- Websocket
- Websocket은 연결형 프로토콜로, 최초로 연결이 성공적으로 이루어지면, websocket 프로토콜로 업그레이드하여 TCP 연결을 유지한다.
- 한번만 연결을 맺고 나면, 그 뒤엔 별도의 http 메시지 없이 통신이 가능해서 빠른 성능을 보장한다.
- 최초 한번의 연결 시 HTTP header를 통해 token과 같은 인증 정보를 보낼 수 있고, 이를 통해 인증 처리를 할 수 있다.
* Polling vs Websocket vs SSE
- Polling
- 클라이언트가 서버에 주기적으로 요청을 보내 업데이트를 확인하는 방식
- HTTP 요청만 처리하면 되므로 추가 설정이 필요 없어 간결하다.
- 다만, 지속적인 서버 request로 서버에 과부하가 발생할 가능성이 존재한다.
- Websocket
- 클라이언트와 서버 간 지속적인 연결을 유지
- 무거운 HTTP 메시지를 보낼 필요 없이 직접 메시지를 주고 받음으로써 서버 부하 측면에서 우수하다.
- SSE
- HTTP 기반의 클라이언트와 서버 간의 실시간 단방향 통신을 가능하게 하는 웹 기술
- SSE 프로토콜을 사용한 통신방향은 서버 -> 프론트엔드로의 단방향 통신이다.
- 프론트에서 서버로의 데이터 전송은 일반적인 HTTP 통신
- 서버는 클라이언트에게 지속적으로 데이터를 전송할 수 있으며, 주로 실시간 업데이트가 필요한 애플리케이션에서 사용한다.(특히 사용자에게 알림을 주기 위한 목적으로 자주 활용)
* STOMP
- STOMP는 websocket 위에서 동작하는 메시징 프로토콜이다.
- STOMP는 websocket과 다르게 목적지 기반의 메시지 라우팅을 지원한다.
- 클라이언트와 서버가 특정 topic 또는 경로를 기준으로 메시지를 교환하는 구조이다.
- 클라이언트에서 지정된 특정 id에 메시지를 발행하면, broker에 의해서 해당 id의 채널에 메시지가 전달된다.
- 또한 동시에 id를 구독하고 있는 클라이언트에게 실시간으로 메시지가 전달된다.