모바일 개발에서의 푸시 알림 — 본질, 유형 및 작동 방식

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

푸시 알림은 앱이 닫혀 있더라도 서버가 모바일 기기로 보내는 메시지입니다. Google Firebase, 2024에 따르면, 푸시 알림은 전문 서비스—Android에서는 FCM, iOS에서는 APNS—를 통해 처리되며, 동시에 수백만 대의 기기로 실시간 전달을 지원합니다. 이들은 현대 모바일 애플리케이션에서 사용자 경험의 중요한 일부가 되었습니다.

주요 포인트

  • 푸시 알림 — FCM 또는 APNS를 통해 서버가 전달하는 메시지.
  • FCM (Firebase Cloud Messaging) — iOS를 지원하는 Android용 기본 서비스.
  • APNS (Apple Push Notification Service) — iOS와 macOS를 위한 Apple의 자체 서비스.
  • 알림 유형은 텍스트 알림, 미디어 알림, 무음 알림으로 나넉니다.
  • 기기 토큰 — 대상 푸시 메시지 전달을 위한 고유 식별자.

푸시 알림이란?

푸시 알림은 앱 서버가 명시적인 요청 없이 사용자의 기기로 보내는 짧은 메시지입니다. 이들은 배너, 아이콘 배지 또는 소리 신호로 나타나며, 사용자의 주목을 앱으로 끜고 중요한 이벤트를 알립니다.

정의와 목적

푸시 알림은 제목, 메시지 본문 및 옵션 페이로드 데이터로 구성됩니다. SMS와 달리, 푸시 알림은 사용자에게 무료이며 클라우드 서비스 인프라—Android용 FCM 및 iOS용 APNS—를 통해 전달됩니다. 푸시 알림의 주요 목적은 참여도 향상, 이벤트 알림 및 사용자를 앱으로 돌려보내는 것입니다.

사용 통계에 따르면, 올바르게 구성된 푸시 알림은 앱 리텐션을 30–60% 향상시킵니다. 그러나 과끔간 알림 빈도는 구독 해지를 초래하며 사용자의 60% 이상이 하루에 세 번 이상 알림을 보내면 알림을 비활성화합니다.

푸시 시스템 아키텍처

푸시 시스템은 세 가지 구성 요소로 구성됩니다: 앱 서버, 플랫폼 서비스 (FCM/APNS) 및 기기의 클라이언트 애플리케이션. 서버가 플랫폼 서비스에 요청을 보내면, 해당 서비스가 OS와의 지속적인 연결을 통해 대상 기기에 알림을 전달합니다.

푸시 알림은 어떻게 작동하나요?

푸시 알림의 전달 메커니즘은 기기와 플랫폼 서비스 간의 지속적인 연결에 기반합니다. 운영체제가 암호화된 통신 채널을 유지하며 이를 통해 모든 푸시 메시지가 전달됩니다.

등록 및 토큰 획득

첫 실행시, 앱이 알림 전송 권한을 요청하고 FCM 또는 APNS로부터 고유한 기기 토큰을 받습니다. 이 토큰은 최대 4KB의 문자열로, 앱 인스턴스를 고유하게 식별합니다. 앱을 재설치하거나 기기를 복구하면 토큰이 변경됩니다.

kotlin
class FirebaseMessagingService :
    FirebaseMessagingService() {

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

    override fun onMessageReceived(
        message: RemoteMessage
    ) {
        showNotification(message.notification)
    }
}

앱 서버를 통한 전송

앱 서버가 FCM API 또는 APNS API에 HTTP 요청을 보내어 대상 토큰, 제목, 본문 및 추가 데이터를 지정합니다. 플랫폼 서비스가 전달 상태를 반환합니다: 성공, 무효 토큰 (기기가 앱을 제거함) 또는 율도 제한 초과.

js
fetch("https://fcm.googleapis.com/fcm/send", {
    method: "POST",
    headers: {
        "Authorization": "key=AIzaSy...",
        "Content-Type": "application/json"
    },
    body: JSON.stringify({
        to: "device_token_here",
        notification: {
            title: "새 메시지",
            body: "새 알림이 있습니다!"
        }
    })
})

FCM vs APNS: 플랫폼 비교

FCM과 APNS 사이의 선택은 대상 플랫폼에 따라 달라집니다. FCM은 Android와 iOS를 지원하는 반면, APNS는 Apple 생태계만 지원합니다. 크로스-플랫폼 모바일 앱 개발에 중요한 주요 차이점을 살펴보겠습니다.

Firebase Cloud Messaging (FCM)

FCM은 Google Play Services에서 작동하는 Google 서비스입니다. 자동 표시되는 알림과 앱이 직접 처리하는 데이터 알림의 두 가지 전달 스키머를 지원합니다. FCM은 무료이고 보낼 수 있는 메시지 수에 제한이 없습니다.

