본문 바로가기

학습활동

APFS-iOS File System

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 백업 시 제외

참고 링크

File System Basics

[iOS] File System 구조

[iOS] 파일시스템(File System) - jinShine

[iOS] SandBox를 알아보자!

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