지금 KOIN 서비스에 분실물 기능 중 채팅 서비스에서 Krossbow를 사용하고 있다. Krossbow는 STOMP를 Android·iOS·Web 등 넓은 범위의 플랫폼을 지원하는 라이브러리이다.

STOMP는 “규칙 기반 시스템”이라 WebSocket보다 모델이 무겁기 때문에 채팅 요구사항보다 구조가 더 거대해진다.

<aside> ❓

보통 안드로이드에서 채팅을 구현하려면 Socket.io를 많이 쓰는데, STOMP가 대중적이지도 않고 구현 과정도 복잡함에도 불구하고 왜 사용했는지 채팅을 맡았던 우진콩에게 물어봤다.

</aside>

→ 백엔드가 Spring 환경이기 때문에 WebSocket + STOMP로 진행을 했다라는 답변을 받았다.

더 알아보자

Socket.IO는 WebSocket + fallback + reconnect + event system + rooms 같은 기능을 자체적으로 제공하는 독립 프로토콜/플랫폼이기 때문에, Spring의 메시징 스택(WebSocket/STOMP Framework)과는 호환되지 않는다. Spring이 직접 제공하는 기능으로는 안 되고, 외부 Socket.IO 서버(또는 라이브러리)를 붙이면 가능하다.

열심히 개발자 커뮤니티를 뒤적뒤적하니 이런 답변을 얻을 수 있었다.

아마 KOIN 서비스에도 추가적인 서버를 붙이기엔 일정 및 개발 공수가 맞지 않아 진행한 듯 하다.

최근에는 왜 STOMP를 지양하는 추세일까?

STOMP 프로토콜은 불필요한 규칙·프레임워크·브로커 구조를 끼워야 하고 자체의 오버헤드가 있어 많은 메시지를 처리하는데 있어 무겁다. 이러한 문제로 인해 속도 저하가 발생하기 때문에 최근에는 raw레벨의 WebSocket(or Socket.io)+ FCM 을 많이 쓴다.

모바일 네트워크 특징

이처럼 모바일 환경에서 STOMP는 부담 요소가 많다