Today Widget: 정의, 유형 및 알림 위젯 만들기

저자: IT Sectr 게시일: 2026-06-15 읽는 시간: 10 분

Today Widget은 알림 센터 또는 “Today” 화면에 대화형 정보를 직접 표시하는 iOS 확장 기능입니다. 사용자는 메인 앱을 열지 않고도 최신 데이터(날씨, 환율, 달력)를 확인할 수 있습니다. Apple WWDC(2025)에 따르면 iOS 17에서 대화형 위젯이 도입된 후 WidgetKit 사용량이 40% 증가했습니다. Today Widget은 정보에 대한 빠른 액세스 문제를 해결합니다. 화면을 한 번 보면 사용자는 앱을 탐색하지 않고도 필요한 데이터를 얻을 수 있습니다.

주요 내용

  • Today Widget — 알림 센터에 정보를 표시하기 위한 iOS 확장 기능입니다.
  • WidgetKit — 위젯 생성을 위한 최신 프레임워크(iOS 14+).
  • NCWidgetProviding — 알림 센터 확장을 위한 프로토콜(iOS 8–13).
  • Auto Layout — 다양한 화면 크기에 위젯을 적응시킵니다.
  • Timeline Provider — WidgetKit의 데이터 업데이트 메커니즘입니다.

Today Widget이란

Today Widget(알림 센터 위젯이라고도 함)은 앱을 실행하지 않고도 앱의 요약 정보를 표시하는 iOS 인터페이스 요소입니다. 사용자는 잠금 화면 또는 홈 화면에서 왼쪽으로 스와이프하여 위젯을 볼 수 있습니다. 위젯은 동적 데이터(환율, 최신 뉴스, 작업 상태, 기기 상태)를 표시할 수 있습니다.

역사적으로 Today Widget은 iOS 8에서 알림 센터 프레임워크를 통해 구현된 알림 센터 확장 기능으로 등장했습니다. iOS 14에서 Apple은 WidgetKit을 도입했습니다. 이는 위젯을 홈 화면에 직접 배치할 수 있도록 완전히 재설계된 아키텍처입니다. 현대적인 의미의 Today Widget은 “Today” 섹션(첫 번째 화면 왼쪽의 위젯 섹션)에 배치된 WidgetKit 위젯입니다.

Today Widget이 필요한 이유

주요 목표는 정보에 액세스하는 시간을 줄이는 것입니다. 앱을 열고 메뉴를 탐색하며 로딩을 기다리는 대신 사용자는 즉시 필요한 데이터를 볼 수 있습니다. Apple(2024)에 따르면 위젯이 있는 앱은 27% 더 높은 사용자 참여율을 보여줍니다. 추가 사용 사례: 빠른 작업(작업 완료 표시), 모니터링(심박수, 활동) 및 상태(배터리 충전, 알림).

WidgetKit vs NCWidgetProviding

Today Widget 개발자에게는 두 가지 접근 방식이 있습니다. 최신 WidgetKit(iOS 14+)과 레거시 NCWidgetProviding 확장(iOS 8–13)입니다. 선택은 최소 지원 iOS 버전에 따라 다릅니다. WidgetKit은 새 프로젝트에 권장되며, NCWidgetProviding은 구형 기기 지원에 사용됩니다.

특성WidgetKitNCWidgetProviding
최소 iOSiOS 14iOS 8
배치홈 화면 + “Today”“Today”만
크기소형, 중형, 대형고정 크기 1개
상호작용iOS 17+ 버튼 및 토글앱 열기만
업데이트Timeline ProviderwidgetPerformUpdate
언어SwiftUIUIKit

WidgetKit 사용 시기

앱이 iOS 14 이상을 지원하는 경우 WidgetKit을 사용하세요. 여러 크기, 인텐트를 통한 구성, iOS 17의 재설계 및 딥 링크 등 풍부한 기능을 제공합니다. SwiftUI의 선언적 방식은 위젯 코드를 간결하고 읽기 쉽게 만듭니다. Timeline Provider는 전력 소비를 고려하여 업데이트 일정을 자동으로 관리합니다.

NCWidgetProviding 사용 시기

iOS 9–13 지원이 필요한 경우에만 사용합니다. NCWidgetProviding은 구현이 더 간단합니다. 프로토콜이 있는 일반 UIViewController입니다. 그러나 크기가 하나뿐이고 UIKit만 지원하며 구성이 불가능합니다. Apple은 availability check를 사용하여 기존 프로젝트에서도 WidgetKit으로 전환할 것을 권장합니다. iOS 14+에서는 WidgetKit, 폴백으로 NCWidgetProviding을 사용합니다.

Today Widget 유형

최신 iOS에는 기능적 목적에 따라 세 가지 유형의 위젯이 있습니다. 각 유형은 고유한 문제를 해결하며 데이터 및 인터페이스 디자인에 다른 접근 방식이 필요합니다. 분류는 앱에 적합한 아키텍처를 선택하는 데 도움이 됩니다.

