본문 바로가기
Firebase/FCM

FCM 이란 (Firebase Cloud Messaging)

by Parkej 2022. 9. 8.

참고자료 및 시작동기

더보기

구글 공식문서 : https://firebase.google.com/docs/cloud-messaging?hl=ko 

타 블로그 : https://donghun.dev/Firebase-Cloud-Messaging

 

시작동기

이번 스프린트에서는 푸시 알림 기능을 개발해야했다. 그래서 여태까지 알아본것을 복습하고자 정리한 글이다. 

공식문서를 베이스로 타 블로그와 섞어서 작성했다.


FCM (Firebase 클라우드 메세징)

메시지를 안정적으로 무료 전송할 수 있는 크로스 플랫폼 메시징 솔루션

 

주요기능

  1. 알림 메시지 또는 데이터 메시지 전송 : 사용자에게 표시되는 알림 메시지를 전송합니다. 또는 데이터 메시지를 전송하고 애플리케이션 코드에서 임의로 처리합니다.
  2. 다양한 메시지 타겟팅 : 단일 기기, 기기 그룹, 주제를 구독한 기기 등 3가지 방식으로 클라이언트 앱에 메시지를 배포할 수 있습니다.
  3. 클라이언트 앱에서 메시지 전송  : FCM의 신뢰성 높고 배터리 효율적인 연결 채널을 통해 기기에서 다시 서버로 확인, 채팅, 기타 메시지를 보낼 수 있습니다.

 

기본 원리

  • FCM 구현에는 송수신을 위한 두 가지 주요 구성요소가 포함된다.
  1. Firebase용 Cloud Functions 또는 앱 서버(나의 자체 서버)와 같이 메시지를 작성, 타겟팅, 전송할 수 있는 신뢰할 수 있는 환경이 있어야함.
  2. 해당 플랫폼별 전송 서비스를 통해 메시지를 수신할 수 있는 클라이언트 앱이 필요함. (안드로이드, 애플, 웹 등)
  • 혹은 Firebase admin SDK나 FCM 서버 프로토콜(HTTP 요청 등.. Body에 담아 요청하는 형식)을 통해 메시지 전송이 가능
  • Firebase 콘솔의 FCM에서 알림 작성기(일명 메시지 전송 GUI라고 생각하면 될듯)를 사용하면 기본 제공되는 타겟팅 또는 분석 기능이나 커스텀으로 가져온 세그먼트를 사용해 마케팅 또는 참여 메시지를 테스트하고 전송도 가능하다.
여러가지 방법으로 메시지를 전송 요청도 할 수 있고, 자신에게 맞는 FCM 아키텍처도 선택해서 구현할 수 있다.

 

구현 경로


FCM 아키텍처 

파이어베이스 공식 문서의 아키텍처 요소는 다음과 같다.

 

1. 메시지 요청을 작성하거나 구현하는 도구 : 알림작성기(메시지 작성 툴 GUI), 모든 메시지 유형을 완벽하게 자동화하고 지원하려면 Firebase admin SDK 또는 FCM 서버 프로토콜을 지원하는 신뢰할 수 있는 서버 환경에서 구현해야한다. (Cloud Function 또는 앱 자체 서버 등)

2. FCM 백엔드 : 주제를 통해 메시지 팬아웃 수행 메시지 ID와 같은 메시지 메타데이터를 생성함.

3. 플랫폼 수준 전송 레이어 : 기기로 타겟팅된 메시지를 라우팅하고 메시지 전송처리, 필요한 경우 플랫폼별 구성을 적용함.

4. 사용자 기기의 FCM SDK : 알림이 표시되거나 앱의 포/백그라운드 상태 및 관련 애플리케이션 로직에 따라 메시지 처리

수명 주기 흐름

  • FCM에서 메시지를 수신하도록 기기를 등록합니다. 클라이언트 앱의 인스턴스가 메시지를 수신하도록 등록하여 앱 인스턴스를 고유하게 식별하는 등록 토큰을 받습니다.
  • 다운스트림 메시지 전송 및 수신
    • 메시지를 보냅니다. 앱 서버가 클라이언트 앱에 메시지를 보냅니다.
      1. 메시지는 알림 작성기 또는 신뢰할 수 있는 환경에서 작성되며 메시지 요청이 FCM 백엔드로 전송됩니다.
      2. FCM 백엔드는 메시지 요청을 수신하고 메시지 ID와 기타 메타데이터를 생성하여 플랫폼별 전송 레이어로 보냅니다.
      3. 기기가 온라인 상태이면 메시지가 플랫폼별 전송 레이어를 통해 기기로 전송됩니다.
      4. 기기에서 클라이언트 앱이 메시지 또는 알림을 수신합니다.

 

FCM 타겟팅 방식

 

FCM 동작 원리

  • 발신자 : 주로 앱 서버든가 HTTP 프로토콜을 사용하는 서버든가 FB console GUI(알림 작성기) 등이 될 수 있다.
  • 수신자 : Android, iOS, 웹 등
  • FCM Backend 서버는 자체 앱 서버의 요청을 받아 메세지를 처리하는 역할을 한다. 
  • HTTP 프로토콜을 사용하여 FCM 클라우드 메시지가 처리되는 과정은 아래와 같다.

  1. 앱 서버 (우리 서버)에서 클라이언트(안드로이드 앱)에 보내고자 하는 메세지를 담은 정보와, 서버의 인증 정보 추가로 클라이언트 토큰을 담아 FCM 서버에 HTTP POST 요청을 보낸다.
  2. Request를 받은 FCM 서버는 요청 받은 데이터를 검증한 후 앱 서버에 적절한 응답을 보내준다. 
  3. 이후 FCM에서 여러가지 옵션이나 조건을 고려해 클라이언트에 메세지를 보내준다.
  4. 클라이언트는 받은 메세지를 적절하게 처리하고 응답 메세지를 FCM 서버로 보내준다.
  5. 앱 서버에서 FCM 서버로 메세지 요청을 보내고 FCM은 사용자 기기엥서 실행되는 클라이언트 앱에 메시지를 보내게 된다.
즉, 메세지 처리를 잘 만들어 주면 실제 기기로 전달하는 것은 FCM에서 알아서 처리해준다는 것이다.

 

  • 위의 과정대로 메세지를 전송하려면 선행되어야 하는 작업이 있다. 메세지를 수신할 클라이언트를 FCM 서버에 등록해야한다는 것
    • 클라이언트는 자신의 정보 (토픽 또는 토큰, 디바이스 정보 등)를 FCM에 등록한다.
    • 메시지를 전송할 주체(앱 서버)는 등록정보를 가지고 있어야하며 해당 정보로 다운 스트림 메시지를 전송한다. 
반응형

댓글