Rich Notification: 개념, 미디어 콘텐츠 및 알림 생성

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

Rich Notification은 미디어 첨부 파일, 대화형 버튼 및 사용자 지정 인터페이스를 포함하여 사용자 경험을 향상시키는 iOS 푸시 알림의 향상된 형식입니다. 표준 텍스트 알림과 달리 Rich Notification은 배너 또는 잠금 화면에 이미지, 비디오 및 오디오를 직접 표시할 수 있습니다. Apple Developer Documentation, 2026에 따르면 UNNotificationAttachment는 단일 알림에서 최대 10개의 파일을 지원하며 모든 기기에서 최적으로 표시되도록 자동으로 크기를 조정합니다.

핵심 요점

  • 미디어 첨부 파일 — Rich Notification은 UNNotificationAttachment를 통해 이미지(JPEG, PNG, GIF), 비디오(MP4, MOV 최대 30초) 및 오디오(MP3, AAC, WAV)를 지원합니다.
  • 대화형 — 버튼 및 텍스트 입력은 UNNotificationAction 및 UNTextInputNotificationAction을 통해 추가되며 알림 카테고리에 바인딩됩니다.
  • Service Extension — 미디어 로딩에 필수적인 구성 요소: 페이로드 URL에서 첨부 파일을 다운로드하여 콘텐츠에 추가합니다.
  • Content Extension — 사용자 지정 UI, 애니메이션 및 제스처 처리가 포함된 완전히 사용자 지정된 알림 인터페이스를 생성합니다.
  • 제한 사항 — 최대 첨부 파일 크기 10MB, 확장 메모리 제한 50MB, 처리 시간 최대 30초.

Rich Notification이란

Rich Notification은 텍스트뿐만 아니라 미디어 첨부 파일, 대화형 요소 및 사용자 지정 인터페이스를 포함하는 iOS 푸시 알림입니다. “rich”라는 용어는 알림에 이미지, 비디오, 오디오, 작업 버튼 및 텍스트 입력을 포함하여 단순한 경고를 본격적인 대화형 요소로 전환하는 기능을 반영합니다.

iOS에서 알림의 진화

Apple은 iOS 10에서 UserNotifications 프레임워크와 함께 Rich Notification 지원을 도입했습니다. 이전에는 푸시 알림에 텍스트, 사운드 및 배지만 포함될 수 있었습니다. iOS 10은 UNNotificationServiceExtension과 UNNotificationContentExtension을 도입하여 콘텐츠 수정 및 사용자 지정 인터페이스 생성을 가능하게 했습니다. 이후 버전에서는 Content Extension의 SwiftUI 지원, 애니메이션 GIF 및 향상된 미디어 크기 조정이 추가되었습니다.

표준 알림 대비 장점

Rich Notification은 사용자 참여를 크게 향상시킵니다. Apple 연구에 따르면 이미지가 포함된 알림은 텍스트 전용 알림보다 30~40% 더 많은 상호 작용을 받습니다. 제품 이미지, 비디오 미리보기 또는 빠른 답장 버튼을 통해 사용자는 앱을 열지 않고도 알림에서 직접 결정을 내릴 수 있습니다. 이렇게 하면 목표 작업까지의 경로가 단축되고 사용자 경험이 개선됩니다.

미디어 첨부 파일 유형 및 형식

UNNotificationAttachment는 이미지, 비디오 및 오디오의 세 가지 미디어 카테고리를 지원합니다. 각 유형에는 형식, 크기 및 기간에 대한 고유한 제한이 있습니다. 시스템은 성능 최적화를 위해 알림 크기에 맞게 이미지를 자동으로 크기 조정하고 비디오 길이를 30초로 제한합니다.

미디어 유형지원 형식최대 크기
이미지JPEG, PNG, GIF, TIFF파일당 10MB
비디오MPEG, MP4, MOV10MB, 최대 30초
오디오MP3, AAC, WAV, CAF10MB

이미지 및 애니메이션 GIF

이미지는 컴팩트 및 확장 알림 보기에 표시되도록 시스템에 의해 자동으로 자르기 및 크기 조정됩니다. 애니메이션 GIF는 iOS 12부터 지원되며 알림을 볼 때 자동으로 재생됩니다. 권장 이미지 크기는 1024x1024픽셀로, 대형 화면 iPad를 포함한 모든 기기에서 선명한 표시를 보장합니다.

비디오 및 오디오 첨부 파일

Rich Notification의 비디오는 기본적으로 소리 없이 재생됩니다 — 사용자는 플레이어 버튼을 통해 소리를 활성화할 수 있습니다. 최대 비디오 길이는 30초이며, 이후 재생이 중지됩니다. 오디오 첨부 파일은 음성 메시지 또는 사운드 미리보기에 사용할 수 있으며 확장 보기에서 알림을 탭하면 재생됩니다.

대화형 버튼 및 작업

