푸시 알림은 앱 설치 후 사용자와 상호작용하는 가장 효과적인 방법 중 하나입니다. 새 메시지, 할인, 콘텐츠 업데이트에 대해 알리거나 버려진 장바구니를 상기시킬 수 있습니다. 푸시 알림(push notifications)은 클라우드 서비스를 통해 작동합니다: Android에서는 Firebase Cloud Messaging(FCM), iOS에서는 Apple Push Notification Service(APNS)입니다. 이 글에서는 알림 아키텍처, 유형 및 두 플랫폼의 설정 과정을 분석합니다. 자세한 내용은 공식 FCM 문서를 참조하세요.
핵심 포인트
푸시 알림은 서버가 앱의 요청 없이 모바일 기기로 보내는 메시지입니다. 메시지는 클라우드 서비스(FCM 또는 APNS)를 통과하며, 앱이 종료된 상태에서도 기기에 전달됩니다. 알림은 두 가지 유형으로 나뉩니다: 표시 알림(사용자에게 표시됨) 및 데이터 알림(백그라운드 처리를 위해 데이터 전송).
푸시 알림 아키텍처는 세 가지 구성 요소로 구성됩니다: (1) 앱 서버 — FCM/APNS에 요청 전송; (2) 클라우드 서비스 — 알림 라우팅; (3) 클라이언트 앱 — 알림 수신 및 처리. 서버는 특정 기기에 알림을 보내기 위해 해당 기기의 기기 토큰을 알고 있어야 합니다. 대량 발송을 위해 토픽 구독이 사용됩니다 — 기기를 주제별 채널(뉴스, 프로모션, 날씨)에 구독시키는 것입니다.
각 기기에서 알림은 운영 체제에 의해 처리됩니다: Android — NotificationManager 및 NotificationChannel을 통해, iOS — UNUserNotificationCenter를 통해. 사용자는 각 채널의 알림 동작을 구성할 수 있습니다: 소리, 배너, 잠금 화면 표시 허용 또는 완전 비활성화. 적절한 채널 구성은 참여도를 높이고 구독 취소율을 낮춥니다.
IT Sectr에서는 처음부터 플랫폼별 기능을 고려하여 푸시 알림 시스템을 설계합니다. 주요 결정 사항: FCM과 직접 APNS 중 선택, 페이로드 형식, 전송 빈도 및 구독 메커니즘. 이를 통해 알림이 도착하지 않거나 시스템에 의해 차단되는 상황을 방지할 수 있습니다.
Firebase Cloud Messaging(FCM)은 알림 전송을 위한 Google의 크로스 플랫폼 서비스입니다. FCM은 Android, iOS, Web 및 Flutter를 지원합니다. iOS에서 FCM은 APNS를 통해 작동합니다: FCM이 APNS에 요청을 보내면 APNS가 기기에 알림을 전달합니다. FCM의 장점: 두 플랫폼 모두에 단일 API, 내장 분석, A/B 테스트, 토픽 및 잠재고객 세그먼트.
Apple Push Notification Service(APNS)는 Apple의 네이티브 서비스입니다. Apple 기기(iOS, macOS, watchOS, tvOS)에서만 작동합니다. TLS 인증서 또는 토큰(JWT)을 통한 직접 인증이 필요합니다. APNS가 제공하는 것: 최소 전송 지연 시간 및 iOS 기능과의 직접 통합: PushKit, Notification Service Extension 및 중요 알림.
FCM과 APNS 간의 선택은 프로젝트 아키텍처에 따라 다릅니다. 앱이 iOS 전용인 경우 — APNS가 더 많은 제어를 제공합니다. 크로스 플랫폼인 경우 — FCM이 단일 API로 더 편리합니다. 많은 프로젝트가 FCM을 기본 서비스로 사용하고 iOS에서 VoIP를 위해 추가로 PushKit을 구성합니다. 하이브리드 접근 방식을 통해 두 시스템의 장점을 모두 얻을 수 있습니다.
| 특성 | FCM | APNS |
|---|---|---|
| 플랫폼 | Android, iOS, Web, Flutter | iOS, macOS, watchOS, tvOS |
| 인증 | 서버 키(Firebase Console) | TLS 인증서 또는 JWT 토큰 |
| 최대 페이로드 | 4 KB(data), 2 KB(notification) | 4 KB |
| 토픽 | 내장(Topic Messaging) | 없음(서버 측에서 구현) |
| 사일런트 푸시 | 지원 | 지원(content-available) |
| PushKit | 없음 | 있음(VoIP, 라이브 활동) |
| 분석 | Firebase Analytics | 내장 없음 |
| 종료된 기기로 전송 | 제한적(제조사에 따라 다름) | 예, PushKit 통해 |
리치 알림은 텍스트뿐만 아니라 미디어 콘텐츠(이미지, 비디오, 오디오 및 작업 버튼)를 포함하는 알림입니다. Android에서는 NotificationCompat 스타일을 통해 구현됩니다: BigPictureStyle(큰 이미지), BigTextStyle(접힌/확장된 텍스트), InboxStyle(메시지 목록), MediaStyle(재생 제어). iOS에서는 Notification Content Extension이 사용됩니다 — 확장된 알림을 위한 사용자 정의 UI가 있는 별도 타겟.
사일런트 푸시(iOS의 content-available)는 사용자에게 표시되지 않고 전달되는 알림입니다. 백그라운드 데이터 업데이트(콘텐츠 동기화, 사전 로드, 위젯 업데이트)를 위한 것입니다. iOS에서 사일런트 푸시는 Background Modes → Remote notifications를 활성화해야 합니다. Android에서는 백그라운드 알림 처리를 위해 FirebaseMessagingService를 onMessageReceived와 함께 사용합니다. 중요: iOS에서 사일런트 푸시는 빈도 제한이 있으며 앱이 포그라운드에 없으면 전달을 보장하지 않습니다.
인터랙티브 알림을 통해 사용자는 앱을 열지 않고도 작업을 수행할 수 있습니다. Android에서는 알림의 버튼(Action)입니다: "답장", "승인", "거절". 작업은 PendingIntent를 통해 처리되며, BroadcastReceiver 또는 Service를 시작합니다. iOS에서는 Notification Action이 UNNotificationAction 및 UNNotificationCategory를 통해 등록됩니다. 버튼은 foreground(앱 열기), background(백그라운드에서 실행) 또는 destructive(되돌릴 수 없는 작업 — 삭제, 차단)일 수 있습니다.
Notification Content Extension(iOS) — 길게 누르거나 3D Touch 시 확장된 알림 콘텐츠를 표시하는 사용자 정의 뷰 컨트롤러입니다. Notification Service Extension(iOS) — 표시 전에 알림 콘텐츠를 수정하는 미들웨어: E2E 메시지 복호화, 이미지 로드, 기밀 데이터 난독화. Android에는 직접적인 유사 기능이 없습니다 — 모든 수정은 FirebaseMessagingService에서 수행됩니다.
Android의 경우 필요: (1) 프로젝트에 Firebase SDK 추가(google-services.json); (2) 각 알림 카테고리에 대해 NotificationChannel(Android 8+) 생성; (3) 토큰 및 수신 메시지를 받기 위한 FirebaseMessagingService 구현. Notification Channel은 필수입니다 — 이것이 없으면 Android 8+에서 알림이 표시되지 않습니다. 채널에는 우선순위가 있으며(IMPORTANCE_HIGH — 소리 + 팝업, IMPORTANCE_LOW — 소리 없음), 사용자가 시스템 설정에서 구성할 수 있습니다.
iOS의 경우 필요: (1) Xcode에서 Push Notifications 기능 활성화; (2) Apple Developer Portal에서 APNS 키 구성; (3) UNUserNotificationCenter.requestAuthorization을 통해 인증 요청 — 이것은 한 번만 표시되는 시스템 대화상자입니다. 사용자의 응답이 중요합니다: 권한이 부여되지 않으면 알림이 전달되지 않습니다. 시스템 대화상자를 표시하기 전에 사용자에게 알림이 필요한 이유를 설명하는 것이 좋습니다(사전 권한 프롬프트).
기기 토큰(iOS) 및 등록 토큰(Android)은 푸시 알림을 위한 고유 기기 식별자입니다. 토큰은 첫 앱 실행 시 생성되며 변경될 수 있습니다: 재설치, 데이터 삭제, 개인정보 보호 설정 재설정 시. 서버는 정기적으로 토큰을 업데이트해야 합니다. Firebase는 onNewToken을 통한 토큰 관리 편리한 API와 테스트 알림 전송 패널(Firebase Console → Cloud Messaging)을 제공합니다.
토픽 구독은 FCM의 가장 효과적인 메커니즘 중 하나입니다. 기기가 토픽(예: "news", "promo_users_ios")을 구독하면 서버는 토큰 목록을 저장할 필요 없이 토픽별로 알림을 전송합니다. Firebase Topics은 토픽당 최대 백만 구독자와 표현식 언어를 통한 조건부 전송(Condition)을 지원합니다: "'news' in topics && ('US' in topics || 'UK' in topics)".
Notification Payload는 FCM/APNS를 통해 전송되는 JSON 구조입니다. FCM의 경우: 별도 notification(표시 부분 — 제목, 본문, 이미지) 및 data(앱용 사용자 정의 필드). APNS의 경우: alert, badge, sound, category 및 content-available이 포함된 aps 사전. 올바른 페이로드 구조가 중요합니다: notification + data가 동시에 도착하면 백그라운드의 앱이 data를 수신하지 못할 수 있습니다. Android의 경우 data 메시지만 사용하고 FCM Console을 통해 시각적 필드를 별도로 전달하는 것이 좋습니다.
자주 묻는 질문
FCM(Firebase Cloud Messaging)은 Android 및 크로스 플랫폼 알림을 위한 Google의 서비스입니다. APNS(Apple Push Notification Service)는 iOS/macOS 전용 Apple의 서비스입니다. FCM은 알림을 전달할 수 있습니다 iOS에서 APNS를 통해 프록시 서버로 작동합니다.
리치 알림은 미디어 콘텐츠(이미지, 비디오, 오디오, 작업 버튼)가 포함된 향상된 알림입니다. iOS에서는 Notification Content Extension을 통해 구현됩니다; Android에서는 BigPictureStyle 및 InboxStyle을 통해 구현됩니다.
기기 토큰은 푸시 알림을 보내기 위한 고유 기기 식별자입니다. Android에서는 FCM의 등록 토큰입니다; iOS에서는 APNS의 기기 토큰입니다. 토큰은 변경될 수 있습니다 앱 재설치 또는 설정 재설정 시, 따라서 서버에서 업데이트해야 합니다.
사일런트 푸시(무음 알림)는 사용자에게 표시되지 않는 알림입니다. 백그라운드 데이터 업데이트(콘텐츠 동기화, 위젯 업데이트, 프리페칭)에 사용됩니다. iOS에서는 활성화가 필요합니다 Background Modes → Remote notifications.
PushKit은 VoIP 앱(통화, 메신저)에서 사용되는 높은 우선순위 알림 전송을 위한 Apple 프레임워크입니다. PushKit은 알림을 전달합니다 앱이 종료된 경우에도 처리를 위해 앱 실행을 보장합니다.
요약
턴키 방식의 모바일 애플리케이션을 개발해 드립니다
IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.