FCM — Firebase Cloud Messaging의 개념과 개발 원리

저자: IT Sectr 게시일: 2026-03-19 읽는 시간: 8 분

FCM(Firebase Cloud Messaging)은 푸시 알림 전송과 서버와 모바일 애플리케이션 간의 데이터 전송을 위한 Google의 크로스 플랫폼 서비스입니다. 단일 API를 통해 Android, iOS 및 웹 플랫폼을 지원합니다. Firebase 문서에 따르면, FCM은 전 세계적으로 매일 10억 개 이상의 메시지를 처리합니다.

핵심 사항

  • FCM은 푸시 알림 및 데이터 전송을 위한 Google의 크로스 플랫폼 서비스
  • 아키텍처 — 클라이언트가 등록 토큰을 받고, 서버가 Firebase Connection Server를 통해 메시지 전송
  • 메시지 유형 — notification(자동 표시) 및 data(앱 내 완전 처리)
  • 전송 — FCM은 지속적인 연결 또는 우선순위 대기열을 사용하여 전송 보장
  • 통합 — Firebase SDK를 통한 설정, google-services.json 구성 및 서버 설정

FCM이란?

Firebase Cloud Messaging(FCM)은 모바일 기기에 푸시 알림 및 데이터 메시지를 안정적으로 전송하는 Google의 클라우드 서비스입니다. 이전에 Google Cloud Messaging(GCM)으로 알려졌던 FCM은 Firebase 생태계에서 크로스 플랫폼 알림의 주요 도구가 되었습니다.

FCM은 플랫폼에 따라 최적의 전송 채널을 자동으로 선택합니다. Android에서는 자체 FCM 연결을 사용하고, iOS에서는 APNS(FCM 게이트웨이를 통해)를 사용합니다. 개발자가 두 가지 다른 통합을 구현할 필요가 없습니다 — FCM이 라우팅을 처리합니다.

이 서비스는 메시지 전송을 위한 통합 REST API 및 Admin SDK를 제공합니다. 이를 통해 특정 수신자 플랫폼에 얽매이지 않고 서버 측에서 알림을 보낼 수 있습니다.

FCM의 주요 기능

FCM은 여러 전송 모드를 지원합니다: 특정 기기에 단일 메시지, 주제별 그룹 전송, 조건별 세그먼트 전송. 예약 전송 및 알림 콘텐츠의 A/B 테스트도 가능합니다.

Firebase Cloud Messaging 작동 방식

FCM 아키텍처는 클라이언트 애플리케이션, Firebase Connection Server, 앱 서버의 세 가지 구성 요소를 기반으로 합니다. 클라이언트는 시작 시 FCM에 등록하고 고유한 등록 토큰을 받습니다 — 이는 특정 애플리케이션의 기기를 식별하는 문자열입니다.

앱 서버는 수신자 토큰 또는 주제를 지정하여 FCM REST API에 요청을 보냅니다. Firebase Connection Server는 지속적인 XMPP 연결 또는 HTTP 요청을 사용하여 메시지를 전송합니다. 기기가 오프라인 상태인 경우 메시지는 대기열에 추가되었다가 연결이 복원될 때 전송됩니다.

FCM은 우선순위 대기열 및 확인 메커니즘을 사용하여 전송을 보장합니다. Android에서는 메시지가 대기열에 최대 28일 동안 저장되고, iOS에서는 최대 4주(APNS를 통해) 동안 저장됩니다. 만료일 이후에는 메시지가 알림 없이 삭제됩니다.

FCM 토큰 수명 주기

등록 토큰은 여러 경우에 변경될 수 있습니다: 앱 데이터 복원 시, 새 버전으로 업데이트 시, 캐시 지우기 시. 앱은 토큰 업데이트를 처리하고 서버와 동기화하기 위해 FirebaseMessagingService.onNewToken을 구현해야 합니다.

FCM 메시지 유형

FCM은 notification과 data의 두 가지 페이로드 유형을 지원합니다. 각 유형은 수신자 기기에서 메시지가 처리되는 방식과 시기를 결정합니다.

매개변수NotificationData
자동 표시예(앱이 백그라운드인 경우)아니요(앱 내에서만)
처리시스템/NOS — 백그라운드; 앱 — 포그라운드항상 앱 내(onMessageReceived)
최대 크기4 KB4 KB
사용자 정의 키미리 정의된 필드로 제한모든 키-값 쌍
CollapseKey 필요선택 사항그룹화를 위한 선택 사항

실제로는 앱이 onMessageReceived에서 완전한 알림 처리가 필요한 경우 data 메시지를 사용하는 것이 좋습니다. Notification 메시지는 시스템 표시로 충분한 간단한 시나리오에 적합합니다.

FCM과 APNS 비교

