App Lifecycle & Sandbox Physics
App Lifecycle 및 Sandbox 메커니즘의 정의, 범위, 선행 지식, 학습 주제, 참고 근거를 정리한 CS&E 학습 노드입니다.
목차 보기20
1. Overview
앱 생명주기 및 샌드박스 물리(App Lifecycle & Sandbox Physics)는 운영체제(iOS)가 한정된 메모리와 배터리 자원 속에서 애플리케이션의 탄생, 백그라운드 유배, 그리고 강제 처형(OOM: Out Of Memory)을 통제하는 시스템적 생존 법칙을 다룹니다.
데스크톱 환경과 달리 모바일 앱은 유저가 홈 화면으로 나가는 순간(Background), OS로부터 즉각적인 정지 명령(Suspend)을 받아 얼어붙어야 하며 허락 없이 CPU를 사용할 수 없습니다. 학습자는 앱이 Launch, Active, Inactive, Background, Suspended 상태를 횡단하는 라이프사이클의 궤적을 쫓으며 메모리 백업 시점을 체화합니다. 또한, 각 앱이 자신만의 감옥(Sandbox) 안에서만 파일을 읽고 쓰며 외부 앱의 데이터에 접근할 수 없도록 격리되는 파일 시스템 보안 아키텍처의 물리적 한계를 익힙니다.
2. Scope & Boundaries
In-Scope
- 앱 생명주기(App Lifecycle): UIApplication 생명주기 상태(Active, Inactive, Background, Suspended), 메모리 경고(Memory Warning) 훅.
- 뷰 컨트롤러 생명주기:
viewDidLoad,viewWillAppear,viewDidAppear의 레이아웃 로딩 및 렌더링 물리. - 샌드박스 시스템(Sandbox): 앱 전용 디렉토리 격리(Documents, Library, Caches, tmp), 프로세스 간 통신(IPC) 제한.
- 백그라운드 실행: 백그라운드 태스크(Background Fetch), 오디오 재생, 위치 추적 권한 역학.
Out-of-Scope
- 권한 승인 시스템 깊은 심연: iOS가 아니라 Android 플랫폼의 런타임 권한(Manifest) 역학 13-02-04. Android Security & Permissions Physics 영역으로 위임.
- 앱스토어 배포 및 바이너리 서명: Provisioning Profile을 씌워 앱스토어에 바이너리를 쏘아 올리는 과정 13-04-02. CI-CD & Store Release Policy Physics 영역으로 위임.
Boundaries
- iOS Lifecycle vs OS Kernel (03-01): OS Kernel(03-01)은 메모리가 꽉 차면 무작위 프로세스를 죽이는 OOM Killer의 하드웨어 메커니즘이라면, 13-01-04는 그 OOM Killer의 칼날이 앱에 날아오기 0.5초 전에
didReceiveMemoryWarning이벤트를 받아 캐시(Caches) 데이터를 버리고 연명하는 애플리케이션 방어선입니다.
3. Counterexample
- 백그라운드 무한 생존의 환상 (Background Immortality Fallacy): 앱이 홈 화면으로 나간 뒤에도(Background) 계속해서 서버에 GPS 좌표를 쏘고 타이머를 돌리도록 방치하는 행위. 모바일 OS는 배터리를 구하기 위해 백그라운드로 진입한 지 3초 안에 앱의 스레드를 완전히 강제로 얼려버리며(Suspended), 과도하게 배터리를 먹는 앱은 사용자 모르게 메모리에서 즉각 학살당합니다(OOM Terminate). 백그라운드 작업은 반드시 OS의 시스템 승인(Background Task)을 받아 제한된 시간 내에 끝내야 합니다.
- 절대 경로 하드코딩 (Absolute Path Fallacy): 앱 내에 이미지를 저장하면서 경로를
/User/MyApp/Documents/image.png처럼 하드코딩(Hard-coding)하여 저장하는 무지. iOS 샌드박스는 앱이 업데이트될 때마다 랜덤한 고유 식별자(UUID) 기반의 루트 디렉토리를 통째로 새로 발급하여 이사시킵니다. 절대 경로를 쓰면 업데이트 다음 날 파일을 찾을 수 없어 앱이 터지며, 반드시FileManager를 통한 동적 상대 경로 체계를 이용해야 합니다.
4. Prerequisites
- 운영체제 프로세스 관리 (Basic): 프로세스의 상태(Ready, Running, Blocked) 변화를 이해해야 iOS의 Active/Background 생명주기 궤적을 이해할 수 있습니다. (03-01. OS Processes)
- 메모리 계층 구조 (Recommended): 캐시(Cache) 메모리와 보조 기억 장치의 속도 차이를 알아야 Sandbox의 Documents와 Caches 디렉토리를 구분해 쓸 수 있습니다. (02-02. Memory Physics)
5. Learning Map
6. Learning Topics
Basic
Core Topic 01: 애플리케이션 상태 전이 (App States)
- Why to Learn: 앱이 전화를 받거나 홈 화면으로 튕겨나가는 순간에 데이터를 날리지 않고 안전하게 임시 저장하는 타이밍을 잡기 위함입니다.
- What to Learn: Not Running Inactive Active Background Suspended 상태 역학.
- How to Learn:
applicationDidEnterBackground함수에 로그를 박아넣고 홈 화면으로 나가면 그 로그가 즉시 찍히지만, 그 이후의 타이머 연산은 OS에 의해 완전히 무시당하는 물리적 기절(Suspension)을 눈으로 확인합니다. - Implement: 폼(Form)에 텍스트를 입력하다가 전화가 걸려와 앱이 Inactive 상태로 밀려나는 순간, 입력 중이던 텍스트를
UserDefaults에 자동 저장하는 방어 시나리오 코드 작성.
Core Topic 02: 뷰 컨트롤러(UI) 생명주기
- Why to Learn: 메모리에 껍데기만 올라온 상태와, 화면에 실제 픽셀이 렌더링된 상태를 구분하여 무거운 네트워크 호출을 최적의 타이밍에 터뜨리기 위해서입니다.
- What to Learn:
initloadViewviewDidLoadviewWillAppearviewDidAppear. - How to Learn: 뷰의 가로 사이즈(width) 값을 찍어볼 때,
viewDidLoad에서는 제약 조건이 덜 풀려 0으로 나오다가viewDidAppear에 이르러서야 실제 스크린 해상도로 계산되어 나오는 공간적 차이를 해부합니다. - Implement:
viewDidLoad에서는 서버 API 호출 세션을 세팅하고,viewDidAppear에서 비로소 페이드인(Fade-in) 애니메이션을 시작시켜 화면 렌더링을 찢어지게 하지 않는 생명주기 맞춤형 로직 설계.
Recommended
Core Topic 03: 샌드박스와 파일 시스템 디렉토리
- Why to Learn: 절대 날아가면 안 되는 사용자 일기장(Data)과, 지워져도 다시 다운받을 수 있는 썸네일 캐시(Cache)를 분리 저장하여 유저의 폰 용량을 아끼기 위함입니다.
- What to Learn: App Sandbox, Documents(백업 O), Library/Caches(백업 X), tmp 디렉토리 역학.
- How to Learn: 100MB짜리 임시 데이터를 Documents에 저장했다가 iCloud 백업 용량이 폭발하여 심사에서 리젝(Reject)당한 뒤, 이를 Caches 디렉토리로 옮겨 OS가 용량이 부족할 때 알아서 지워주도록 설계(Architecture)를 전환합니다.
- Implement:
FileManager를 사용하여 앱 실행 시 매번 랜덤하게 갱신되는 샌드박스 루트 경로(URL)를 동적으로 찾아내고, 유저 데이터를 Documents 디렉토리에 안전하게 직렬화하여 쓰는 파일 입출력 로직 작성.
7. Terminology
8. References
Primary References
- [CS2023: Operating Systems] — 프로세스 상태(상태 머신 전이도), 자원 할당 및 메모리 고립(Sandbox) 아키텍처.
- [SWEBOK v3: Software Quality] — 리소스 제약(Resource Constraint) 환경에서의 메모리 풋프린트 관리 최적화.
Secondary References
- [iOS App Architecture (Objc.io)] — SceneDelegate/AppDelegate 구조의 책임 분리와 상태 전이 이벤트 바인딩.
- [File System Programming Guide] — 샌드박스 내부 디렉토리 별 iCloud 백업 정책, 일회성 데이터(tmp) 삭제 주기 물리.
Industry References
- [Apple WWDC: Advances in App Background Execution] — Background Fetch 윈도우 스케줄링, 디퍼드 태스크(Deferred Task) 제어 한계.
- [Apple Developer: Managing your app's life cycle] — Active/Inactive/Background 상태 머신 전이도 및 메모리 경고(MemoryWarning) 훅(Hook) 처리.
9. Final Checklist
Primary Checklist
- 유저가 앱을 떠나 Background로 진입할 때(또는 Inactive 전환 시), 작성 중이던 모든 휘발성 데이터를 디스크(UserDefaults/DB)에 안전하게 백업(Save)하는가?
- 인터넷에서 임시로 다운받은 다량의 이미지나 캐시 파일을
Documents가 아닌Caches나tmp폴더에 분리 저장하여 기기 백업 용량을 고갈시키지 않는가?
Secondary Checklist
- 파일 시스템 접근 시 절대 경로(Absolute Path) 문자열을 데이터베이스에 저장하지 않고, 매 런타임마다 동적으로 샌드박스 홈 디렉토리(
NSSearchPathForDirectoriesInDomains)를 갱신하여 참조하는가? - UI 레이아웃의 너비/높이 값이 필요한 렌더링 로직을 껍데기만 올라온
viewDidLoad가 아닌, 실제 픽셀이 계산된viewWillAppear/viewDidAppear훅에 배치했는가?
Industry Checklist
- 운영체제로부터 메모리 부족 경고(
didReceiveMemoryWarning)를 받았을 때, 캐시된 이미지 배열이나 당장 안 쓰는 객체들을 즉시 메모리에서 날려버려 OOM(Out of Memory) 강제 종료를 회피하는가? - 백그라운드 태스크(음악 재생, GPS 추적)를 켤 때, OS가 강제로 스레드를 기절(Suspend)시키기 전 부여된 유예 시간(Time Extension) 내에 작업을 종료하고 반납(endBackgroundTask)하는가?
태그
native-ios-physics-mechanicsapp-lifecycle-sandbox-physicsapp-lifecyclesandbox-physicsmobilecross-platform-physicsmechanicsnative-ios-physicsapplifecyclesandboxnative-i-os-physicsmobile-app-lifecycle