정보 위젯

정적 또는 정기적으로 업데이트되는 정보(날씨, 날짜, 환율, 서버 상태)를 표시합니다. Timeline Provider를 통해 일정에 따라 데이터가 업데이트됩니다. 사용자는 위젯과 상호작용하지 않고 읽기만 합니다. 정보 위젯은 구현이 가장 간단하며 터치 이벤트 처리가 필요하지 않고 추가 권한 없이 백그라운드에서 작동합니다.

대화형 위젯

iOS 17부터 WidgetKit은 위젯 내에서 버튼, 토글 및 슬라이더를 지원합니다. 사용자는 앱을 열지 않고도 작업을 수행할 수 있습니다(작업 표시, 음악 일시 중지, 조명 켜기). 대화형 위젯은 App Intents를 사용하여 메인 앱에 작업을 전달합니다. 제한 사항: iOS 18까지는 “Today” 섹션이 아닌 홈 화면에서만 작동합니다.

구성 가능한 위젯

사용자는 시스템 인터페이스를 통해 표시 데이터를 사용자 지정합니다(날씨 도시 선택, 금융 계정 선택, 뉴스 카테고리 선택). Intents Extension 및 WidgetBundle의 구성을 통해 구현됩니다. 구성 가능한 위젯은 각 사용자에 대한 개인화 및 정보 관련성을 높입니다.

WidgetKit 위젯 만들기

WidgetKit을 사용하여 SwiftUI에서 Today Widget을 만드는 과정을 살펴보겠습니다. 위젯은 자동 업데이트와 함께 현재 환율을 표시합니다. WidgetKit에는 세 가지 구성 요소가 필요합니다: 위젯 구조, 구성이 있는 Provider, 표시용 View입니다.

swift
import WidgetKit
import SwiftUI

@main
struct CurrencyWidget: Widget {
    let kind: String = "CurrencyWidget"

    var body: some WidgetConfiguration {
        StaticConfiguration(kind: kind, provider: Provider()) { entry in
            CurrencyWidgetEntryView(entry: entry)
        }
        .configurationDisplayName("Currency Rate")
        .description("Current USD/RUB exchange rate")
        .supportedFamilies([.systemSmall, .systemMedium])
    }
}

Provider는 표시할 데이터를 준비하는 역할을 합니다. getTimeline 메서드는 업데이트 일정을 만듭니다(15분 후 다음 업데이트). TimelineProvider는 서버를 지속적으로 폴링하지 않고 위젯이 최신 데이터를 표시하도록 보장합니다.

swift
struct Provider: TimelineProvider {
    func getSnapshot(in context: Context,
                      completion: @escaping (CurrencyEntry) -> Void) {
        let entry = CurrencyEntry(date: Date(), rate: 92.5)
        completion(entry)
    }

    func getTimeline(in context: Context,
                     completion: @escaping (Timeline<CurrencyEntry>) -> Void) {
        let rate = CurrencyService().fetchRate()
        let entry = CurrencyEntry(date: Date(), rate: rate)
        let nextUpdate = Calendar.current.date(
            byAdding: .minute, value: 15, to: Date()
        ) ?? Date()
        let timeline = Timeline(entries: [entry], policy: .after(nextUpdate))
        completion(timeline)
    }
}

Timeline Provider 및 데이터 업데이트

Timeline Provider는 Today Widget 데이터를 관리하는 WidgetKit의 중앙 메커니즘입니다. 타이머에 의한 정기적 업데이트(이전 NCWidgetProviding과 같은) 대신 WidgetKit은 timeline 개념을 사용합니다. 이는 타임스탬프가 있는 항목의 시퀀스입니다. 시스템은 현재 항목이 만료될 때까지 표시한 후 다음 항목으로 전환하거나 새 항목을 요청합니다.

업데이트 정책

Timeline은 세 가지 정책을 지원합니다: .after(date) — 지정된 날짜에 다음 업데이트; .never — WidgetCenter.reloadAllTimelines이 명시적으로 호출될 때까지 위젯이 업데이트되지 않음; .atEnd — 마지막 항목 표시 후 업데이트. 환율 Today Widget의 경우 15–30분 간격의 .after 정책이 최적입니다. 에너지 효율성은 WidgetKit의 주요 장점입니다. 시스템이 모든 위젯의 업데이트를 하나의 창에서 그룹화합니다.

WidgetCenter: 프로그래밍 방식 업데이트

timeline이 만료되기 전에 데이터가 변경된 경우(예: 사용자가 앱에서 환율을 업데이트한 경우) WidgetCenter.shared.reloadTimelines(ofKind: “CurrencyWidget”)를 호출합니다. 그러면 Provider에서 새 timeline을 요청하고 표시를 업데이트합니다. WidgetCenter는 단일 명령으로 모든 앱 위젯을 다시 로드할 수도 있습니다. 데이터 동기화 후에 편리합니다.

위젯 디자인 가이드라인

