푸시 알림의 Registration Token: 개념, 가져오기 및 업데이트 방법

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

Registration Token은 Firebase Cloud Messaging(FCM)이 푸시 알림을 전송하는 데 사용하는 고유 기기 식별자입니다. 각 기기의 각 앱은 고유한 토큰을 받으며, 이 토큰 없이는 알림 전송이 불가능합니다. Firebase, 2025에 따르면, Registration Token은 앱이 처음 실행될 때 자동으로 생성되며 특정 조건에서 변경될 수 있습니다.

주요 내용

  • Registration Token은 특정 기기의 앱 인스턴스를 FCM에 식별시키는 문자열입니다.
  • 토큰은 첫 실행 시 또는 앱 데이터 삭제 후 자동으로 생성됩니다.
  • FCM은 토큰을 사용하여 푸시 알림을 올바른 기기로 라우팅합니다.
  • 토큰은 변경될 수 있습니다 — 앱은 onNewToken을 통해 업데이트를 구독해야 합니다.
  • 알림을 보내려면 서버가 모든 기기의 현재 토큰을 저장해야 합니다.

Registration Token이란

Registration Token은 Firebase Cloud Messaging이 각 앱 인스턴스에 할당하는 최대 4096자의 고유 문자열입니다. 토큰은 애플리케이션 ID, 기기 ID 및 기기의 Google 계정을 기반으로 형성됩니다.

토큰의 구조 및 목적

Registration Token은 Base64 형식으로 인코딩된 무작위 문자 시퀀스로 구성됩니다. FCM은 이 토큰을 전송 주소로 사용합니다 — 서버가 토큰으로 알림을 보내면 FCM이 특정 기기로 라우팅합니다. 토큰 없이는 특정 사용자에게 푸시 알림을 보내는 것이 불가능합니다.

다른 식별자와의 차이점

Registration Token은 Device ID(IMEI) 또는 Advertising ID와 혼동해서는 안 됩니다. Device ID는 기기의 하드웨어 식별자이고, Advertising ID는 광고 목적으로 사용됩니다. Registration Token은 앱과 기기의 조합에 연결되며, 하나의 기기가 다른 앱에 대해 여러 토큰을 가질 수 있습니다.

식별자목적변경 가능성
Registration TokenFCM 푸시 알림 전송변경 가능
Device ID (IMEI)하드웨어 식별영구적
Advertising ID타겟 광고재설정 가능
Instance ID레거시 Firebase 메커니즘삭제 시 변경

토큰이 유효하지 않은 것으로 간주되는 경우

FCM은 여러 상황에서 Registration Token을 유효하지 않은 것으로 간주할 수 있습니다. 앱이 기기에서 제거되면 토큰이 자동으로 취소됩니다. 새 기기에서 백업에서 데이터를 복원하면 이전 토큰이 작동을 멈춥니다. 또한 오래된 토큰으로 알림을 보내려고 하면 Firebase가 UNREGISTERED 상태를 반환합니다.

FCM이 Registration Token을 할당하는 방법

Firebase Cloud Messaging은 앱이 처음 실행될 때 getToken() 메서드가 호출되면 Registration Token을 생성합니다. 이 과정에는 Google Play Services 자격 증명 확인 및 Firebase 인프라에 앱 등록이 포함됩니다.

기기 등록 프로세스

기기가 통합 FCM SDK가 포함된 앱을 처음 실행하면 다음이 발생합니다. Firebase SDK는 기기에서 Google Play Services의 존재를 확인합니다. 그런 다음 SDK는 애플리케이션 ID와 기기 정보를 전송하여 Firebase 서버에 요청을 보냅니다. Firebase 서버는 새 토큰을 생성하고 앱에 반환합니다.

FCM의 내부 메커니즘

FCM은 장기 연결을 기반으로 하는 아키텍처를 사용합니다. Registration Token을 수신한 후, 기기는 Android에서는 STOMP 프로토콜, iOS에서는 APNs 채널을 통해 Firebase 서버와 지속적인 연결을 설정합니다. 서버가 토큰으로 알림을 보내면 FCM은 토큰으로 기기를 찾아 페이로드를 전송합니다.

토큰 재생성 조건

Registration Token은 다음과 같은 경우 FCM에 의해 재생성될 수 있습니다. 새 기기에서 백업에서 앱을 복원할 때. 앱을 삭제하고 재설치할 때. 시스템 설정을 통해 앱 데이터를 지울 때. 기기에서 다른 Google 계정으로 로그인할 때. Firebase는 변경 사항을 추적하기 위해 항상 onNewToken 콜백을 처리할 것을 권장합니다.