Apple Push Notification Service (APNS)

APNS는 최대 10MB의 멀티미디어 첨부 (이미지, 동영상, 음성)를 지원하는 Apple의 서비스입니다. APNS를 통한 전송에는 TLS 인증서 또는 인증 키가 필요합니다. APNS는 단일 기기에 대한 전송 빈도를 제한합니다 — 분당 150개 이하로 제한하며, 이를 초과하면 율도 제한이 작동합니다.

특징FCMAPNS
플랫폼Android, iOS, WebiOS, macOS, watchOS
요구사항Google Play ServicesApple Developer Program
미디어최대 4KB (데이터)최대 10MB (첨부)
우선순위보통/높음즉시/전기 절약
비용무료무료 (계정 필요)

푸시 알림의 유형

푸시 알림은 표시 방법과 목적에 따라 분류됩니다. 유형을 이해하면 각 사용자 상호작용 시나리오에 맞는 전략을 선택하는 데 도움이 됩니다.

표시 알림 (Display Notifications)

가장 일반적인 유형으로, 표시되는 알림에는 제목과 본문이 있습니다. OS가 자동으로 알림 셀터, 잠금 화면 및 배너에 표시합니다. 개발자는 소리, 진동, 아이콘 배지 및 갑곡 수행 (답장, 열기, 거부)을 위한 작용 버튼을 구성할 수 있습니다.

데이터 알림 (Data Notifications)

데이터 알림은 시각적 표시 없이 페이로드만 포함합니다. 앱이 백그라운드에서 처리하며, 데이터를 동기화하고, 캐시를 업데이트하고, 다운로드를 시작합니다. Android에서는 데이터 알림이 안전하게 전달되지만, iOS에서는 앱이 활성일 때만 또는 백그라운드 페치를 통해서만 전달됩니다.

멀티미디어 및 리치 알림

현대 모바일 OS는 이미지, GIF, 동영상 및 음성을 포함한 리치 및 미디어 알림을 지원합니다. iOS에서는 UNNotificationAttachment를 통해 구현되며, Android에서는 시스템 알림 세텀의 알림 모양을 커스터마이즈하기 위해 BigPictureStyle과 InboxStyle을 통해 구현됩니다.

무음 알림 (Silent)

무음 알림은 사용자에게 표시되지 않으며 백그라운드 동기화에 사용됩니다. iOS에서는 앱을 열기 전 데이터 업데이트와 같은 작업에 높은 우선순위를 가집니다. Android에서는 이들을 최소 우선순위의 데이터 알림으로 처리합니다.

프로젝트에서 푸시 알림 설정

푸시 알림 설정은 인프라, 서버 및 클라이언트 코드 레벨에서의 작업이 필요합니다. 크로스-플랫폼 모바일 프로젝트의 일반적인 과정을 살펴보겠습니다.

Android용 FCM 설정

Android의 경우, Firebase Console에서 프로젝트를 만들고, google-services.json을 프로젝트에 추가하고, FirebaseMessagingService를 구성해야 합니다. 기기 토큰은 FirebaseInstanceId 또는 FirebaseMessaging.getInstance().token을 통해 획득되며, 첫 실행 또는 변경 시 API를 통해 서버로 보내집니다.

iOS용 APNS 설정

iOS의 경우, Apple Developer Program 구독, Developer Portal에서 Push 인증서 또는 APNS 키 생성, Xcode에서 Push Notifications 기능 활성화가 필요합니다. 알림 등록은 UIApplication.shared.registerForRemoteNotifications를 통해 수행되며, AppDelegate에서 deviceToken을 받습니다.

swift
import UIKit
import UserNotifications

@main
class AppDelegate: UIResponder,
    UIApplicationDelegate {

    func application(
        _ application: UIApplication,
        didRegisterForRemoteNotificationsWithDeviceToken
        deviceToken: Data
    ) {
        let token = deviceToken
            .map { String.format("%02x", $0) }
            .joined()
        // 서버에 토큰을 보내십시오
    }
}

서버 촉 전송

서버 촉에서는 푸시 알림이 REST API 또는 Admin SDK를 통해 보내집니다. FCM은 Firebase Admin SDK(Node.js, Java, Python, Go 용으로 제공)를 사용하고, APNS는 pucher 라이브러리(Java용 pushy, Node.js용 apn2)를 사용합니다. 마지막 업데이트 시간의 타임스탬프와 함께 데이터베이스에 토큰을 저장할 것을 권장합니다.

푸시 알림 보안

푸시 알림 보안은 기기한 데이터가 전송될 수 있으므로 고도 중요합니다. 두 플랫폼 모두 기본 보호 메커니즘을 제공하지만, 개발자가 이들을 올바르게 사용해야 합니다.

페이로드 암호화