대화형 작업을 통해 사용자는 앱을 열지 않고 알림에서 직접 작업을 수행할 수 있습니다. 작업은 앱 실행 시 UNNotificationCategory 및 UNNotificationAction을 통해 등록됩니다. 각 작업은 백그라운드(앱을 열지 않고) 또는 포그라운드(작업 완료를 위해 앱 열기)가 될 수 있습니다.

UNNotificationAction 및 UNTextInputNotificationAction

UNNotificationAction은 제목과 requiresAuthentication(Face ID/Touch ID 필요) 또는 destructive(빨간색으로 강조 표시)와 같은 선택적 수정자가 있는 버튼을 나타냅니다. UNTextInputNotificationAction은 텍스트 입력 필드를 추가하여 이 기능을 확장하며 메시지나 댓글에 대한 빠른 답장에 이상적입니다. 알림을 길게 누르거나 아래로 스와이프하면 작업이 표시됩니다.

카테고리 및 작업 등록

알림 카테고리는 콘텐츠 유형을 사용 가능한 작업 집합과 연결합니다. 등록 프로세스는 앱 실행 시 AppDelegate에서 UNUserNotificationCenter.current().setNotificationCategories를 통해 수행됩니다. 카테고리는 서버의 JSON 페이로드 category 필드에 지정되며 시스템은 자동으로 해당 작업 집합을 알림에 적용합니다.

작업 탭 처리

사용자가 버튼을 탭하거나 텍스트를 제출하면 시스템은 didReceive response 메서드로 UNUserNotificationCenterDelegate를 호출합니다. UNNotificationResponse에는 작업 식별자와 입력된 텍스트(UNTextInputNotificationAction의 경우)가 포함됩니다. 이 정보를 기반으로 앱은 해당 비즈니스 로직을 실행합니다: 메시지 보내기, 작업 확인 또는 특정 화면 열기.

Swift에서 Rich Notification 구현

Rich Notification 생성의 전체 주기를 살펴보겠습니다: AppDelegate에서 카테고리 등록부터 Service Extension에서 처리 및 표시까지. AppDelegate는 버튼이 있는 카테고리를 등록하고, 서버는 이미지 URL이 포함된 알림을 보내고, Service Extension은 미디어를 다운로드하고, Content Extension은 버튼이 있는 사용자 지정 인터페이스를 표시합니다.

