가구 온라인 쇼핑몰 고도화를 하고 있는데 주문 완료 시 알림을 날리도록 구현하고 싶었다.
1. SSE(Server-Sent-Event)
서버의 데이터를 실시간으로, 지속적으로 Streaming 하는 기술로 서버와 한 번 연결 맺고 나면 일정 시간동안 서버에서 변경이 발생할 때마다 데이터를 전송 받는다.
동작 과정
[Client -> Server] SSE 연결 요청
[Server] 클라와 매핑되는 SSE 통신 객체 생성
[Server -> Client] 서버 데이터 변경시, 해당 SSE 객체를 통해 데이터 전달
특징
서버에서 클라로 단방향 통신만 원하는 기능에 적합하다.
payload 크기가 제한적이여서 많은 데이터를 담을 수 없다.
동시에 많은 사용자를 처리하려면 서버 리소스가 많이 필요하다.
2. WebSocket
서버와 클라 간에 socket connection을 유지해서 언제든 양방향 통신 또는 데이터 전송이 가능하도록 하는 기술로 실시간 채팅에 적합하다고 생각한다.
3. FCM(Firebase Cloud Messaging)
안정적으로 클라이언트 인스턴스에게 전송할 수 있는 교차 플랫폼 메시징 솔루션
동작 과정
[Client -> FCM] 클라이언트가 FCM 서버에서 유저별 고유 토큰을 요청
[FCM -> Client] 요청 토큰 전달
[Client -> Server] 서버는 클라이언트로부터 해당 토큰을 받아 저장
[Server -> FCM -> Client] 메시지에 토큰을 담아서 FCM 서버에 전송 시, 해당 토큰의 유저에게 메시지 전송
특징
교차 플랫폼 메시징 서비스로 플랫폼(Android, IOS, Web) 종속 없이 메시지 전송 구현 가능하다.
별도의 여러 설정 필요, 느려서 Soft Real-Time System에 적합하다.
FCM 서버에 의존한다.
모바일 앱 푸시 알림 필요한 경우에는 FCM이 적합하다고 생각하지만 현재 프로젝트는 web 기반 서비스에서만 필요하는 부분이기에 SSE 선택