Android에서 Registration Token 가져오기

Android에서는 Firebase Messaging SDK를 통해 Registration Token을 가져옵니다. 프로세스는 SDK 버전에 따라 다릅니다 — 새 버전은 더 이상 사용되지 않는 FirebaseInstanceId 대신 FirebaseInstallations API를 사용합니다.

FirebaseInstallations을 통한 현대적인 방법

Firebase SDK 버전 21.0.0부터 getToken() 메서드는 FirebaseMessaging을 통해 호출됩니다. 이 접근 방식은 토큰 수명 주기를 자동으로 관리하고 업데이트를 구독합니다.

kotlin
class MyFirebaseMessagingService : FirebaseMessagingService() {

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

    private fun sendRegistrationToServer(token: String) {
        // 서버로 토큰 보내기
        Log.d("FCM", "New token: $token")
    }

    init {
        FirebaseMessaging.getInstance()
            .getToken()
            .addOnCompleteListener { task ->
                if (!task.isSuccessful) {
                    Log.w("FCM", "FCM 토큰 가져오기 실패")
                    return@addOnCompleteListener
                }
                val token = task.result
                sendRegistrationToServer(token)
            }
    }
}

Activity 또는 ViewModel에서 토큰 처리

일부 시나리오에서는 토큰이 서비스가 아니라 Activity 또는 ViewModel에서 직접 필요합니다. 이를 위해 앱 수명 주기의 적절한 지점에서 getToken()을 호출할 수 있습니다. 비동기 처리를 하지 않고 메인 스레드에서 이 메서드를 호출하지 않는 것이 중요합니다.

kotlin
class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        getFCMToken()
    }

    private fun getFCMToken() {
        FirebaseMessaging.getInstance().getToken()
            .addOnCompleteListener { task ->
                if (task.isSuccessful) {
                    val token = task.result
                    Log.d("FCM", "Token: $token")
                }
            }
    }
}

레거시 FirebaseInstanceId 메서드

Firebase SDK의 이전 버전(20.x 이전)에서는 FirebaseInstanceId.getInstance().getToken()을 통해 토큰을 가져왔습니다. 이 메서드는 더 이상 사용되지 않음으로 표시되어 있으며 새 프로젝트에서 사용하지 않는 것이 좋습니다. 레거시 코드를 유지 관리하는 개발자는 FirebaseInstallations API로 마이그레이션해야 합니다.

iOS에서 Registration Token 가져오기

iOS에서는 Registration Token을 가져오는 프로세스가 아키텍처적으로 다릅니다 — FCM은 Apple Push Notification service(APNs)를 통해 작동합니다. Firebase SDK는 APNs에서 고유 기기 토큰을 받아 FCM 형식으로 변환한 후 앱에 전달합니다.

APNs 설정 및 토큰 가져오기

iOS에서 FCM을 사용하려면 Firebase 콘솔에서 APNs 인증서 또는 키를 구성해야 합니다. 앱은 UNUserNotificationCenter를 통해 알림 권한을 요청해야 합니다. APNs 토큰을 수신한 후 Firebase SDK가 자동으로 Registration Token을 생성합니다.

swift
import FirebaseMessaging
import UserNotifications

class AppDelegate: UIResponder, UIApplicationDelegate {

    func application(
        application: UIApplication,
        didFinishLaunchingWithOptions: [UIApplication.LaunchOptionsKey: Any]?
    ) -> Bool {
        FirebaseApp.configure()
        Messaging.messaging().delegate = self
        requestNotificationAuthorization()
        return true
    }

    private func requestNotificationAuthorization() {
        let center = UNUserNotificationCenter.current()
        center.requestAuthorization(options: [.alert, .sound, .badge])
    }
}

extension AppDelegate: MessagingDelegate {
    func messaging(
        messaging: Messaging,
        didReceiveRegistrationToken fcmToken: String?
    ) {
        Log.d("FCM", "Token: \(fcmToken ?? "")")
        sendTokenToServer(token: fcmToken)
    }
}

iOS 토큰과 Android 토큰의 차이점

iOS의 Registration Token은 APNs 기기 토큰을 기반으로 하기 때문에 Android 토큰에 비해 크기가 작습니다. Firebase SDK는 APNs 토큰이 변경될 때 자동으로 FCM 토큰을 업데이트하며, 이는 기기를 백업에서 복원하거나 앱을 재설치할 때 발생합니다.

Registration Token 업데이트 및 관리

Registration Token의 수명 주기 관리는 안정적인 푸시 알림 전송을 위해 매우 중요한 작업입니다. 서버가 오래된 토큰을 저장하면 알림이 전송되지 않고 Firebase가 UNREGISTERED 오류를 반환합니다.