FCM과 APNS는 두 가지 주요 푸시 전송 서비스입니다. FCM은 크로스 플랫폼 게이트웨이로 작동하는 반면, APNS는 Apple 생태계 전용입니다. 주요 차이점은 아키텍처, 인증서 요구 사항 및 라우팅 메커니즘에 있습니다.

  • 크로스 플랫폼 — FCM은 Android, iOS, Web 지원; APNS는 iOS, macOS, watchOS, tvOS만 지원
  • 인증 — FCM은 Server Key 또는 OAuth 2.0 사용; APNS는 인증서 또는 Token-based(p8 키) 사용
  • 메시지 우선순위 — FCM은 normal/high; APNS는 immediate/power-efficient consideration
  • 주제 — FCM은 기본적으로 주제 구독 지원; APNS는 서버 로직 필요

FCM과 직접 APNS 중 선택은 프로젝트 아키텍처에 따라 다릅니다. 크로스 플랫폼 애플리케이션의 경우 FCM이 최적의 선택입니다. iOS 전용 프로젝트의 경우 HTTP/2 API를 통한 직접 APNS 작업이 허용됩니다.

직접 APNS 대신 FCM을 선택해야 하는 경우

FCM은 프로젝트가 Android와 iOS를 동시에 사용하는 경우, 그리고 Firebase 분석, 알림 A/B 테스트 또는 서버 로직 없이 주제가 필요한 경우 적합합니다. 직접 APNS는 최소한의 종속성과 엄격한 전송 지연 시간 요구 사항이 있는 iOS 전용 애플리케이션에 선호됩니다.

Android에 FCM 통합

Android 애플리케이션에 FCM을 연결하려면 Firebase SDK를 추가하고 프로젝트 루트에 google-services.json을 구성해야 합니다. 토큰 등록 후 애플리케이션은 FirebaseMessagingService를 통해 메시지를 받을 준비가 됩니다.

kotlin
// build.gradle (Module)
dependencies {
    implementation("com.google.firebase:firebase-messaging:24.1.0")
}

// AndroidManifest.xml
<service android:name=".MyFirebaseMessagingService"
    android:exported="false">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT"/>
    </intent-filter>
</service>

class MyFirebaseMessagingService :
    FirebaseMessagingService() {

    override fun onNewToken(token: String) {
        sendTokenToServer(token)
    }

    override fun onMessageReceived(message: RemoteMessage) {
        message.notification?.let {
            showNotification(it.title, it.body)
        }
    }
}

설정 후 애플리케이션은 첫 실행 시 자동으로 FCM 토큰을 받습니다. 이 기기에 대한 후속 알림 전송을 위해 토큰을 앱 서버로 보내야 합니다.

FCM 알림을 위한 채널 설정

Android 8+에서는 자동 표시가 있는 FCM 알림을 보내기 전에 NotificationChannel을 만들어야 합니다. FCM notification 메시지는 기본 채널 ID를 사용하지만, 첫 번째 메시지를 받을 때 FirebaseMessagingService를 통해 사용자 정의 채널을 만드는 것이 좋습니다. Data 메시지는 채널이 필요하지 않습니다 — 앱이 자체적으로 알림을 표시할 방법과 시기를 결정합니다.

iOS에 FCM 통합

iOS에서 FCM은 앱 서버와 APNS 사이의 중개자 역할을 합니다. Firebase는 서버에서 메시지를 받아 APNS 형식으로 래핑하고 Apple 게이트웨이를 통해 전송합니다. 개발자는 Firebase 콘솔에서 APNS 키 또는 인증서를 구성해야 합니다.

swift
import FirebaseMessaging
import UserNotifications

class AppDelegate: UIResponder, UIApplicationDelegate {

    func application(
        _ application: UIApplication,
        didFinishLaunchingWithOptions options: [UIApplication.LaunchOptionsKey: Any]?
    ) -> Bool {
        FirebaseApp.configure()
        UNUserNotificationCenter.current().delegate = self

        Messaging.messaging().delegate = self
        return true
    }
}

extension AppDelegate: MessagingDelegate {
    func messaging(
        _ messaging: Messaging,
        didReceiveRegistrationToken fcmToken: String?
    ) {
        UserDefaults.standard.set(fcmToken, forKey: "fcm_token")
    }
}

iOS에서 APNS 등록은 비동기적으로 이루어집니다. FCM SDK는 자동으로 APNS 토큰을 가져와 Firebase 서버로 전달합니다. didReceiveRegistrationToken은 APNS 토큰과 프로젝트 식별자를 결합한 새 FCM 토큰을 받을 때 실행됩니다.

전송 상태 확인

FCM은 전송 모니터링을 위한 Firebase 콘솔을 제공합니다: 전송, 수신 및 표시된 알림 수. 서버 측 전송 오류를 추적하기 위해 Firebase Cloud Functions를 통한 상태 콜백도 사용할 수 있습니다. 주요 지표: 알림 노출 수 및 열기 수.

