---
# System prepended metadata

title: File System
tags: [복 & 면]

---

# File System
- 파일 시스템은 데이터 파일, 앱 및 운영 체제 자체와 연결된 파일의 영구 스토리를 처리합니다.
- APFS는 macOS, iOS, watchOS 및 tvOS의 기본 파일 시스템입니다.


### iOS 파일 시스템 정보
- iOS파일 시스템은 자체적으로 실행되는 앱에 맞춰져 있습니다. 시스템을 단순하게 유지하기 위해 iOS 디바이스 사용자는 파일 시스템에 직접 액세스 할 수 없으면 앱은 이 규칙을 따라야 합니다.

#### iOS표준 디렉터리: 파일 위치
- 보안안의 이슈로 샌드박스 디렉터리 내에 제한된다.
    - 샌드박스 안에 번들, 데이터, i클라우드 등등..
- 새로운 앱을 설치하는 동안 설치 관리자는 샌드박스 디렉터리 내에 앱에 대한 여러 컨테이너 디렉터리를 만듭니다. 각 컨테이너 디렉터리에는 특정 역활이 있습니다.
    - 번들 컨테이너 - 앱의 번들 저장
    - 데이터 컨테이너 - 사용자에 대한 데이터 저장
- 앱은 일반적으로 컨테이너 디렉터리 외부에서 액세스 하거나 파일을만드는 것이 금지됨


#### iOS 앱 디렉터리
- 샌드박스 환경: 각 앱은 독립된 파일 시스템을 갖는 샌드박스 환경에서 작동합니다
- 주요 디렉터리: Docunents, Library, tmp

1. Documents 디렉터리
    - 사용자가 생성하거나 수정할 수 있는 파일을 저장하는 곳입니다.
        - ex) 텍스트문서, 이미지 파일 등이 여기에 속합니다.
    - 이 디렉토리는 iTunes나 iCloud와 동기화될 수 있습니다, 즉 사용자가 만든 중요한 데이터를 저장하는 데 적합합니다.
    - 사용자가 텍스트 편집 앱에서 작성한 문서 파일을 저장하면 `Documents` 디렉터리에 저장됩니다.

2. Library 디렉터리
    - 앱의 설정이나 데이터를 저장하는 곳입니다. 
        - ex) 캐시나 데이터베이스 파일등이 속하게 됩니다.
    - `Library` 디렉토리는 iTunes나 iCloud와 동기화되지 않습니다, 즉 앱의 내부 작업에 필요한 데이터를 저장하는 데 사용됩니다.
    - 사용자의 선호도나 사용 이력을 저장하기 위해 사용하는 설정 파일이나 데이터 베이스를 `Library` 디렉토리에 저장합니다.

3. tmp 디렉터리
    - 임시적으로 사용되는 파일을 저장하는 곳입니다.
        - ex) 다운로드 중인 파일이나 작업중인 파일 등이 속하게 된다.
    - `tmp`디렉터리는 앱이 종료되거나 시스템이 필요하다고 판단하면 비워질 수 있습니다.
    - 앱이 파일 다운로드를 위해 임시 파일을 생성하고, 다운로드가 완료되면 해당 파일을 `Docunets` || `Libraty` 디렉터리로 이동 시키고 `tmp` 에서는 삭제 합니다.

- Swift에서는 `FileManager`클래스를 사용하여 이러한 디렉토리에 접근하고, 파일 관련 작업을 수행할 수 있습니다.  예를 들어, `FileManager` 클래스를 사용하여 `Documents` 디렉토리에 새파일을 생성하거나, 기존 파일을 읽고 수정하는 코드를 작성할 수 있습니다.

#### Swift 파일관리
- FileManager 클래스: 파일 및 디렉토리 관리에 사용되는 FileManager 클래스의 기능과 사용법.
    - 파일 작업: 파일 생성, 읽기, 수정, 삭제 등의 기본 작업 방법.
        - 코어데이터 처럼 CRUD를 통해서 쓴다.

#### 파일 보호 및 접근 제어?
- 시스템 권한 요청 처리
    - iOS 애플리케이션에서 Info.plist 파일을 통해서 권한을 요청해야 합니다. 사진 라이브러리에 접근하기 위해서는 Info.plist 에 NSPhotoLibraryUsageDescription을 추가해야 합니다.
- 사용자 권한 관리
    -  PHPhotoLibrary.authorizationStatus()를 활용한 사용자 권한 확인 및 요청.
    -  Keychain사용: Keychain 을 활용한 민감한 데이터를 안전하게 저장한다.