TIL - WebSocket과 STOMP

su·2023년 9월 21일
0

TIL

목록 보기
72/93
post-thumbnail

채팅 기능 구현을 위해서 WebSocket을 사용하게 되었다.
앞서 WebSocket과 STOMP에 대한 내용을 간단하게 정리한 적이 있었는데,
너무 간단해서 추가로 다시 작성해보았다.

WebSocket

WebSocket의 등장

Http의 비연결 통신의 단점을 보완하고자 등장하였다고 한다.
→ 실시간 양방향 통신을 가능하게 한다.

Http에는 양방향이 없나?

Http에도 실시간 양방향 통신을 가능하게 하는 방식이 존재한다.

  • Polling, Long Polling, Streaming

하지만, Http는 비연결성 이라는 특징이 있으므로 매번 연결을 맺고 끊는 과정에서 비용이 발생한다.
→ 요청을 보내고 응답을 받는 Http의 방식은, 실시간성을 요할 경우 데이터 송수신에 부담이 간다.

WebSocket을 사용하는 이유

처음 hand shake 시에는 Http와 유사한 양의 정보를 주고받지만,
연결이 되고 나면 주고받는 정보가 간단해진다.

STOMP

STOMP의 등장

WebSocket은 텍스트 교환 외에는 어떤 형식이 정해져 있지 않다.
따라서 클라이언트와 데이터를 교환할 때 한계가 존재한다.
이런 WebSocket에 메세징 방식의 통신 규약을 추가한 것이 STOMP이다.

STOMP란

Simple Text Oriented Messaging Protocol - STOMP
메세지 브로커(발신자의 메세지를 받아와 수신자들에게 메세지를 전달)를 활용하여
쉽게 메세지를 주고받을 수 있는 프로토콜이다.
하지만 In-memory 방식으로 서버를 분산하는 경우, 클러스터링을 해야 하는 번거로움이 있다.

이번 프로젝트 에서 채팅 기능을 구현할 때, WebSocket과 STOMP로 구현했다.
AWS로 배포할 시, 프로젝트의 규모가 크지 않아 로드 밸런서 등으로 서버를 분산하지 않아서 채팅이 잘 구현되었는데,
프로젝트의 규모가 커져 서버를 분산해야 할 경우 한계가 있다는 것을 알게 되었다.
따라서, 채팅 기능을 Redis / RabbitMQ / Kafka 등의 기능을 적용하여 코드를 수정해보려고 한다.

profile
(❁´◡`❁)

0개의 댓글