Firebase Cloud Messaging (FCM)
FCM이란 웹 및 앱 응용프로그램에서 메세지를 안정적으로 보낼 수 있도록 지원하는 솔루션입니다.

FCM 아키텍쳐
FCM를 사용하기 위해서, 백엔드 입장에서는, 해당 사진의 1번인, 메세지를 만들고 해당 메세지를 FCM BE에 보내주는 작업을 수행할 수 있어야 합니다.
요구 사항
- 클라이언트에서 생성한 Firebase SDK를 이용해 생성한 FCM 토큰을 전달 받아 서버에 저장한다.
- 해당 토큰과 더불어 비지니스 서버에서 사용하고 있는 사용자 고유 ID 또한 포함하여 저장한다.
- 메세지 전달 이벤트가 발생 시 전달 받은 사용자 고유 ID를 이용해 Token을 Resolve한다.
- 메세지를 만들고 해당 토큰과 함께 FCM BE에 보낸다.
서버 생성
처음에 마주친 문제로는, 푸시 기능을 비지니스 서버에 적용하여 처리할지, 주기적으로 일괄 처리 작업을 수행하도록 외부 서버로 분리할지 선택해야 했습니다. 최종적으로 후자의 방식을 택했는데 이유는 이렇습니다.
- 역할 및 책임의 분리
- 비지니스 서버는 현재 사용자 인터페이스의 맞는 로직을 담당하고 있습니다. 푸시 기능은 메세지 전송 관련 로직을 처리해야 하기에 사용자 인터페이스를 담당하는 서버와 책임을 분리해야 한다고 판단했습니다.
- 푸시 기능을 분리함으로서 빠르게 변하는 상황에 대한 대응이 더욱 용이해질 것이라 판단했습니다.
- 유지보수성
- 비지니스 서버는 현재도 복잡한 로직을 처리하고 있습니다. 이 상황에서 토큰과, 메세지 전송에 대한 책임을 지기에는 효율적이지 않다고 판단했습니다.
- 코드베이스가 간결해지며, 유지보수가 용이하다고 판단했습니다.
푸시 서버는 Express.js로 구축하였고, 비동기적으로 처리하기 위해 Message Queue 패턴을 선택했습니다.