토큰 변경 모니터링

Firebase SDK는 토큰 변경을 추적하는 두 가지 메커니즘을 제공합니다. Android에서는 FirebaseMessagingService의 onNewToken 콜백이 사용됩니다. iOS에서는 messaging:didReceiveRegistrationToken 델리게이트가 사용됩니다. 토큰이 업데이트될 때마다 둘 다 호출됩니다.

kotlin
// SharedPreferences에 토큰 저장 및 서버로 보내기
class TokenManager(private val context: Context) {

    companion object {
        private const val PREFS_TOKEN_KEY = "fcm_registration_token"
    }

    fun saveToken(token: String) {
        val prefs = PreferenceManager
            .getDefaultSharedPreferences(context)
        prefs.edit().putString(PREFS_TOKEN_KEY, token).apply()
    }

    fun getSavedToken(): String? {
        val prefs = PreferenceManager
            .getDefaultSharedPreferences(context)
        return prefs.getString(PREFS_TOKEN_KEY, null)
    }
}

서버 측 토큰 저장 전략

서버는 사용자 식별자와 함께 Registration Token을 저장해야 합니다. 토큰이 업데이트되면 클라이언트가 새 토큰을 서버로 보내고 서버는 이전 토큰을 교체합니다. 토큰 기록을 유지하는 것이 좋습니다: 새 토큰으로 알림이 전송되지 않으면 이전 토큰을 시도할 수 있습니다.

토큰 작업 시 오류 처리

Firebase는 여러 경우에 토큰 가져오기 오류를 반환할 수 있습니다. 기기에 Google Play Services가 없는 경우 — 토큰을 가져올 수 없습니다. FCM에 대한 요청 할당량 초과 — 재시도 시 지수 백오프를 구현해야 합니다. 토큰 만료 — SDK가 자동으로 새 토큰을 요청합니다.

상황결과개발자 조치
앱 삭제토큰 취소데이터베이스에서 토큰 삭제
백업에서 복원새 토큰데이터베이스 업데이트
Google Play Services 재설정토큰 재생성onNewToken 처리
토큰 만료자동 업데이트업데이트 구독

자주 묻는 질문

Registration Token을 받지 못한 경우 어떻게 해야 하나요?

기기에 Google Play Services가 있는지 확인하고, google-services.json 파일의 정확성과 Firebase SDK 버전을 확인하세요. 앱에 인터넷 권한이 있는지 확인하세요.

Registration Token은 얼마나 자주 변경되나요?

토큰은 앱을 제거하고 재설치할 때, 데이터를 지울 때, 백업에서 복원할 때 또는 다른 Google 계정으로 로그인할 때 변경될 수 있습니다. 고정된 시간 간격은 없습니다.

하나의 기기가 여러 Registration Token을 가질 수 있나요?

네, 기기의 각 앱은 고유한 FCM 토큰을 받습니다. 기기에 Firebase를 사용하는 세 개의 앱이 있는 경우 각각 고유한 고유한 Registration Token을 갖게 됩니다.

Registration Token이 아직 유효한지 확인하는 방법은?

Firebase 콘솔 또는 FCM HTTP API를 통해 테스트 알림을 보내세요. 토큰이 유효하지 않은 경우 API는 UNREGISTERED 또는 NOT_FOUND 오류를 반환합니다.

서버에 Registration Token을 저장해도 안전한가요?

Registration Token은 비밀 키가 아니지만, 유출될 경우 사용자의 기기로 알림을 보낼 수 있습니다. 토큰은 안전한 데이터베이스에 저장하고 전송에는 HTTPS를 사용하세요.

요약

  • Registration Token은 Firebase Cloud Messaging을 통해 푸시 알림을 전송하는 데 필요한 요소입니다.
  • 토큰은 FCM SDK가 포함된 앱의 첫 실행 시 자동으로 생성됩니다.
  • Android에서는 FirebaseMessaging.getInstance().getToken()을 통해 토큰을 가져옵니다.
  • iOS에서는 토큰이 APNs 기기 토큰을 기반으로 하며 MessagingDelegate를 통해 전달됩니다.
  • 토큰은 변경될 수 있으므로 앱은 onNewToken 콜백을 처리해야 합니다.
  • 서버는 현재 토큰을 저장하고 UNREGISTERED 오류 발생 시 오래된 토큰을 삭제해야 합니다.
  • 안정적인 전송을 위해 토큰 변경 모니터링 및 실패 시 재시도 메커니즘을 구현하세요.

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

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

프로젝트 논의

더 읽어보기