어떻게 알림을 실시간으로 수신할 수 있을까? 가장 먼저 떠오른건 웹 소켓을 이용한 방식이었다. 그러다 문득, 이전에 읽었던 “대규모 시스템 설계 기초”에서 제 3자 알림 서비스를 이용한 설계가 떠올랐다. 그렇게 검색한 결과 FCM을 이용한 방식을 찾을 수 있었다.
FCM 이란?
구글에서 제공하는 클라우드 메시징 서비스로 모바일 또는 웹 푸시 알림을 보낼 수 있도록 도와주는 플랫폼이다. FCM을 사용하면 간단한 설정을 통해 웹 푸시 알림을 보낼 수 있다. FCM의 구조를 간략하게 표현하면 다음과 같다.
대략적은 서비스 흐름은,
웹 푸시알림을 보내는 데에는 성공했다. 그렇다면, 클라이언트는 어떻게 알림을 처리할 수 있을까? 여기에는 두 가지 상황을 고려해야한다.
먼저, 포어그라운드 상태일 때를 살펴보자. 사용자는 어차피 웹 페이지에 포커스 되어있는 상태이므로 굳이 푸시알림으로 표현할 필요는 없다. 이 경우 토스트 메시지로 구현하여 우측 하단에 알림 메시지가 나타나도록 구현하였다.
두 번째는 백그라운드 상태일 때이다. Service Worker를 사용하면 백그라운드에서도 알림을 수신하여 푸시알림을 보여줄 수 있다. Service Worker에 대한 정보는 이 링크를 참고하자.