swift
// AppDelegate — 카테고리 및 작업 등록
func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions:
    [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {

    let replyAction = UNTextInputNotificationAction(
        identifier: "reply",
        title: "답장",
        options: [.authenticationRequired])

    let likeAction = UNNotificationAction(
        identifier: "like",
        title: "좋아요",
        options: [])

    let category = UNNotificationCategory(
        identifier: "social_post",
        actions: [replyAction, likeAction],
        intentIdentifiers: [],
        options: [])

    UNUserNotificationCenter.current()
        .setNotificationCategories([category])
    return true
}

이미지 로딩을 위한 Service Extension

사용자 지정 필드에 “social_post” 카테고리와 이미지 URL이 포함된 푸시 알림을 받은 후 Service Extension이 활성화됩니다. 확장 프로그램이 이미지를 다운로드하고 고유 식별자가 있는 UNNotificationAttachment를 생성하여 콘텐츠에 추가합니다. 다운로드한 파일의 크기를 확인하는 것이 중요합니다 — 10MB를 초과하면 첨부 파일이 생성되지 않으며 시스템이 미디어 없이 알림을 표시합니다.

swift
class NotificationService: UNNotificationServiceExtension {

    override func didReceive(
        _ request: UNNotificationRequest,
        withContentHandler contentHandler:
        @escaping (UNNotificationContent) -> Void
    ) {
        let content = (request.content.mutableCopy()
            as! UNMutableNotificationContent)
        guard let urlString = content.userInfo["media-url"]
            as? String,
            let url = URL(string: urlString)
        else { contentHandler(request.content); return }

        URLSession.shared.downloadTask(with: url) {
            location, _, _ in
            guard let location = location else {
                contentHandler(content); return }
            let attachment = try! UNNotificationAttachment(
                identifier: "media", url: location,
                options: [UNNotificationAttachmentOptionsTypeHintKey:
                    "jpg"])
            content.attachments = [attachment]
            contentHandler(content)
        }.resume()
    }
}

Rich Notification 테스트

서버 없이 Rich Notification을 테스트하려면 iOS 시뮬레이터를 사용하고 xcrun simctl push로 터미널을 통해 푸시를 보내십시오. 페이로드에서 Service Extension을 활성화하려면 mutable-content: 1을, 작업을 표시하려면 카테고리를 지정해야 합니다. 이 명령은 선택한 시뮬레이터에 JSON 파일에서 직접 푸시를 전송하여 서버 인프라를 설정하지 않고도 빠르게 반복할 수 있습니다.

Content Extension 및 사용자 지정 인터페이스

UNNotificationContentExtension을 사용하면 표준 알림 인터페이스를 사용자 지정 UIKit 또는 SwiftUI 보기로 완전히 대체할 수 있습니다. 확장 프로그램은 사용자가 알림을 확장할 때(force touch 또는 아래로 스와이프) 활성화되며 버튼, 슬라이더, 애니메이션 및 기타 UI 구성 요소를 포함할 수 있습니다. 인터페이스 크기는 Auto Layout을 사용하여 콘텐츠에 맞게 조정됩니다.

Content Extension의 Storyboard 및 SwiftUI

Content Extension은 UIViewController를 상속하는 뷰 컨트롤러가 있는 storyboard를 기반으로 합니다. SwiftUI View는 iOS 16부터 UIHostingController를 통해 통합되어 현대적인 인터페이스 구축 방식을 가능하게 합니다. iOS 14~15와의 이전 버전 호환성을 위해 xib 파일과 함께 UIKit을 사용하는 것이 좋습니다. 인터페이스는 UNNotificationContent를 통해 Service Extension에서 수정된 콘텐츠를 받습니다.

사용자 작업 처리

Content Extension은 didReceive response 메서드로 UNNotificationContentExtension 프로토콜을 구현합니다. UNNotificationResponse에는 누른 버튼 또는 입력된 텍스트에 대한 정보가 포함됩니다. 확장 프로그램은 알림을 닫지 않고 인터페이스를 업데이트하거나 완료 핸들러를 호출하여 닫을 수 있습니다. 이를 통해 알림 내에서 직접 시각적 피드백이 있는 “좋아요”와 같은 빠른 상호 작용 시나리오를 만들 수 있습니다.

디자인 권장 사항

Apple은 Content Extension을 간결하고 기능적으로 유지하고 과도한 요소를 피할 것을 권장합니다. 확장된 알림의 최대 높이는 약 400포인트이며 그 후 콘텐츠가 스크롤됩니다. 다른 알림과의 일관성을 위해 시스템 글꼴 및 간격을 사용하십시오. iPhone과 iPad 모두에서 인터페이스가 올바르게 표시되도록 다양한 화면 크기에서 테스트하십시오.

자주 묻는 질문

Rich Notification의 최대 이미지 크기는 얼마인가요?

단일 미디어 첨부 파일의 최대 크기는 10MB입니다. 제한을 초과하면 UNNotificationAttachment가 생성되지 않으며 미디어 없이 알림이 표시됩니다. Service Extension에서 빠른 로딩을 위해 이미지를 1~3MB로 최적화하는 것이 좋습니다.

Rich Notification이 모든 iPhone 모델에서 작동하나요?

Rich Notification은 iOS 10 이상의 모든 기기에서 지원되며 iPhone 5s 이상을 포함합니다. 사용자 지정 UI가 있는 Content Extension은 iOS 12부터 사용 가능합니다. Content Extension의 SwiftUI는 iOS 16부터입니다. 이전 버전에서는 알림이 표준 형태로 표시됩니다.

Rich Notification에서 GIF를 사용할 수 있나요?

네, 애니메이션 GIF는 iOS 12부터 지원됩니다. GIF는 일반 이미지로 UNNotificationAttachment를 통해 로드되며 알림을 볼 때 자동으로 재생됩니다. GIF 크기는 다른 형식과 동일한 10MB로 제한됩니다.

알림에 몇 개의 버튼을 추가할 수 있나요?

카테고리 등록 시 알림당 최대 4개의 작업입니다. 더 많이 지정하면 시스템이 처음 4개를 표시하고 나머지는 무시합니다. 최적의 UX를 위해 2~3개의 버튼을 사용하는 것이 좋습니다 — 너무 많은 옵션은 인터페이스를 과부하시킵니다.

Rich Notification을 보내려면 서버가 필요한가요?

네, 서버는 사용자 지정 필드에 미디어 파일 URL과 mutable-content: 1 플래그가 포함된 JSON 페이로드로 APNS(Apple Push Notification service)를 통해 푸시를 보내야 합니다. 서버는 Content Extension 및 작업을 활성화하기 위한 카테고리도 지정합니다.

요약

  • Rich Notification — 미디어 첨부 파일, 대화형 버튼 및 사용자 지정 UI를 갖춘 iOS 푸시 알림으로 사용자 참여를 높입니다.
  • 지원되는 미디어 — JPEG/PNG/GIF 이미지, MP4/MOV 비디오(최대 30초), MP3/AAC/WAV 오디오(파일당 10MB 제한).
  • Service Extension이 페이로드 URL에서 미디어를 다운로드하고 UNNotificationAttachment를 알림 콘텐츠에 추가합니다.
  • 대화형 작업 — 카테고리당 최대 4개의 버튼, UNTextInputNotificationAction을 통한 텍스트 입력 포함.
  • Content Extension이 표준 인터페이스를 임의 요소가 있는 사용자 지정 UIKit/SwiftUI 보기로 대체합니다.
  • Content Extension이 탭 처리 및 실시간 UI 업데이트를 위해 didReceive 메서드로 UNNotificationContentExtension 프로토콜을 구현합니다.
  • Rich Notification은 모든 수준에서 구성이 필요합니다: 서버(APNS), Service Extension(미디어 로딩) 및 AppDelegate(카테고리 등록).

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

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

프로젝트 논의

더 읽어보기