Swift iOS파일 시스템 구조

반응형
728x90
반응형
 
Introduction

  iOS App을 개발할 때, 데이터를 저장하기위해서 DB를 이용하겠지만, 그전에 App내부에서 임시로 저장되는 데이터부터, 다운받게되는 데이터 등 관리를 해야합니다. 이에 대해 애플의 개발 가이드라인의 자료를 먼저 살펴보고자 합니다. 그리고 다음 포스팅에서는 SwiftUI 코드를 이용하여 소스코드를 만들어보려고 합니다. 
 
 
파일 시스템 기초 (File system basics)

  파일 시스템은 데이터파일, 앱, 운영체제와 관련된 파일들을 관리합니다. 따라서 파일 시스템은 모든 프로세서에서 사용하는 기본 리소스 중에 하나입니다. 애플에서 사용하는 파일시스템 HFS+방식에서 APFS으로 변경되어 macOS, iOS, watchOS, tvOS에서 사용되고 있습니다. APFS는 iOS 10.3 이상 및 macOS의 하이시에라(High Sierra)이상에서 사용가능합니다. 
 
파일 시스템의 구조는 iOS 및 macOS는 비슷하지만, 각 시스템에서 사용하는 앱과 사용자 데이터를 구성하는 방법에는 차이가 있습니다. 그래서 App을 개발하기 이전에 파일 시스템의 구성 및 코드에 적용되는 규칙에 대해 먼저 숙지할 필요가 있습니다. 
 

 

 

 
iOS파일 시스템(About the iOS File System)

  iOS파일 시스템은 내부관리시스템에 의해 관리되고 있습니다. 이에 따라 사용자는 iOS기기에 직접적으로 엑세스 불가하고, 개발한 앱은 관리시스템의 규칙에 따라야합니다. 
 
 
iOS Standard Directories: Where Files Reside

 
(An iOS app operating within its own sandbox directory)
 
  iOS 앱은 보안상의 이유로 파일 시스템의샌드 박스 디렉토리에서 각 관리됩니다. 각 디렉토리는 다음과 같이 구성되어있습니다. 
  • 번들 컨테이너
  • 데이터 컨테이너
  • 추가 컨테이너 디렉토리(iCloud)
 
iOS 개발된 앱은 (번들, 데이터, 추가 컨테이너) 디렉토리 외부의 파일에 접근하거나 생성하는 것은 금지되도록 되어있습니다. 예외사항으로는 개발 된 앱이 public system interface를 사용하여 사용자의 연락처 또는 음악과 같은 항목에 엑세스하는 경우입니다.  이런 예외사항의 경우 시스템 프레임 워크 헬퍼 앱(the system frameworks use helper apps)을 사용하여 수정/저장하는 작업을 수행할 수 있습니다. 
 
 
파일 시스템은 상위 테이블과 같이 구성되어있습니다. 이에 대해 각각 하나씩 살펴보도록 하겠습니다.
 
AppName.app
  • 모든 앱과 리소스가 포함되어있음
  • 사용자는 직접적으로 앱 내부에 쓰기 불가
  • 디렉토리 내부 데이터는 iTunes 및 iCloud에 의해 백업 불가 
 
Document
  • 사용자가 직접 컨텐츠 데이터 저장 가능
  • 디렉토리 내부 데이터는 파일 공유를 통해 사용 가능 
  • 주의사항(폴더 내부는 공개되어도 되는 데이터만 포함 할 것)
  • 디렉토리 내부 데이터는 iTunes 및 iCloud에 의해 백업 가능 
 
Document/Inbox
  • 이 디렉터리를 사용하여 앱이 외부 엔터티에서 열도록 요청한 파일에 액세스가능
  • 앱은 디렉토리 내부의 파일의 읽기/삭제 가능
  • 앱은 디렉토리 내부의 파일의 신규생성 및 기존파일 덮어쓰기 불가
  • 디렉토리 내부 파일의 내용 변경시, 폴더의 위치를 다른곳으로 이동해야 가능함 
  • 디렉토리 내부 데이터는 iTunes 및 iCloud에 의해 백업 가능 
 
