iOS 앱 로컬 알림은 어떻게 만들까요? 2026 학생 입문 튜토리얼
📋 목차
증상: 과제 앱에서 알림을 눌러도 나타나지 않습니다.
빠른 해결: 알림 권한을 확인하고, 내용과 실행 조건을 설정한 뒤, 실제 실행 환경에서 허용·거부 상황을 모두 시험합니다.
iOS 앱 로컬 알림은 기기 안에서 정해 둔 시점에 알림을 예약하는 기능입니다. 사용자가 알림을 허용해야 하며, 서버가 보내는 푸시 알림과는 용도가 다릅니다.
이 글은 할 일, 시간표, 학습 계획 앱을 만드는 학생과 Swift 입문자를 위한 안내입니다. Windows만 사용하거나 학교 컴퓨터에 개발 도구를 설치하기 어려운 학습자도, 언제 Mac 환경에서 빌드와 실행을 확인해야 하는지 판단할 수 있습니다.
먼저 구분하기: 기기에서 예약하는 알림과 서버 푸시
수업 과제에 필요한 것이 “내가 정한 시간에 이 기기에서 알려 주기”라면 로컬 알림부터 검토합니다. 예를 들어 사용자가 과제 마감 시점을 앱에 입력하고, 앱이 해당 기기에 알림 요청을 예약하는 흐름입니다. 사용자 알림은 알림 내용과 실행 조건을 요청으로 묶어 시스템에 전달합니다. 사용자 알림 기능과 로컬 예약에 관한 공식 문서
| 구분 | 로컬 알림 | 서버 푸시 |
|---|---|---|
| 알림을 준비하는 곳 | 앱이 기기에서 요청을 예약합니다 | 서버가 알림을 준비해 기기로 보냅니다 |
| 학습 앱의 예 | 사용자가 저장한 과제 알림 | 서버가 보내는 새 공지 안내 |
| 먼저 확인할 점 | 권한 상태, 알림 내용, 실행 조건 | 서버와 앱 사이의 전송 흐름 |
| 입문 과제에 적합한 경우 | 기기에 저장한 일정 알림 | 서버에서 새 소식을 받아야 하는 기능 |
두 기능은 사용자의 화면에 비슷한 알림을 보여도 준비 방식이 다릅니다. 서버에서 오는 내용을 받지 않는 과제라면 푸시 서버부터 만들 필요가 없습니다. 반대로 여러 기기에 걸쳐 일정이나 공지 상태를 동기화해야 한다면 로컬 알림만으로 해결되는지 과제 요구사항을 다시 확인합니다.
권한을 먼저 확인하기: 허용을 요청하고 거부에도 대비하기
앱에서 알림 권한을 먼저 요청해야 하나요?
사용자에게 알림을 보여 주려면 권한 상태를 확인하고, 필요한 시점에 권한을 요청해야 합니다. 알림을 켜는 이유를 설명한 다음 요청하세요. 앱의 핵심 기능을 쓰기 전에 갑자기 권한 창부터 띄우면 사용자가 왜 필요한지 알기 어렵습니다. 알림 사용 권한을 요청하는 공식 안내
Swift에서는 UNUserNotificationCenter를 통해 권한 요청과 알림 예약을 다룹니다. requestAuthorization(options:completionHandler:)는 요청할 항목을 전달하는 API입니다. 아래 예시는 알림 표시와 소리 권한을 요청하는 형태입니다. 권한 요청 API 설명
import UserNotifications
let center = UNUserNotificationCenter.current()
center.requestAuthorization(options: [.alert, .sound]) { granted, error in
// 허용 여부와 오류를 확인해 화면에 알맞게 안내합니다.
}
사용자가 거부해도 앱이 멈춘 것으로 처리하지 마세요. 과제 목록을 볼 수 있게 두고, 알림이 꺼져 있어 예약 알림을 받을 수 없다는 점을 화면에 안내하면 됩니다. 설정 변경 후 상태를 확인할 때는 getNotificationSettings를 사용합니다. 알림 설정 상태를 읽는 API 설명
사용자가 알림을 거부하면 어떻게 처리하나요?
권한 거부를 오류 화면이나 앱 전체 사용 불가로 연결하지 않습니다. 알림 없이도 과제 목록과 완료 처리를 쓸 수 있게 하고, 알림을 원하는 사용자가 기기 설정에서 상태를 바꾼 뒤 앱으로 돌아오면 현재 권한을 다시 확인합니다.
권한 요청을 했다는 사실만으로 알림이 표시된다고 단정하지 마세요. 실제 표시 여부는 권한 상태와 기기 설정, 앱의 알림 처리 흐름을 함께 확인해야 합니다.
알림 내용을 만들기: 제목과 본문을 실행 조건에 연결하기
알림 문구와 알림 시각은 어디에서 설정하나요?
제목과 본문은 알림 콘텐츠에 넣고, 언제 처리할지는 실행 조건으로 정합니다. 과제 알림이라면 제목은 과목이나 할 일, 본문은 사용자가 알아볼 수 있는 짧은 안내로 구성합니다. 알림 요청에는 이 콘텐츠와 실행 조건을 함께 담아 시스템에 전달합니다. 앱에서 로컬 알림을 예약하는 공식 안내
예를 들어 “과제 확인”이라는 제목과 사용자가 작성한 안내를 콘텐츠에 넣습니다. 앱은 사용자가 고른 시각을 실행 조건으로 바꿔 예약 요청에 연결합니다. UNTimeIntervalNotificationTrigger는 시간 간격을 기준으로 조건을 만들고, repeats 설정으로 반복 여부를 지정하는 API입니다. 시간 간격 조건의 초기화 방법
예약 흐름의 형태는 다음과 같습니다. 입력 화면에서 받은 값을 실제 앱 코드에 연결하고, 잘못된 값이 요청으로 넘어가지 않도록 검증합니다.
let content = UNMutableNotificationContent()
content.title = "과제 확인"
content.body = "저장한 과제 내용을 확인하세요."
content.sound = .default
let trigger = UNTimeIntervalNotificationTrigger(
timeInterval: selectedInterval,
repeats: shouldRepeat
)
let request = UNNotificationRequest(
identifier: reminderID,
content: content,
trigger: trigger
)
UNUserNotificationCenter.current().add(request)
코드의 selectedInterval, shouldRepeat, reminderID는 앱 입력값이나 앱에서 정한 식별값으로 연결해야 합니다. 요청을 시스템에 추가했다고 해서 모든 상태에서 정확한 시각에 반드시 보인다고 약속할 수는 없습니다. 예약이 끝났다는 앱 내부 메시지와 실제 표시 결과를 구분해 확인하세요.
실행 결과를 확인하기: 앱 사용 중과 백그라운드 상태를 나누기
앱이 화면 앞에 떠 있을 때와 앱을 벗어난 상태에서는 알림을 다루는 흐름이 달라질 수 있습니다. 앞에 떠 있을 때 알림을 어떻게 처리할지는 알림 처리 코드를 확인하고, 백그라운드 상태에서는 권한과 기기 알림 설정을 확인합니다. 알림과 관련 동작을 처리하는 공식 문서
실행 결과가 보이지 않으면 한 번에 여러 부분을 바꾸지 말고 순서대로 좁혀 보세요.
- 앱의 알림 권한과 기기 설정을 확인합니다.
- 콘텐츠에 제목과 본문이 들어 있는지 확인합니다.
- 실행 조건이 사용자가 입력한 값과 연결됐는지 확인합니다.
- 알림 요청을 시스템에 추가하는 코드가 실행됐는지 확인합니다.
- 앱을 사용 중인 상태와 벗어난 상태를 따로 시험합니다.
이 순서라면 문제를 권한, 입력 데이터, 예약 요청, 표시 처리 가운데 어디서 찾아야 할지 구분하기 쉽습니다. 특히 화면에 “예약 완료”라고 표시되는 것과 사용자가 실제 알림을 확인하는 것은 서로 다른 점검 항목으로 두세요.
제출 전에 결정하기: 어떤 환경으로 검수할까요?
다음 조건에 따라 과제에 필요한 검수 경로를 선택합니다.
- 과제가 알림 내용과 예약 요청의 코드 작성만 요구한다면, 먼저 구현을 끝내고 권한 허용·거부 흐름을 코드에서 확인합니다.
- 과제가 Xcode에서 빌드하거나 앱을 실행하는 결과까지 요구한다면, 호환되는 Mac 환경에서 실제 프로젝트를 열고 검수합니다.
- Windows만 있고 학교 컴퓨터에 개발 도구를 설치할 수 없다면, 과제 제출 전 Mac 환경을 확보할 수 있는지 확인합니다.
- 푸시 알림 서버 연동이 과제 범위라면, 로컬 알림 예제만으로 요구사항을 충족했다고 판단하지 않습니다.
검수할 때는 다음 항목을 기록합니다.
- 알림 허용 상태에서 요청이 등록되는지 확인합니다.
- 권한을 거부해도 과제 목록 등 핵심 기능이 계속 동작하는지 확인합니다.
- 알림 제목과 본문이 과제 내용을 알아보기 쉽게 전달하는지 확인합니다.
- 실행 조건이 입력한 일정과 일치하는지 확인합니다.
- 설정을 바꾼 뒤 앱이 새 권한 상태를 확인하고 안내하는지 확인합니다.
- 앱 사용 중과 사용하지 않는 상태의 결과를 각각 확인합니다.
기기 로컬 알림과 서버 푸시는 어떤 차이가 있나요?
로컬 알림은 앱이 기기에 예약한 요청을 시스템에 맡기는 방식입니다. 서버 푸시는 서버에서 보낼 내용을 준비하는 흐름이 필요합니다. 과제에서 요구하는 것이 개인 일정 알림인지, 서버의 새 정보를 전달하는 기능인지 먼저 구분하면 불필요한 구현을 피할 수 있습니다.
수업 요구사항이 Xcode 빌드와 실행까지 포함된다면, Windows만으로는 해당 검수 단계를 진행할 환경이 부족할 수 있고 학교 컴퓨터는 설치 권한이나 사용 시간에 제약이 있을 수 있습니다. 가상 환경은 설치와 설정을 직접 해결해야 하며, 알림 결과도 실제 과제 환경에서 다시 확인해야 합니다. 당장 Mac을 살 필요가 없다면 Mac 환경 이용 안내와 Mac 이용 요금 안내를 살펴보고, 필요한 기간에 맞는 원격 Mac 이용을 검토할 수 있습니다. 다만 장기간 계속 개발하거나 물리 기기와 직접 연결해야 한다면 본인 Mac이 더 알맞을 수 있습니다. iOS 앱 로컬 알림은 권한, 콘텐츠, 실행 조건을 차례로 확인하고, 제출에 필요한 환경에서 결과를 검수하는 것이 핵심입니다.