채팅방 생성, 구독, 메세지 송수신 등
웹소켓을 사용한 이유?
채팅 시스템을 구현하는 방법으로는 크게 폴링, SSE, 웹 소켓이 있는데 폴링 방식은 짧은 주기로 계속 API를 호출해야 하기에 서버에 부하가 큼. SSE 방식은 단방향 통신이기에 결국 메세지를 보낼 때는 POST API를 호출해야 하기에 Write 작업이 많아질 경우 역시 서버에 부하가 발생함. 따라서 양방향 통신이 가능한 웹소켓을 사용.
STOMP를 사용한 이유?
스프링 환경에서 웹 소켓을 직접 구현해야 할 경우 세션, 소켓 연결, 데이터 방식 등을 따로 구현해줘야 하기에 단순 채팅 시스템에서 사용하기엔 무겁다고 생각함.
STOMP는 메세지가 프레임으로 이루어져 있어 간단하고 명확하게 메세지를 전달할 수 있고 메세지 브로커를 지원해 메세지 전송의 안정성, 효율성 등을 높일 수 있음.
가장 큰 특징으로 여러 클라이언트에 호환되고 스프링에서도 관련 라이브러리나 모듈을 제공하기에 STOMP를 선택하게 됐음.