Apple은 Today Widget 디자인에 엄격한 요구 사항을 적용합니다. 콘텐츠는 불필요한 요소 없이 명확한 계층 구조로 한 눈에 읽을 수 있어야 합니다. HIG(Human Interface Guidelines) 권장 사항을 위반하면 App Store 게시가 거부될 수 있습니다. 세 가지 원칙: 한눈에 파악 가능, 일관성, 계층 구조.

한눈에 파악 가능 — 한 번에 읽을 수 있음

사용자는 위젯에 1초 미만을 소비합니다. 3–4개 이상의 데이터 요소를 추가하지 마세요. 글꼴은 레이블에 최소 11pt, 값에 17pt를 사용합니다. 주요 숫자에는 굵게(Semibold)를 사용합니다. 스크롤을 피하십시오. Today Widget은 스크롤되지 않습니다.

크기 적응

WidgetKit은 세 가지 크기를 지원합니다: 소형(170×170pt), 중형(364×170pt), 대형(364×382pt). “Today” 섹션의 Today Widget에서는 중형이 가장 일반적인 선택입니다. EnvironmentValues를 통한 적응형 디자인: 크기에 따라 정보 밀도를 변경합니다. 소형은 숫자 하나, 중형은 숫자 + 차트, 대형은 테이블을 표시합니다.

다크 모드 및 Dynamic Type 지원

위젯은 개발자의 추가 작업 없이 라이트 테마와 다크 테마 모두에서 올바르게 표시되어야 합니다. WidgetKit은 시스템 색상을 자동으로 가져옵니다. 위젯의 Dynamic Type은 제한됩니다. 글꼴 크기는 고정되어 있지만 읽을 수 있어야 합니다. UIColor.labelUIColor.systemBackground는 두 테마 모두에서 텍스트와 배경의 기본 색상입니다.

자주 묻는 질문

Today Widget은 일반 홈 화면 위젯과 어떻게 다른가요?

현재는 동일한 WidgetKit 위젯입니다. 차이점은 배치뿐입니다: 홈 화면과 “Today” 섹션(첫 번째 화면 왼쪽)에 있습니다. iOS 14 이전에는 Today Widget이 알림 센터에서만 작동하는 별도의 NCWidgetProviding 확장이었습니다. 이제는 단일 WidgetKit입니다.

Today Widget은 얼마나 자주 업데이트되나요?

WidgetKit은 타이머로 위젯을 업데이트하지 않습니다. 개발자가 Timeline Provider를 통해 일정을 설정합니다(타임스탬프가 있는 항목). 시스템은 전력 절약을 고려하여 지정된 시간에 업데이트를 보장하며 몇 분 지연될 수 있습니다. 최소 간격은 15분이지만 Apple은 시간당 1회 이하를 권장합니다.

대화형 버튼이 있는 Today Widget을 만들 수 있나요?

네, iOS 17부터 WidgetKit은 App Intents를 통해 버튼, 토글 및 슬라이더를 지원합니다. 대화형 요소는 iPhone 및 iPad 홈 화면에서 작동합니다. “Today” 섹션 지원은 iOS 18에서 추가되었습니다. iOS 16 이하에서는 위젯을 탭하면 앱만 열립니다.

하나의 앱에 몇 개의 Today Widget을 가질 수 있나요?

제한이 없습니다. 앱은 WidgetBundle을 통해 원하는 수의 위젯을 등록할 수 있으며 각각 고유한 유형, 크기 및 구성을 가집니다. 사용자가 개별적으로 추가합니다. 사용자의 선택에 부담을 주지 않도록 권장은 3–5개 이하입니다.

시뮬레이터에서 Today Widget을 테스트하려면 어떻게 해야 하나요?

WidgetKit은 iOS 시뮬레이터에서 완전히 지원됩니다. Xcode에서 WidgetKit 대상 스킴을 실행하면 시뮬레이터의 홈 화면에 위젯이 나타납니다. Timeline Provider를 테스트하려면 WidgetKit Debug Profile을 사용하세요: Xcode → Product → Profile → WidgetKit Debug. 실제 동작은 물리적 기기에서 확인하세요.

요약

  • Today Widget — 앱을 열지 않고 정보를 표시하는 iOS 확장 기능입니다.
  • WidgetKit(iOS 14+) — 최신 프레임워크, NCWidgetProviding — 구형 버전용 레거시입니다.
  • 세 가지 위젯 유형: 정보형, 대화형(iOS 17+), Intents를 통해 구성 가능.
  • Timeline Provider가 타이머 대신 업데이트 일정을 관리합니다.
  • 디자인은 한눈에 파악 가능해야 함: 최소 요소, 큰 글꼴, 크기 적응.
  • App Intents를 통한 상호작용 — 앱을 열지 않고 버튼 및 토글.
  • WidgetCenter.shared.reloadTimelines — 데이터 변경 시 프로그래밍 방식 업데이트.

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

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

프로젝트 논의

더 읽어보기