코딩마을방범대
[FCM] FCM이란? 본문
728x90
FCM
무료로 메시지를 전송할 수 있는 교차 플랫폼 메시징 솔루션
Why Use
- 플랫폼에 종속되지 않고 푸쉬 메시지를 전송할 수 있음
- IOS, Android, Web 각 플랫폼에서 푸쉬 메시지를 보내려면 각 플랫폼 환경별로 개발해야하는 불편함이 있는데 이를 하나로 통합하는 솔루션
클라우드 메시징 서비스를 사용할 경우의 이점
서버를 경유해서 실시간으로 푸쉬 메시지를 받으려면 사용자는 항상 서버에 접속해있어야하는데 이는 사용자 기기의 배터리 및 네트워크 리소스를 크게 낭비한다.
클라우드 메시징 서버를 중간에 둠으로써, 사용자는 낮은 배터리와 네트워크의 사용만으로도 메세지를 실시간으로 송수신 처리를 할 수 있다.
위와 같은 이유로 대부분의 어플리케이션 서비스들은 클라우드 메시징 서버를 경유해서, 실시간으로 유저들에게 메시지를 전송해주고 있다.
FCM의 주요 특징
메세지 타입
- FCM의 메세지 타입은 알림 메시지와 데이터 메시지로 구분할 수 있다.
- 보통 알림 메세지와 데이터 메시지를 같이 혼용해서 사용한다.
ex) 휴대폰 푸시 알림 메세지는 알림 메세지를 이용하고, 알림 메세지를 클릭 하였을 때 앱 내 특정 페이지로 이동이나, 어떠한 액션은 데이터 메세지를 통해서 이뤄진다.
메시지 종류 | 알림 가능 여부 | 알림 저장 개수 | 알림 처리 방법 |
알림 메시지 | 가능 | 여러 알림을 저장하나, OS 환경마다 다르다. | 앱이 백그라운드 일 때 |
데이터 메시지 | 가능 | 1개의 알림만 저장 | 앱이 포그라운드 일 때 |
타켓팅
- 단일 기기, 기기 그룹, 주제를 구독한 기기 3가지 방식으로 클라이언트 앱에 메시지를 배포할 수 있다.
종류 | 대상수 | 설명 |
단일 기기 | 1개 | 하나의 기기(앱 기준) |
기기 그룹 | 20개 | 알림 키에 허용되는 그룹 |
주제 구독 | 1000개 | 등록 토큰에 구독된 기기 |
클라이언트 앱에서 메시지 전송
FCM을 이용하면 앱 서버에서 클라이언트 앱으로 다운 스트림 메세지를 보낼 수 있을 뿐만 아니라, 클라이언트 앱에서 앱 서버로도 업 스트림 메세지를 보낼 수 있다.
FCM의 동작 원리
선행 작업
- 클라이언트는 자신의 정보(토픽, 디바이스 정보)를 FCM Backend 서버에 등록해야 한다
- 메시지를 전송할 주체(앱 서버)는 등록된 정보를 획득해야 하며, 해당 정보로 다운 스트림 메시지를 전송한다
정식 메시지 전송 작업
구분 | 역할 |
송신자 | 주로 앱 서버, HTTP 프로토콜을 사용하는 서버, Firebase Console GUI 등 |
수신자 | iOS 또는 Android 운영체제를 사용하는 모바일 기기 |
FCM Backend Server | 실질적으로 앱 서버에서 요청을 받아서 메세지를 처리 [ 클라이언트는 자신의 정보(토픽, 디바이스 정보)를 등록해야함 ] |
- 앱 서버에서 FCM Backend 서버에 클라이언트 앱에 보내고자 하는 메세지를 담은 정보와, 서버의 인증 정보 클라이언트의 토큰을 담아서 HTTP POST를 요청을 보낸다
- 요청을 받은 FCM Backend 서버는 요청을 통해 받은 메시지의 이상 유무에 따라 앱 서버에 적절한 응답을 보낸다(비동기 통신)
- 이후 FCM Backend 서버에서 여러가지(우선 순위, 클라이언트 앱과의 통신 가능 여부 등)을 고려하여 매세지를 클라이언트 앱에 보낸다
요약: 앱 서버에서 FCM Backend 서버에 메시지 요청을 보내고, FCM Backend 서버는 사용자 기기에서 실행되는 클라이언트 앱에 메시지를 보냄
FCM을 사용하기 위한 서버 환경 구성
1. FCM Backend 서버에 FCM에서 지정한 형식의 메시지 요청을 보낼 수 있어야 한다
2. 지수 백오프를 사용하여 요청을 처리하고 다시 보낼 수 있어야 한다
지수 백오프
요청이 실패할 때마다 다음 요청까지의 유효시간 간격을 n배씩 늘리면서 재요청을 지연시키는 알고리즘
( 임의 지연을 사용하여 연쇄 충돌을 방지하기 위해서 사용 )
3. 서버 승인 사용자의 인증 정보와 클라이언트의 등록 토큰을 안전하게 저장 할 수 있어야 한다
서버 승인 사용자의 인증 정보 : 메시지를 보낼 앱 서버가 인증된 서버라는 것을 증명하는 정보
클라이언트의 등록 토큰 : 메시지를 보내고자 하는 디바이스의 정보.
FCM Backend 서버와 상호 작용할 방법을 결정
- Firebase Admin SDK
- Node.js, Java, Python, C#, Go 등의 프로그래밍 언어 지원
- 기기에서 주제 구독 및 구독 취소가 가능하고, 다양한 타켓 플랫폼에 맞는 메세지 페이로드 구성
- 나머지 옵션과는 다르게, 초기화 작업만 잘 진행하면 인증 처리를 자동으로 수행
- FCM에서 가장 권장하는 옵션
- FCM HTTP v1 API
- 가장 최신 프로토콜로서 보다 안전한 승인과 유연한 교차 플랫폼 메시징 기능 제공
- 기존의 HTTP 프로토콜
- XMPP 서버 프로토콜
- 클라이언트 애플리케이션에서 업스트림 메시징을 사용해야할 경우 선택
인바운드 : 메시지가 클라이언트에서 서버로 올라가는 것
아웃바인드 : 클라이언트 쪽으로 내려오는 것.
( HTTP는 요청이냐 응답이냐에 관계없이 모두 다운스트림으로 흐름 )
업스트림 : 수신자의 기준에서 발송자는 업스트림 / 발송자의 기준에서 발송자는 업스트림
다운스트림 : 수신자의 기준에서 수신자는 다운스트림 / 발송자의 기준에서 수신자는 다운스트림
참고사이트
FCM (Firebase Cloud Messaging) 이란?
728x90
'💡 백엔드 > FCM ( Firebase )' 카테고리의 다른 글
[FCM] Java에서 Firebase 실시간 데이터베이스 활용하기 (0) | 2023.07.07 |
---|---|
[FCM] FCM 토큰의 관리 방법 (0) | 2023.07.07 |
[FCM] 푸시 메시지를 보내는 방법 2가지 (0) | 2023.07.06 |
[FCM] FCM 웹 푸시 메시지 보내기 (0) | 2023.07.04 |