실시간 채팅 기능을 구축하기 위해서 관련 키워드들을 검색해보던 중 Websoket, STOMP, kafka, RabbitMQ 등의 관련 지식을 알게 되었다.
WebSocket은 HTTP 환경에서 클라이언트와 서버 사이에 하나의 TCP 연결을 통해 실시간으로 전이중 통신을 가능하게 하는 프로토콜이다.
STOMP는 WebSocket과 함께 사용되는 메시징 프로토콜로, WebSocket은 메시지의 형식이나 내용을 정의하지 않아서 구현이 복잡한 경우가 생기는데, 이를 보완하여 클라이언트와 서버 간의 메시지 형식, 유형, 내용 등을 명확히 정의해주는 역할을 해준다.
WebSoket만으로도 실시간 채팅을 구현할 수 있지만, STOMP를 사용하는 경우 메시지 브로커를 사용할 수 있어, 메시지 전송 시 중계 역할을 하는 서버를 따로 두어 메시지 전송의 안정성과 확장성을 높일 수 있다는 장점이 있다.
메시지 브로커는 애플리케이션, 시스템 및 서비스가 서로 간에 통신하고 정보를 교환할 수 있도록 해주는 소프트 웨어로 STOMP의 경우에는 In memory Broker를 기본으로 사용한다. 그런데 이 경우, 세션을 수용할 수 있는 크기가 제한되어 있고, 장애 시 메세지의 유실 가능성이 높다는 단점이 있다. 따라서 외부 브로커를 사용하는 것이 확장성이나 회복에 대응하기 좋다.
Kafka는 대용량 실시간 채팅 시스템에서의 높은 확장성과 대용량 데이터 처리 능력을 갖고 있다. 빠른 속도와 안정성, 내결함성과 복제 기능은 시스템의 신뢰성을 높여주며, 다양한 언어로 작성된 프로듀서 및 컨슈머 라이브러리 지원으로 유연한 클라이언트 통합이 가능하다.
https://tecoble.techcourse.co.kr/post/2021-09-05-web-socket-practice/
https://escapefromcoding.tistory.com/705