파이어베이스 클라우드 메시징의 동작원리

GonnabeAlright·2021년 12월 29일
1
post-thumbnail
  1. 클라이언트 앱에서 Sender ID를 이용해 등록을 요청한다.
  1. FCM은 클라이언트 앱에서 전달받은 SenderID를 토대로 Registration Token을 클라이언트 앱에서 발급
  1. 클라이언트 앱은 FCM에서 전달받은 Registration Token을 앱서버에 전달하고 이를 전달받은 앱 서버는 Registration Token을 저장한다.
  1. 앱 서버는 Registration Token, API Key, 전송할 메시지를 이용하여 GCM에 메시지를 전송한다.
  1. FCM은 앱서버로부터 전달받은 메시지를 해당 클라이언트 앱에 메시지를 전송한다.

파이어베이스의 데이터베이스는 realtime DBNoSQL 클라우드에 데이터를 저장하는 JSON 트리 방식이다. 데이터는 실시간으로 모든 클라이언트에서 동기화되고 오프라인일 때도 작동되며 네트워크가 연결되면 바로 동기화할 수 있다. JSON을 사용하며 관계형 데이터베이스와는 기능과 방식이 다르다. 즉 SQL을 사용하여 쿼리문을 작성하지 않는다. SQL 데이터베이스와 달리 테이블이나 레코드가 없고 json 트리 구조의 노드를 사용하게 된다. NoSQL 데이터베이스를 설계할 때는 중첩을 배제하여 '평면적'으로 할 것이 권장된다. 왜냐하면 데이터를 검색하면 그 데이터에 중첩되어 있는 하위 노드까지 결과로 딸려오게 되며 권한 설정을 할 때 데이터의 하위에 있는 데이터까지 권한 설정이 되기때문에 분리가 어렵고 세밀한 데이터 관리를 할 수 없게 된다.

그리고 데이터를 평면적으로 설계하면 각 데이터가 갖게되는 정보의 수나 크기가 작아져서 서비스 속도를 더 빠르게 유지할 수 있다.

모든 Firebase 실시간 데이터베이스 데이터는 JSON 객체로 저장됩니다. 데이터베이스를 클라우드 호스팅 JSON 트리라고 생각하면 된다. SQL 데이터베이스와 달리 테이블이나 레코드가 없으며 JSON 트리에 추가된 데이터는 연결된 키를 갖는 기존 JSON 구조의 노드가 됩니다. 사용자 ID 또는 의미있는 이름과 같은 고유키를 직접 지정할 수도 있고, push()를 사용하여 자동으로 지정할 수도 있습니다.

GCM이란 ?

  • Google Cloud Messaging
  • 구글에서 제공하는 Server와 Client app간에 푸쉬 메시지를 보낼 수 있는 서비스
  • Android & iOS를 지원

FCM이란 ?

  • Firebase Cloud Messaging
  • GCM의 새 버전을 의미하는데 단지 firebase 진영에 속하는 것 뿐
  • GCM의 주요 구조를 그대로 갖고 있으며 Android & iOS & Mobile Web등의 다양한 플랫폼을 모두 커버한다.

FCM과 GCM 유래

모바일 개발자에게는 GCM이라는 용어가 익숙하다. 국내의 많은 모바일 앱의 Push가 GCM을 사용하고 있는 상황이며 Google에서는 Google Cloud를 이용한 Push 서비스 기반을 GCM으로 닦아온 상황이며, Mobile Web의 중요도가 높아짐에 따라 Mobile Application 뿐만 아니라 Mobile Web등 모든 플랫폼에서 사용 가능한 FCM 서비스를 내놓았다.

FCM과 GCM 차이

  • GCM의 Client단 구현시에 번거로웠던 등록 및 구독 로직을 FCM 라이브러리 안에 포함시켜 개발자가 별도로 개발하지 않아도 된다.
  • 또한, Firebase Analytics insight의 기능을 활용하여 특정 타겟층에 push 전송이 가능해졌다.
  • 앞으로 구글에서는 새로운 기능들을 모두 FCM 쪽에만 추가하고, GCM에는 추가하지 않을 것이라고 한다. 따라서 FCM SDK 사용을 강력히 권장하고 있다.
  • GCM은 결국 FCM의 일부이며 GCM으로 기 구현된 서비스들도 FCM으로 동일하게 구현이 가능하다.

FCM은 메시지를 빌드, 전송, 수신하는 다음 구성요소 집합을 사용

  1. 메시지 요청을 작성하거나 구현하는 도구, 알림 작성기는 알림 요청을 만들기 위한 GUI 기반 옵션을 제공, 모든 메시지 유형을 완벽하게 자동화하고 지원하려면 Firebase Admin SDK 또는 FDCM 서버 프로토콜을 지원하는 신뢰할 수 있는 서버환경에서 메시지 요청을 구현해야 한다. 이 환경은 Firebase용 Cloud Functions, App Engine 또는 자체 앱 서버일 수 있다.

  2. FCM 백엔드는 다른 여러 기능 중에서 메시지 요청을 수락하고, 주제를 통해 메시지를 확장하고, 메시지 ID와 같은 메시지 메타 데이터를 생성합니다.

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

  • Google Play 서비스를 사용하는 Android 기기용 Android 전송 레이어 (ATL)
  • Apple 기기용 Apple 푸시 알림 서비스 (APN)
  • 웹 앱용 웹 푸시 프로토콜
  1. 알림이 표시되거나 앱의 포그라운드/백그라운드 상태 및 관련 애플리케이션 로직에 따라 메시지가 처리되는 사용자 기기의 FCM SDK이다.

수명 주기 흐름

  • FCM에서 메시지를 수신하도록 기기를 등록, 클라이언트 앱의 인스턴스가 메시지를 수신하도록 앱 인스턴스를 고유하게 식별하는 등록 토큰을 받는다.

  • 다운 스트림 메시지 전송 및 수신
    (메시지 보내기 앱 서버가 클라이언트 앱에 메시지를 보냅니다.)

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

0개의 댓글