FCM 모범 사례

FCM으로 작업할 때 각 시나리오에 맞는 올바른 메시지 유형을 선택하는 것이 중요합니다. 자동 표시가 있는 간단한 알림에는 notification 메시지를 사용하세요. 앱이 표시 전에 데이터를 처리해야 하는 경우 data 메시지를 사용하세요. 혼합 유형(notification + data)은 알림 콘텐츠를 변경하기 위한 것이 아니라 분석을 위해 데이터가 필요한 경우에만 권장됩니다.

토큰을 중앙에서 관리하세요. 현재 토큰을 사용자 및 플랫폼에 연결된 테이블로 서버에 저장하세요. 오래된 토큰 정리 메커니즘을 구현하세요: NotRegistered 또는 InvalidRegistration 오류가 발생하면 데이터베이스에서 토큰을 삭제합니다. 토큰은 거의 변경되지 않지만 정리는 FCM 지원의 필수 요소입니다.

메시지 그룹화를 위해 축소 키(collapseKey)를 사용하세요. 동일한 유형의 여러 알림을 보내는 경우(예: "환율 업데이트"), 동일한 collapseKey를 설정하세요. FCM은 그룹의 마지막 메시지만 전송하여 기기 부하를 줄이고 사용자에게 알림이 과도하게 가지 않도록 합니다.

Firebase Console 및 Cloud Functions를 통해 전송을 모니터링하세요. FCM 분석은 전송, 수신 및 표시된 알림 수를 보여줍니다. 표시율이 70% 미만인 경우 Android의 채널 설정과 iOS의 권한 설정을 확인하세요. 낮은 전송률은 종종 비활성화된 채널이나 알림 금지와 관련이 있습니다. 다섯째: Firebase A/B 테스트를 사용하여 알림 텍스트와 전송 시간을 최적화하세요 — Firebase 데이터에 따르면 이를 통해 열기 전환율이 15~25% 향상됩니다.

자주 묻는 질문

FCM과 GCM의 차이점은 무엇인가요?

FCM은 GCM(Google Cloud Messaging)의 진화된 업데이트입니다. FCM은 Firebase Console을 통한 간소화된 설정, 내장 분석, 주제 및 Web Push 지원을 제공합니다. GCM은 2019년 4월에 공식적으로 중단되었으며, 모든 프로젝트는 FCM으로 마이그레이션해야 합니다.

FCM을 통해 무료로 보낼 수 있는 메시지 수는?

Firebase Cloud Messaging은 무료 서비스로 메시지 수에 제한이 없습니다. Cloud Functions 또는 Firestore와 같은 다른 Firebase 서비스 사용에 대해서만 요금이 부과됩니다. 기본 알림 전송에 FCM은 Spark 또는 Blaze 구독이 필요하지 않습니다.

FCM 토큰이 변경되는 이유는 무엇인가요?

FCM 토큰은 다음과 같은 경우에 변경됩니다: 백업에서 앱 복원, 앱 데이터 지우기, 재설치, Sender ID가 변경된 새 버전으로 업데이트. 새 토큰을 서버로 보내려면 FirebaseMessagingService에서 항상 onNewToken을 처리하세요.

FCM은 중국에서 작동하나요?

Google FCM은 중국에서 차단되었습니다. 중국에서 알림 전송을 위해 Huawei Push Kit, MiPush(Xiaomi), Oppo Push, Vivo Push와 같은 대체 서비스가 사용됩니다. 크로스 플랫폼 전송을 위해 Getui와 같은 다중 제공업체 서비스가 사용됩니다.

FCM이 올바르게 구성되었는지 확인하는 방법은?

내장된 Firebase 콘솔을 사용하세요: "Cloud Messaging" — "Send Test Message"를 선택합니다. 테스트 토큰을 입력하고 notification 메시지를 보냅니다. 기기에 알림이 표시되어야 합니다. FirebaseMessagingService.onMessageReceived 로그도 모니터링할 수 있습니다.

요약

  • FCM은 푸시 알림 및 데이터 전송을 위한 Google의 크로스 플랫폼 클라우드 서비스
  • 토큰은 대상 메시지 전송에 사용되는 고유 기기 식별자
  • Notification은 백그라운드 모드에서 시스템이 자동 표시하는 메시지 유형
  • Data는 앱 내에서만 처리되는 완전한 페이로드를 가진 메시지 유형
  • 주제는 서버에 토큰을 저장하지 않고 주제 구독을 기반으로 하는 그룹 전송 메커니즘
  • APNS 게이트웨이 — iOS에서 FCM은 중개자 역할을 하여 APNS를 통해 메시지 전달
  • 무료 — FCM은 보낸 메시지 수에 대해 요금을 부과하지 않음

턴키 방식의 모바일 애플리케이션을 개발해 드립니다

IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.

프로젝트 논의

더 읽어보기