[iOS] File System 구조

Youngwoo Lee·2021년 8월 16일
1

iOS

목록 보기
23/46
post-thumbnail

Apple Developers Document-File System Basics

File System

iOS 파일 시스템은 SandBox 구조를 띄고 있다

SandBox
아이들에게 놀이터 모래사장 안에서만 놀 수 있도록 하고, 나올때는 흙을 털고 나오게 하는 것처럼, 내부와 외부를 적절하게 분리 시키는 구조라고 간단하게 이야기 할 수 있다. iOS는 기본적으로 앱 마다 별도의 파일을 생성하여 공유되지 않도록 하고 외부로부터 들어온 접근에 대해 보호되는 영역으로 시스템이 부정적으로 조작되는것을 막는 보안 형태를 띄고 있다.


만약에 iOS 파일 시스템 구조가 샌드박스 구조가 아니라면??


하나의 앱이 모든 기기의 모든 자원을 망나니처럼 휩쓸고 다닐 수 있다! 또한 외부로부터의 접근을 쉽게 허용할 수 있다


우리가 샌드박스 구조를 쉽게 경험한 적이 있을까??

  • 공인인증서를 많이들 사용해봤을 것인데, 하나의 기기에 여러 은행 앱을 설처하고 사용할 경우, 이미 A은행 앱에서 공인인증서를 받았어도, B은행 앱에서는 사용할 수 없다.
  • 하나의 문서 파일을 A앱에서 생성하였다고 해서, B앱에서 열 수 없다. A앱에서 B앱으로 "전달" 이라는 과정을 거쳐야만 해당 파일을 접근할 수 있다


SandBox의 구조?

많은 자료들에서 볼 수 있는 그림이다

SandBox는 Bundle Container, Data Container, iCloud Container 로 나누어져 있다.



Data Container

Documents

  • 사용자가 작성한 내용을 저장
  • 사용자가 수정 / 추가 / 삭제 가능 (ex iTunes 파일 공유)
  • 사용자에게 노출 가능
  • iCloud / iTunes 백업

사용자가 작성, 가져오기, 삭제 또는 편집하려는 모든 파일이 포함


ex) 나중에 보려고 저장해둔 비디오 파일
ex) 그림 파일이나 텍스트 파일 등

큰 파일들 같은 경우 백업이 되지 않도록 - USURL setResourceValue:forKey:error: 를 활용해서 백업에서 제외할 수 있도록 해야된다


Documents - inbox

  • Documents 내부 inbox
  • iCloud / iTunes 백업
  • 다른 앱에서 보내온 데이터들은 inbox로 들어옴
  • 외부 애플리케이션 전달 자료 저장

외부 앱에서 요청하여 가져온 데이터를 inbox에 저장한다
ex) 메일의 첨부파일
ex) PDFExpert 에서 타 앱의 디렉터리에 접근하여서 파일을 가져올 경우


이 디렉토리는 파일을 읽고 삭제할 수는 있지만, 새 파일을 만들거나 기존 파일을 수정할 수는 없다

편집을 위해서는 디렉토리 바깥으로 옮겨서 작업을 해야된다.


Library

  • 사용자 데이터 외
  • 사용자에게 직접노출 없음
  • 하위 디렉터리 생성 가능
  • iTunes / iCloud 백업
  • 하위에 Application Support / Caches / Preferences 가 있음

모든 파일의 최상위 디렉토리

실행시에 필요하지만 사용자에게는 숨겨야 하는 것들을 Library에 저장


ex) 데이터 파일, 구성 파일, 템플릿 및 앱 번들에서 로드된 리소스의 수정된 버전
ex) 데이터 캐시 파일들을 저장할때도 여기 저장해야된다


Library - Application Support

  • 애플리케이션 생성 데이터 저장
  • 애플리케이션 관리용 데이터 저장
  • iCloud / iTunes 백업
  • 사용자에게 보여지지는 않지만 App에서 사용자 기록을 남기는 공간

Library - Cache

  • 반복 사용 임시 데이터 저장
  • 디스크 용량 부족시 시스템에서 자동 청소
    - 단, 애플리케이션 실행중에는 삭제하지 않음
  • 재요청 / 재생산 가능 데이터 저장
  • iColud / iTunes 백업 제외

Library - Preferences

  • 애플리케이션 설정 데이터 저장
  • 직접수정 권장 않음
  • UserDefaults, CFPreferences 등 사용 권장
  • iCloud / iTunes 백업
  • 앱에 환경설정 같은 것들을 저장

tmp

  • 재사용 않는 임시 데이터 저장
  • 시스템이 주기적으로 청소
  • iCloud / iTunes 백업 제외

FileManager

  • 이러한 파일들을 관리하기 위한 객체



야곰캠프 활동학습

다음의 데이터는 어느 영역에 저장하는 것이 좋을까??

  1. 동영상 플레이어의 동영상 파일
    저장 위치 : Documents/
    이유 : 용량이 큰 경우 백업을 의도적으로 제한할 수도 있음
  1. 웹 서버에서 받아온 임시 데이터
    저장 위치 : Library/Cache/
    이유 : 임시로 받아온 데이터니까, 그리고 재사용을 할 데이터일테니 Cache에 저장
    의문점 : 그렇다면 tmp는?
    -> 재사용이 되기 위해서 가져오는 거니까!
  1. 사용자가 작성한 임시 메모
    저장 위치 : Documents/
    이유 : 기본 메모앱의 임시 메모의 경우 한 글자라도 작성하면 바로 저장되는 것을 볼 수 있다

  2. 메모장 앱의 코어데이터 저장소
    저장 위치 : application support/
    이유 : 지속적으로 관리되고, 유저에 의해서 삭제되지 않아야하며, 백업이 가능해야하므로 application support 이다.

  1. 내 일기를 외부로 내보내기 위한 백업파일
    저장 위치 : tmp/
    이유 : inbox의 경우는 외부로 부터 가져온 파일을 저장하는 곳이고,
    외부로 내보내기 위한 백업 파일은 공유 버튼을 누르고 해당 창을 나가면 바로 삭제될 것이라고 판단. 공유하기 창을 끈 다음에 다시 공유를 해도 새로 복사를 진행하기 때문에 tmp라고 판단
  1. 채팅 앱의 대화내역
    저장 위치 : application support/
    카카오톡의 경우 서버에 메시지가 보존되는 기간이 3일이다.
    메시지가 기기를 통해서 들어오면 기기 로컬의 데이터베이스에 저장이 될 것이다
    지속적으로 관리되고, 유저의 접근이 닿지 않는 곳, 백업이 되는 곳은 application support 이다

  2. 어젯밤 술취해 남겨둔 음성메모
    저장 위치 : Documents/
    백업이 가능하고, 유저가 저장한 데이터니깐

  3. 사진편집을 위해 사진첩에서 가져온 사진
    저장 위치 : Documents/inbox/
    외부에서 정보를 받아오는 경우 Documents/inbox에 저장된다




참고자료

https://jinshine.github.io/2019/01/19/iOS/UserDefaults.1/
https://zeddios.tistory.com/435

profile
iOS Developer Student

0개의 댓글