Library
  • 사용자 데이터 파일이 아닌 모든 파일의 최상위 디렉토리
  • iOS 앱은 일반적으로 애플리케이션 지원 및 캐시(Application Support and Caches) 하위 디렉토리를 사용
  • 사용자 지정 하위 디렉토리 생성 가능
    • 사용자에게 노출하지 않으려는 파일에 사용 함 
  • 디렉토리 내부 데이터는 iTunes 및 iCloud에 의해 백업 가능 
    • 캐시(Caches) 하위 디렉토리 제외
 
Tmp
  • 앱 실행 중 생성되는 임시파일을 사용 하는 장소
  • 더 이상 필요하지 않는 파일들은 수동(?) 제거 해야함. 시스템이 자동으로 폴더 내부 파일들을 자동으로 제거 가능 
  • 디렉토리 내부 데이터는 iTunes 및 iCloud에 의해 백업 불가 
 

 

 

 
앱 파일을 넣어야하는 위치(Where You Should Put Your App’s Files)

iOS기기에서 자동으로 동기화 및 백업 프로세스가 진행되기때문에 상위 설명한 폴더에 적절한 데이터를 사용해야 합니다. 특히, 대용량 파일을 사용할 경우 iTunes 및 iCloud에서 백업을 하게 될 경우, 시스템 전반적으로 느려지게 하는 문제가 발생하게 됩니다. 그리고 애플에서 제공하는 클라우드 공간에 불필요한 자료를 많이 소비할 수 있는 문제점이 발생하게 됩니다. 이에 따라 애플 개발자 홈페이지에 작성된 지침은 다음과 같습니다. 
 
  • Document 
    • 사용자 데이터 작성
      • 사용자에게 노출 할 수 있는 파일로 생성,가져오기, 삭제, 편집 가능한 파일
      • 예시
        • 드로잉 앱의 그래픽 파일 
        • 텍스트 편집기의 텍스트 파일 
        • 비디오/오디오 파일 
  • Application support
    • 일반적으로 앱이 실행하는데 사용되는 파일로서 사용자에게 비공개되어야하는 파일
    • 데이터 파일, 구성파일, 템플릿 등 
  • tmp
    • 장기간 지속 할 필요가 없는 데이터
    • 작업이 끝나면 해당 파일이 사용자 기기의 공간을 계속 사용하지 않도록 삭제 해야함
    • 시스템은 앱이 실행되지 않을 때 주기적으로 파일을 제거함 
  • Library/Caches
    • 임시 데이터(tmp)보다 오래 유지 해야하는 파일
    • 어플리케이션이 작동하기위해 캐시(caches)파일이 필요하지 않지만 성능 향상을 위해 캐시 데이터 사용 가능한 콘텐츠 데이터
    • 시스템은 자동으로 디스크 공간 확보를 위해 캐시데이터 삭제 가능하기때문에 앱이 필요에 따라 다시 생성하거나 다운로드할 수 있어야 함 
 
마무리

  다른 블로그를 보면서 이해안되던 내용들을 애플 개발자 홈페이지에 나온 가이드문서를 살펴보면서 조금 더 이해(?)가 되었습니다. 블로그를 포스팅하면서 저도 조금 더 보기 편하도록 요약 작성하였지만, 블로그를 보시는 분들에게 잘 전달 되는지 모르겠습니다. 인터넷을 조금 찾아보고, 블로그의 내용을 보면서 이해를 하는 것도 중요하지만, 개발자라면 공식가이드라인의 원문을 읽으면서 이해하는 것도 필요하다고 생각합니다. 이후 포스팅에서는 위의 내용대로 SwiftUI에서 사용할 수 있도록 소스코드를 만들어두려고 합니다. 만들어진 소스코드는 github에 공개할 예정인데 블로그를 이후에도 자주 방문해주시기 바랍니다. 감사합니다. 
 
p.s. macOS시스템은 이후 iOS app개발이 완료되면 따로 정리 예정. 
 
 
Reference

 
 
728x90
반응형

댓글

Designed by JB FACTORY