카카오테크 부트캠프

[기술 검토 및 선정] 양방향 통신과 Message Broker

kanado 2025. 4. 21. 01:29

실시간 양방향 통신을 구현하기 위한 대표적인 방식으로는 Spring WebSocket(STOMP + SockJS)와 Socket.IO가 있습니다. 두 방식 모두 실시간 메시지 전송, 자동 재연결, 네임스페이스/룸 기반 통신, N:M 브로드캐스트 등의 기능을 제공합니다.

다만 구현 방식에 차이가 있습니다.

Spring WebSocket(STOMP + SockJS)와 Socket.IO의 기능적 차이

  Spring WebSocket (STOMP + SockJS) Socket.IO
기본 프로토콜 WebSocket, STOMP WebSocket 기반 + 자체 프로토콜
Fallback 지원 ✅ SockJS 사용 시 가능 (Long Polling 등) ✅ 기본 내장 (자동 Fallback)
자동 재연결 ❌ 기본 제공 X (직접 구현 필요) ✅ 기본 내장
메시지 수신 확인 (Acknowledgement) ❌ 직접 구현 필요 ✅ 기본 내장
Broadcast 기능 ❌ 직접 구현 필요 (채널 구분, 토픽 구독 필요) ✅ 기본 내장 (room/namespace 기능 제공)
Room/Namespace 구조 ❌ 직접 topic 관리 ✅ 기본 지원
설정 난이도 복잡 (STOMP, SockJS 설정 필요) 단순 (기본 설정만으로도 사용 가능)
Spring Boot와의 통합 ✅ Spring 기반 프로젝트에 자연스럽게 통합 ❌ 별도 서버 또는 라이브러리 사용 필요
브라우저 호환성 ✅ SockJS 통해 다양한 브라우저 호환성 확보 ✅ 기본 제공
기능 커스터마이징 ✅ 유연한 커스터마이징 가능 (보안, 인증 등) ⚠️ 기본 제공 기능 위주, 커스터마이징 한계 있음

 

Spring WebSocket (STOMP + SockJS) 특징

  • Spring Boot와 자연스럽게 통합 가능
  • 별도 서버 없이 자체 WebSocket 서버 구성 가능 → 인프라 비용 부담 적음
  • 단점:
    • 브라우저 Fallback, 메시지 수신 확인(Acknowledgement), 브로드캐스트 기능은 직접 구현 필요
    • 특히 Acknowledgement는 기본 제공되지 않아 별도 로직 개발 필요

Socket.IO 특징

  • JavaScript 기반의 실시간 통신 라이브러리
  • Java를 포함해 다양한 언어에서 사용 가능
  • 메시지 수신 확인(Acknowledgement), 자동 재연결, Fallback, 브로드캐스트 기능 기본 내장
  • 빠른 개발 및 유지보수가 용이
  • 복잡한 설정 없이 즉시 실시간 기능 구현 가능

 

선택 기준

  • 빠른 개발 속도
  • 유지보수의 간편함
  • 다양한 플랫폼(웹, 앱) 확장성 고려

✅ 최종 선택

  • 최종 선택: Socket.IO
  • 메시지 수신 확인, 자동 재연결, 브라우저 Fallback, 브로드캐스트 기능 모두 기본 지원
  • 별도 설정 없이 즉시 실시간 통신 기능 구현 가능
  • 빠른 개발 및 다양한 플랫폼 확장에 유리

끝입니다.