APFS-iOS File System
- 파일 시스템은 데이터 파일, 운영 체제와 연결된 파일의 영구 스토리지를 처리
- → 자료를 쉽게 발견 및 접글 할 수 있도록 보관하고 조직하는 것 또한 가르키기 때문에 중의적 표현이다
- 파일 시스템은 디렉토리를 사용하여 계층적 조직을 만듦
- → 파일 시스템의 구성과 코드 적용되는 규칙을 이해해보자
FileManager
- 파일 시스템 컨텐츠에 대한 인터페이스
- 파일들을 관리하기 위한 객체
iOS SandBox 구조
- iOS File System은 SandBox 구조
- → 아이들이 모래사장 안에서만 놀고, SandBox를 나올 땐 흙을 털고 나오게 하는 것에 비유
- → 내부와 외부를 적절하게 분리시킨 구조
- → 앱마다 별도의 파일을 생성하여 공유되지 않도록 막으며, 외부로부터의 접근을 막는 보안형태
- → 제한된 권한 안에서만 접근 및 사용이 가능
- 앱에 대한 파일, 네트워크 리소스, 환경설정, 하드웨어 등에 대한 앱의 접근을 제한
- 각각의 앱 별로 존재하기 때문에 한 앱을 사용하는 사용자는 해당 앱의 데이터에만 접근이 가능
- SandBox 외부에 있는 데이터에 접근하기 위해선 접근 권한을 부여받아야 함
- → A 은행 앱의 공인인증서를 B 은행에서 사용하기 위해선 데이터 접근 권한을 받아 “전달”받아 사용
iOS Standard Directories: SandBox안 Container 종류
- 보안을 위해 iOS 앱과 파일 시스템의 상호 작용은 앱의 샌드박스 디렉터리 내의 디렉터리로 제한됨
- → 새 앱을 설치하면 샌드박스 디렉터리 내에 앱에 대한 Container 디렉터리를 생성
- → 앱은 일반적으로 컨테이너 디렉터리 외부에서 파일에 접근하거나 파일 생성이 금지됨
- → 디렉터리 외부에서 파일에 접근하거나 파일 생성 허용되는 경우는 앱이 공용 시스템 인터페이스를 사용하여 사용자의 연락처와 같은 항목에 접근할 때임 → 이것을 시스템 프레임 워크가 처리함
- Bundle Container : 앱의 번들을 갖음
- Data Container : 앱과 사용자 모두에 대한 데이터를 갖고, 하위 디렉터리를 보유
- iCloud Container : 앱이 런타임에 액세스를 요청할 수 있음
Bundle Container의 구성
App.app
- 앱의 번들
- 앱과 앱의 모든 리소스를 포함
- 프로젝트안의 파일들이 아카이브되어 여기에 저장
- iCloud / iTunes 백업 시 제외
- → 하지만 iTunes의 경우 App Store에서 구입한 모든 앱의 초기 동기화를 수행함
Data Container의 구성
→ 위 디렉토리 외로 추가 디렉토리를 생성할 수 있음
→ 앱마다 생성되며, 이것이 백업이 되기 때문에 앱을 삭제해도 설정값이 남아 있을 수 있음
→ 백업 시 이부분이 백업되는 것
Documents
- 사용자가 생성한 컨텐츠를 저장
- 사용자가 작성, 가져오기, 삭제, 편집하려는 모든 파일을 포함
- → 모든 그래픽 데이터, 텍스트 파일, 비디오, 오디오 다운로드 파일
- 사용자가 수정, 추가, 삭제가 가능 → 사용자에게 노출 가능해야 함
- 사용자가 파일을 직접 접근하는 것
- iCloud / iTunes 백업 시 포함
- NSURLIsExcludedFromBackupKey 키를 사용하여 -[NSURL setResourceValue:forKey:error:]를 호출하여 백업에서 파일을 제외할 수 있음
- → 다시 만들거나 다운로드할 수 있는 모든 파일, 대용량 미디어 파일은 백업에서 제외시킴
Documents - inbox
- 앱이 외부 엔티티(개체, 데이터의 집합)에서 열도록 요청한 파일에 액세스 할 수 있음
- 다른 앱에서 받은 데이터 저장
- → ex. 메일의 첨부파일
- 파일을 읽거나 삭제는 가능하지만, 새 파일 생성 및 기존 파일 수정은 불가능
- → 편집하기 위해선 디렉토리 외부로 옮겨서 작업해야함
- iCloud / iTunes 백업 시 포함
Library
- 모든 파일의 최상위 디렉토리이며, 하위 디렉토리를 생성할 수 있음
- → Application Support / Caches / Preference / 사용자 지정 하위 디렉토리 를 갖음
- 사용자에게 노출되지 않는 파일 저장→ ex. 데이터 파일, 구성 파일 등
- → 데이터 캐시파일 저장
- → 실행 시 필요하지만 사용자에게 숨겨야하는 파일을 저장
- iCloud / iTunes 백업 시 포함
Library - Application Support
- 애플리케이션 생성 데이터(앱 지원 파일) 저장
- 애플리케이션 관리용 데이터 저장
- → 데이터 파일, 구성 파일, 템플릿 및 App Bundle에서 로드된 리소스의 수정된 버전을 저장
- 사용자에게 노출되지 않는 App의 사용자 기록 저장
- iCloud / iTunes 백업 시 포함
Library - Cache
- 데이터 캐시 파일(가장 빠른 메모리) 저장→ 임시 데이터보다는 오래 유지 하지만 지원 파일만큼 오래 사용 불가
- → 이를 사용하여 앱 성능을 향상시킬 수 있음
- → ex. 데이터베이스 캐시 파일, 다운로드 가능한 임시 콘텐츠
- 디스크 용량 부족시 시스템에서 자동 청소
- → 앱 실행 중에는 삭제하지 않음
- iColud / iTunes 백업 시 제외
Library - Preferences
- 애플리케이션 설정 데이터 저장
- → 앱에 환경설정 같은 것들을 저장
- 직접수정 권장 않음
- UserDefaults, CFPreferences 등 사용 권장
- → ex. 앱을 처음켰는지, 마지막 선택 탭이 무엇인지
- iCloud / iTunes 백업 시 포함
tmp
- 이 디렉토리를 사용하여 앱 실행 사이에 유지할 필요가 없는 임시 파일을 작성할 수 있음
- 재사용 않는 임시 데이터 저장
- 앱은 더이상 필요하지 않은 파일을 이 디렉토리에서 삭제해야 함→ 앱 종료 후엔 해당 파일에 의존할 수 없음
- → 앱이 실행되지 않고 있을 때 시스템이 주기적으로 청소
- iCloud / iTunes 백업 시 제외
참고 링크
728x90
'학습활동' 카테고리의 다른 글
iOS FileSystem 실습 (0) | 2024.01.08 |
---|---|
KeyChain (0) | 2023.12.11 |
Swift Performance (2) (0) | 2023.12.11 |
Swift Performance (1) (0) | 2023.12.11 |
URL Loading System (0) | 2023.11.30 |