푸시 알림의 페이로드에는 사용자의 개인 데이터 (이름, 거래 금액, 메시지 링크)가 포함될 수 있습니다. FCM/APNS와 기기 간의 통신 채널이 암호화되어 있더라도, 제3자 소프트웨어가 알림을 가로채는 경우 앱 레벨에서 데이터가 가로채질 수 있습니다. 서버에서 AES-256을 사용하여 민감한 페이로드를 암호화하고, Keychain(iOS)과 EncryptedSharedPreferences(Android)에 저장된 키를 사용하여 기기에서 복호화할 것을 권장합니다.

서버의 토큰 확인

기기 토큰은 세션 식별자로, 기기가 해킹되거나 트래픽이 가로채질 경우 위험이 되어 걸릴 수 있습니다. 앱 서버는 전송 전에 토큰을 확인해야 합니다: 데이터베이스와 확인하고, 비활성 토큰을 추적하고, 반복되는 InvalidToken 오류에서 제거합니다. FCM과 APNS는 무효한 토큰에 대해 InvalidRegistration 상태를 반환합니다 — 무시하지 마십시오.

알림 스팸 방지

빈도 제어가 없으면, 푸시 알림은 사용자를 귀찮게 하고 리텐션을 감소시키는 스팸 도구가 될 수 있습니다. 서버 씨에서 제한을 설정하세요: 한 사용자에 대해 시간당 5개 이하의 알림과 3개 이하의 동일 메시지. 거래 알림(주문 확인, 비밀번호 변경)의 경우, 제한이 더 높을 수 있습니다 — 시간당 최대 10개까지, 이들은 중요한 정보를 포함하기 때문입니다. 공격자가 서버를 통해 대량 알림을 발송할 수 없도록 API 전송 레벨에서 율도 제한을 사용하세요.

자주 묻는 질문

Android에서 FCM 없이 푸시 알림을 보낼 수 있나요?

네, 그러나 Android에서APNS 직접 연결은 지원되지 않습니다 — Google Play Services가 없는 기기는 Huawei Mobile Services (HMS) 및 사용자 WebSocket 연결과 같은 대체 방법을 사용합니다. 그러나 FCM은 무료와 신뢰성 때문에 대부분의 앱에서 표준으로 남아 있습니다.

인터넷이 꿇길 때 푸시 전달은 어떻게 작동하나요?

FCM과 APNS는 마지막 알림을 서버에 저장하고, 연결이 복구되면 전달합니다. 각 기기는 각 앱에서 마지막 알림만 기억하므로, 장기간 네트워크 부재 시 중간 메시지가 손실됩니다.

iOS에서 푸시 알림이 안 오는 이유는?

가장 일반적인 이유는 만료된 Push 인증서 (1년 유효), 무효한 기기 토큰, 설정에서 비활성화된 알림 또는 저전력 모드 활성화입니다. Apple Developer Console에서 인증서를 확인하고, 앱이 UNUserNotificationCenter를 통해 권한을 요청하는지 확인하세요.

사용자가 푸시 알림을 열었는지 어떻게 추적하나요?

Android에서는 Intent를 통한 열기 추적과 함께 NotificationCompat.Builder에서 PendingIntent를 사용하세요. iOS에서는 UNUserNotificationCenterDelegate.userNotificationCenter(_:didReceive:withCompletionHandler:) 메서드를 사용하세요. FCM은 각 전송된 알림에 대해 전달 및 열기 보고서를 제공합니다.

푸시 알림이 배터리 수명에 영향을 미치나요?

인잡하게 — 푸시 알림은 지속적인 연결을 유지하지 않습니다. OS는 모든 앱에 대해 단하나의 시스템 채널을 사용하여 전체 전력 소비를 최소화합니다. 잣은 간격으로 보내면(5분마다) 기기를 절전 모드에서 께우묐 더 많은 에너지를 소비합니다. iOS의 무음 알림은 수신된 데이터를 처리하기 위해 백그라운드에서 앱이 실행되므로 더 많은 배터리를 소비합니다.

요약

  • 푸시 알림 — FCM 또는 APNS를 통해 서버가 기기에 보내는 메시지.
  • 기기 토큰 — 대상 Push 전달을 위한 고유 식별자.
  • FCM은 Android, iOS 및 Web을 지원하고, APNS는 Apple 생태계만 지원합니다.
  • 데이터 알림은 사용자에게 표시되지 않고 백그라운드에서 처리됩니다.
  • 미디어 알림은 iOS에서 최대 10MB 첨부를 지원하고, Android에서는 확장 스타일을 통해 지원합니다.
  • APNS 인증서는 Apple Developer Portal에서 매년 갱신해야 합니다.
  • FCM과 APNS의 율도 제한은 각 기기에 보내는 빈도를 제한하여 사용자를 알림 스팸으로부터 보호합니다.

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

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

프로젝트 논의

더 읽어보기