Data Persistence Overview (데이터 영구 저장)
iOS에서 지원하는 저장 방식은 다음과 같다.
- User Default
- Property List
- Keychain
- Core Data
- Binary Data
설정값등의 간단한 데이터는 User Default와 Property List를 사용한다.
작은 크기의 데이터를 쉽고 빠르게 쓰고, 접근할 수 있다.
단, Query를 지원하지 않기 때문에 데이터의 검색이 쉽지 않다.
암호등의 민감한 정보는 Keychain을 사용한다.
다수의 데이터를 저장할 때는 Core Data를 사용한다.
모든 데이터를 객체로 관리하기 때문에 검색과 정렬이 용이하고,
일부 데이터에만 접근하는 것도 가능하기 때문에 파일 크기가 성능에 큰 영향을 주지 않는다.
Binary Data를 사용하는 방법은 다음과 같다.
NSCoding이나 Codable Protocol을 채용하고, API를 활용하면 간단히 읽고 쓸 수 있다.
iOS의 파일 시스템은 iOS 10.3을 기준으로 'HFS+'와 'APFS'로 나뉜다.
PC나 웹에서는 특별한 제약 없이 데이터에 접근할 수 있지만 iOS에서는 매우 제한적이다.
앱을 설치하면 Sandbox 저장공간이 지정되고, 앱과 관련된 파일은 모두 해당 저장공간에 저장된다.
따라서 앱에서 접근할 수 있는 데이터도 Sandbox 내로 제한된다.
만약 앱이 특정 데이터를 공개하고 있다면 OS를 통해 간접적으로 접근하게 된다.
Sandbox내에는 세개의 Container가 존재한다.
Bundle Container
실행 파일과 Resource 등이 저장된다.
읽기 전용으로, 새로 파일을 저장하거나 기존의 파일을 수정하는 것은 불가능하다.
iCloud Container
iCloud 동기화 데이터가 저장된다.
Data Container
앱에서 저장한 데이터가 저장된다.
데이터를 저장할 때는 Apple의 Guide Line에 따라 적절한 경로에 저장돼야 한다.
사용자가 직접 생성한 데이터는 Documents에 저장한다.
사용자가 직접 생성한 영구적인 데이터는 Library에 저장한다.
Cache용 데이터는 Library>Caches에 저장한고, 저장 공간이 부족한 경우 자동으로 삭제된다.
따라서 Chches에 저장되는 데이터는 사용 전 존재 여부를 파악하고, 새로 생성하도록 해야한다.
설정값 등 앱 실행에 필요한 데이터는 Library>Application Support에 저장한다.
특정 작업을 실행할 때 사용하는 임시 데이터는 tmp에 저장한다.
iOS는 앱이 실행중이지 않다면 해당 경로의 파일을 삭제하지만, 되도록이면 사용 후 바로 삭제하도록 하는 것이 좋다.
위의 Guide Line을 지키지 않아도 당장 큰 문제는 없지만 중요한 것은 '백업이 되는가?'이다.
Documents, Library, Library>Application Support 세 경로만 백업이 가능하다.
사용자가 생성하지 않은 데이터, 다운로드한 데이터, 다시 생성 가능한 데이터, Cache 데이터 등을 백업하도록 구현하면,
심사를 통과할 수 없다.
Project의 Info에서 Application supports iTunes file sharing과 Supports opening documents inplace 두개의 Key를 추가한다.
이후 값을 YES로 변경한다.
이제부터 해당 앱에서는 Container에 저장된 파일을 직접 다운로드할 수 있고,
iOS의 File 앱을 사용해 Documents 경로에 존재하는 데이터에 접근할 수 있다.
앱을 실행한 뒤,
Windows>Devices and Simulator
를 선택한다.
앱을 실행한 기기를 선택한 뒤, 더보기를 눌러 App Data를 저장한다.
파일 안에는 Documents, Library, SystemData, tmp 네개의 경로가 존재하고,
실질적으로 사용할 수 있는 경로는 SystemData를 제외한 나머지 세개이다.
'학습 노트 > iOS (2021)' 카테고리의 다른 글
179. File Manager #2 (0) | 2022.01.19 |
---|---|
178. File Manager #1 (0) | 2022.01.12 |
176. GCD in Action (0) | 2022.01.10 |
175. Dispatch Group, Dispatch Semaphore (0) | 2022.01.10 |
174. Dispatch Work Item & Dispatch Source Timer (0) | 2022.01.09 |