iOS Development Guide

앱 foreground / background 상태 변화

핵심은 "어떤 상태에서 어떤 작업을 해야 하는가"다. foreground에서는 사용자 상호작용/렌더링 중심, background에서는 저장/정리/중단 대비 중심으로 동작을 나눠야 한다.

App lifecycle State-based behavior Knowledge item #22
학습 날짜

기록 없음

상태 흐름 한눈에 보기

상태 의미 주요 대응
Active (Foreground) 사용자 입력을 받고 UI가 실제로 동작 중 UI 업데이트, 타이머/애니메이션 실행, 실시간 작업 수행
Inactive 전환 중 임시 상태(알림, 전화, 홈 전환 직전/직후) 중요 상태 저장 준비, 민감 작업 일시 정지
Background 화면 밖에서 제한적으로 실행 데이터 저장, 정리(clean-up), 백그라운드 작업 최소화
Suspended 시스템이 실행을 멈춘 상태(코드 실행 없음) 직전 단계에서 저장/정리를 끝내야 함

foreground로 올 때

  • 화면 갱신(필요 시 데이터 리프레시)
  • 중단했던 타이머/스트림/관찰 재개
  • 권한/세션 상태 재확인

background로 내려갈 때

  • 임시 편집 상태/폼 입력 저장
  • 불필요한 네트워크/렌더링 작업 중단
  • 리소스 해제(메모리 사용량 축소)

어디에서 처리하나 (AppDelegate vs SceneDelegate)

// iOS 13+ Scene 기반 앱 예시
// SceneDelegate: scene 단위 상태 변화
func sceneWillEnterForeground(_ scene: UIScene) {
    // foreground 진입 준비
}

func sceneDidBecomeActive(_ scene: UIScene) {
    // 사용자 상호작용 재개
}

func sceneWillResignActive(_ scene: UIScene) {
    // 일시 정지 포인트
}

func sceneDidEnterBackground(_ scene: UIScene) {
    // 저장/정리
}

// AppDelegate: 앱 전체 레벨 이벤트
func applicationDidEnterBackground(_ application: UIApplication) {
    // 글로벌 리소스 정리, 공통 저장
}
scene를 사용하는 앱이라면 화면 상태 변화는 SceneDelegate 중심으로, 앱 전역 정책/공통 자원 관리는 AppDelegate 중심으로 분리하는 편이 명확하다.

자주 하는 실수

  • background 진입 시 저장을 미루다가 suspended 전에 못 끝냄
  • foreground 복귀 때 무조건 전체 API 재호출해서 불필요한 트래픽 유발
  • scene 단위 상태를 앱 전역 싱글톤 하나로만 처리해 충돌 발생

실무 체크리스트

  • 사용자 입력/진행 상태가 background 전에 저장되는가?
  • foreground 복귀 시 "필요한 것만" 재개하도록 분기되어 있는가?
  • scene 기반 앱에서 scene별 상태가 분리되어 있는가?
  • 긴 작업은 background task 정책과 함께 설계했는가?

Q

이 섹션은 위에서 나온 질문뿐 아니라, 새로운 개발적 지식과 시니어라면 알아야 할 내용까지 추가한다.