모바일 앱의 문서 디렉토리 — 정의, 목적 및 저장소 구성 방법

저자: IT Sectr 게시일: 2026-03-14 읽는 시간: 10 분

애플리케이션 문서 디렉토리는 세션 간에 유지되고 백업에서 복원되어야 하는 사용자 파일의 영구 저장소입니다. Apple File System Programming Guide, 2026에 따르면, iOS에서 Documents 디렉토리는 캐시 및 임시 디렉토리와 달리 iCloud 백업에 자동으로 포함됩니다. 문서 디렉토리를 올바르게 사용하면 앱 업데이트나 재설치 시 사용자 파일이 손실되지 않습니다.

핵심 포인트

  • Documents Directory — 업데이트 및 백업 복원 중에도 유지되는 사용자 파일의 영구 저장소
  • iOS는 자동으로 Documents를 iCloud 및 iTunes 백업에 포함 — 재생성 가능한 데이터만 제외
  • Android에는 별도의 Documents 디렉토리가 없음 — context.filesDir이 수동 백업 관리와 함께 그 역할을 대신
  • 자동 저장 및 파일 버전 관리는 충돌 및 실수로 인한 덮어쓰기 시 데이터 손실 방지
  • 데이터 마이그레이션은 버전 업데이트 시 사용자 설정 및 파일 손실을 방지하기 위해 필수

애플리케이션 문서 디렉토리란?

문서 디렉토리는 애플리케이션 샌드박스 내의 특화된 저장소로, 사용자 파일을 영구적으로 저장하도록 설계되었습니다. 캐시와 달리, 이 디렉토리의 파일은 사용자에게 중요한 것으로 간주되어 공간이 부족해도 시스템이 삭제하지 않으며, 앱 업데이트 시 보존되고 기기 동기화 시 백업됩니다. iOS에서 Documents 디렉토리는 Sandbox 컨테이너의 일부이며 iCloud 백업에 자동으로 포함됩니다. Android에는 직접적인 등가물이 없으며, context.filesDir이 영구 파일용으로 존재하지만 내장 백업 메커니즘이 없습니다.

Android에서 문서 디렉토리와 내부 저장소의 차이는 미미합니다. 둘 다 앱 샌드박스에 있고, 둘 다 제거 시 삭제되며, 다른 앱에서 접근할 수 없습니다. 주요 차이점은 의미론적입니다. Documents Directory는 파일이 사용자에 의해 생성되거나 가져온 것이라고 가정하는 반면, 내부 저장소는 앱의 내부 파일(데이터베이스, 설정)을 포함할 수 있습니다. iOS에서는 차이가 더 큽니다. Documents는 자동으로 백업되지만 Library/Application Support는 그렇지 않습니다. 이는 저장소 전략에 영향을 미칩니다. Documents에는 사용자가 새 기기에서 복원하려는 것만 넣고, Application Support에는 앱이 다시 생성할 수 있는 내부 데이터를 넣습니다.

샌드박스 아키텍처는 다른 애플리케이션이 앱의 문서 디렉토리에 접근할 수 없도록 보장합니다. iOS에서는 탈옥 없이 다른 앱의 Documents에 접근하는 것이 불가능합니다. Android에서는 루트 액세스로 모든 앱의 filesDir을 읽을 수 있으므로, 민감한 데이터(토큰, 암호화 키)는 EncryptedSharedPreferences 또는 AndroidX Security 라이브러리의 EncryptedFile을 사용하여 추가로 보호해야 합니다.

문서 디렉토리에 저장되는 데이터

문서 디렉토리에는 사용자에게 가치가 있고 앱 재시작 또는 기기 복원 후에도 접근 가능해야 하는 데이터를 저장해야 합니다. 모든 파일이 이 디렉토리 저장에 적합한 것은 아니며, 선택은 데이터 유형과 사용 시나리오에 따라 다릅니다.

사용자 문서 및 파일

사용자 파일은 문서 디렉토리의 주요 콘텐츠입니다. 편집기에서 만든 텍스트 문서, 앱 카메라로 촬영한 이미지, 내보낸 PDF 보고서, 오디오 녹음, 메모 등이 될 수 있습니다. 이러한 각 파일은 사용자에 의해 또는 사용자의 요청에 따라 생성되며 언제든지 접근 가능해야 합니다. iOS에서 Documents의 파일은 시스템 Files 앱에 표시되어 사용자가 표준 파일 관리자를 통해 관리할 수 있습니다. Android에는 유사한 표시가 없으며, 앱 자체가 저장된 파일을 보기 위한 인터페이스를 제공해야 합니다.

데이터베이스 및 앱 설정

SQLite 데이터베이스와 설정 파일은 일반적으로 문서 디렉토리 근처에 저장되지만 그 안에는 저장되지 않습니다. iOS에서는 데이터베이스가 Library/Application Support에 배치됩니다. Files 앱에 표시되거나 별도로 백업되어서는 안 되기 때문입니다. Android에서는 데이터베이스가 기본적으로 /data/data/<package>/databases/에 Room 또는 SQLiteOpenHelper를 통해 생성됩니다. 데이터베이스에 사용자 콘텐츠(메모, 일기, 재무 기록)가 포함된 경우 시스템 백업을 보장하기 위해 filesDir에 배치할 수 있습니다. Room은 RoomDatabase.Builder 콜백을 통해 데이터베이스 저장을 위한 사용자 정의 디렉토리를 지정할 수 있습니다.

kotlin
val dbFile = File(context.filesDir, "user_database.db")

val db = Room.databaseBuilder<AppDatabase>(
    context,
    dbFile.absolutePath
).build()

내보내기 및 가져오기 데이터

사용자가 다른 앱에서 가져오거나 앱에서 내보내는 파일도 문서 디렉토리에 저장해야 합니다. iOS에서 UIDocumentPickerViewController를 통한 가져오기는 asCopy: true 매개변수를 사용할 때 자동으로 파일 복사본을 Documents에 배치합니다. Android에서 SAF 대화상자를 통한 가져오기도 앱 샌드박스에 파일 복사본을 만듭니다. 데이터를 내보낼 때(예: 연락처가 포함된 CSV 파일 생성), 먼저 파일을 Documents/filesDir에 저장한 다음 Share Sheet를 통해 사용자에게 공유 옵션을 제공합니다. 이렇게 하면 사용자가 전송 후 파일 저장을 잊어버려도 나중에 사용할 수 있도록 앱에 복사본이 남아 있습니다.

Android에서 문서 디렉토리 사용 방법

Android에서는 문서 디렉토리의 기능을 context.filesDir이 수행합니다. 또한 SD 카드에 context.externalFilesDir 디렉토리를 사용할 수 있지만 데이터 무결성을 보장하지는 않습니다. 이 디렉토리 작업의 주요 기술을 살펴보겠습니다.

filesDir을 통한 파일 접근 및 관리

filesDir은 Android에서 앱의 영구 파일을 위한 기본 디렉토리입니다. 앱 샌드박스에 위치하며 제거 시 완전히 삭제됩니다. File 인스턴스를 얻으려면 context.filesDir을 사용하며, /data/data/<package>/files/ 경로를 반환합니다. 파일을 생성하고 읽으려면 표준 Java/Kotlin File 작업 또는 파일 이름을 받아 FileInputStream/FileOutputStream을 반환하는 Context 메서드 openFileInput()openFileOutput()을 사용합니다. openFileOutput() 메서드는 파일이 아직 없으면 filesDir에 자동으로 생성하고 액세스 모드를 지정할 수 있습니다: MODE_PRIVATE(현재 앱만), MODE_APPEND(추가), 또는 MODE_WORLD_READABLE(더 이상 사용되지 않음, API 24+부터 미사용).

kotlin
val fileName = "report.pdf"
val content = "PDF content".toByteArray()

context.openFileOutput(fileName, Context.MODE_PRIVATE).use { stream ->
    stream.write(content)
}

val bytes = context.openFileInput(fileName).use { stream ->
    stream.readBytes()
}

Android 10+의 저장소 기능

Android 10+에서 Scoped Storage 모델은 filesDir에 영향을 주지 않습니다. 자체 샌드박스에 대한 전체 액세스 권한이 유지됩니다. filesDir 내의 모든 읽기 및 쓰기 작업에는 추가 권한이 필요하지 않습니다. 그러나 filesDir을 통해 다른 앱의 파일에 접근하려고 하면 예외가 발생합니다. 파일을 공유하려면 FileProvider를 사용합니다. FileProvider는 파일을 다른 앱으로 전송하기 위한 임시 콘텐츠 URI를 생성합니다. FileProvider는 AndroidManifest.xml에서 <provider> 태그를 통해 선언되고 XML 경로 파일에서 구성됩니다. 이는 앱 간 파일 전송을 위한 표준 메커니즘으로, 예를 들어 ACTION_SEND와 함께 Intent를 통해 이미지를 보낼 때 사용됩니다.

iOS에서 문서 디렉토리 사용 방법

iOS에서 Documents Directory는 특별한 상태를 가진 앱의 Sandbox 컨테이너 일부입니다. 이 디렉토리의 파일은 iCloud 백업에 자동으로 포함되고, Files 앱에 표시되며, App Store를 통한 앱 업데이트 시 보존됩니다.

문서 디렉토리 및 백업

Documents의 자동 백업은 iOS의 주요 이점입니다. 사용자가 기기를 iTunes에 연결하거나 iCloud Backup을 활성화하면 Documents/의 모든 파일이 백업에 복사됩니다. 새 기기에서 복원할 때 사용자는 추가 작업 없이 모든 파일을 얻습니다. 그러나 앱이 Documents에 많은 데이터를 저장하는 경우 이점이 단점이 됩니다. 백업 시간이 증가하고 iCloud 저장소가 빠르게 소진될 수 있습니다. 따라서 Documents에는 복원 시 사용자가 실제로 필요한 파일만 저장해야 합니다. 임시 파일, 캐시 및 재생성 가능한 데이터는 Caches 또는 Library/Application Support에 있어야 합니다. Apple은 isExcludedFromBackup 속성을 사용하여 인터넷에서 다시 다운로드할 수 있는 파일을 백업에서 제외할 것을 권장합니다.

swift
let fm = FileManager.default
let docsURL = fm.urls(
    for: .documentDirectory,
    in: .userDomainMask
).first!

let fileURL = docsURL.appendingPathComponent("notes.txt")
let text = "노트 내용"
try text.write(to: fileURL, atomically: true, encoding: .utf8)

iCloud Drive 및 기기 간 동기화

iCloud Drive를 사용하면 사용자의 기기 간에 Documents의 파일을 동기화할 수 있습니다. 동기화를 활성화하려면 앱이 NSDocument 또는 UIDocument API를 사용해야 하며, 이는 자동으로 버전 관리와 충돌 해결을 처리합니다. 대안적 접근 방식은 CloudKit과 함께 iCloud를 사용하는 것으로, 동기화에 대한 더 유연한 제어를 제공하지만 CloudKit Dashboard에서 구성이 필요합니다. iCloud Drive를 사용할 때는 편집 충돌을 올바르게 처리하고(병합 또는 마지막 쓰기 우선) 앱 인터페이스를 통해 사용자에게 동기화 상태를 알려야 합니다. iCloud는 즉각적인 동기화를 보장하지 않으며, 파일 크기와 연결 품질에 따라 지연이 수초에서 수분까지 발생할 수 있습니다. 중요한 데이터의 경우 트랜잭션 쓰기와 버전 관리를 사용하여 충돌 시 파일의 이전 버전을 복원할 수 있도록 합니다.

캐시 디렉토리와의 차이점 및 모범 사례

올바른 선택 Documents Directory와 Cache Directory 사이의 선택은 사용자 데이터 저장소의 신뢰성을 결정합니다. 선택 오류는 데이터 손실(중요한 파일이 캐시에 저장된 경우) 또는 백업 오버플로(임시 파일이 Documents에 저장된 경우)로 이어집니다.

기준Documents DirectoryCache Directory
데이터 무결성 보장높음 — 시스템이 삭제하지 않음낮음 — 지워질 수 있음
백업 (iOS)iCloud에 자동 백업백업되지 않음
사용자 표시 (iOS)Files 앱에 표시숨겨짐
업데이트 시 정리정리되지 않음정리될 수 있음
권장 크기제한 없음, 설정으로 제어최대 100–200 MB
데이터 유형사용자 파일임시 재생성 가능 데이터

모범 사례 문서 디렉토리 사용에는 몇 가지 핵심 규칙이 포함됩니다. 첫째, 이 디렉토리에서 파일을 삭제하기 전에 항상 사용자 확인을 받으세요. 캐시와 달리 문서를 삭제하면 사용자 콘텐츠가 돌이킬 수 없이 손실될 수 있습니다. 둘째, 파일 버전 관리를 구현하세요. 기존 파일을 덮어쓸 때 _backup 접미사를 사용하여 이전 버전을 저장하거나 스냅샷 메커니즘을 사용합니다. 셋째, 사용자에게 문서 디렉토리에서 파일을 보고, 이름을 바꾸고, 삭제하고, 내보낼 수 있는 인터페이스를 제공합니다. iOS에서는 Documents의 파일이 자동으로 Files에 표시됩니다. Android에서는 자체 파일 관리자를 구현하거나 타사 라이브러리를 사용해야 합니다.

앱 업데이트 시 데이터 마이그레이션에 특별히 주의하세요. 새 버전이 파일 저장소 구조를 변경하는 경우(예: 데이터를 한 하위 디렉토리에서 다른 디렉토리로 이동하거나 파일 형식을 변경), 업데이트 후 첫 실행 시 일회성 마이그레이션을 구현하세요. 데이터 스키마 버전 번호를 SharedPreferences에 저장하고 일치하지 않으면 마이그레이션을 실행합니다. 마이그레이션이 완료되기 전에 이전 파일을 삭제하지 마세요. 오류가 발생해도 사용자가 데이터를 잃지 않아야 합니다. 마이그레이션에 형식 변환이 포함된 경우(예: JSON에서 SQLite로 전환), 원본 파일을 마이그레이션 날짜와 함께 별도 디렉토리에 백업으로 저장합니다. Apple Human Interface Guidelines의 권장에 따라 사용자는 업데이트 후 30일 이내에 앱 설정을 통해 변경 사항을 되돌릴 수 있어야 합니다.

자주 묻는 질문

iOS에서 Documents와 Library/Application Support의 차이점은?

Documents는 Files 앱에 표시되고 iCloud에 자동 백업됩니다. Application Support는 Files에 표시되지 않으며 기본적으로 백업되지 않습니다. 사용자에게 표시할 필요가 없는 앱의 내부 데이터에는 Application Support를 선택하세요.

계정 삭제 시 문서 디렉토리를 정리해야 하나요?

네, 계정을 삭제할 때 해당 계정과 관련된 모든 로컬 파일을 정리하는 옵션을 사용자에게 제공하세요. “모든 로컬 데이터를 삭제하시겠습니까?”라는 대화상자를 표시하고 어떤 파일이 영향을 받는지 나열하세요. 이는 GDPR 요구사항이며 App Store 및 Google Play 정책을 준수하는 것입니다.

문서 디렉토리에서 새 기기로 파일을 전송하는 방법은?

iOS에서는 iCloud 또는 iTunes 백업에서 기기를 복원하기만 하면 Documents의 파일이 자동으로 복원됩니다. Android에서는 Google Drive Backup API를 사용하여 filesDir의 파일을 백업하거나 클라우드 서비스를 통한 내보내기를 구현하세요.

사용자가 실수로 문서 디렉토리에서 파일을 삭제할 수 있나요?

iOS에서는 사용자가 Files 앱을 통해 파일을 삭제할 수 있습니다. Android에서는 앱의 인터페이스를 통해서만 삭제가 가능합니다. 실수로 인한 데이터 손실을 방지하기 위해 삭제 후 30일 이내에 복원할 수 있는 문서 휴지통을 구현하는 것이 좋습니다.

앱 업데이트 시 파일 무결성을 어떻게 보장하나요?

추가 조치가 필요하지 않습니다. iOS와 Android는 App Store 또는 Google Play를 통한 업데이트 시 문서 디렉토리를 자동으로 보존합니다. 단, 저장소 구조를 변경하는 경우 설정에서 스키마 버전 번호를 확인하여 새 버전의 첫 실행 시 데이터 마이그레이션을 구현하세요.

요약

  • Documents Directory — 사용자 파일의 영구 저장소, 시스템 정리로부터 보호되며 iOS에서 iCloud를 통해 백업
  • iOS는 자동으로 Documents를 백업하고 Files 앱에 표시하며 기기 복원 시 콘텐츠 복원
  • Androidcontext.filesDir을 등가물로 사용 — 업데이트 시 파일이 보존되지만 내장 백업 메커니즘 없음
  • 문서 디렉토리에는 사용자 파일, 내보낸 데이터 및 사용자 콘텐츠가 포함된 데이터베이스를 저장 — 앱 재설치 후에도 유지되어야 하는 모든 것
  • 캐시, 임시 파일 및 재생성 가능한 리소스는 Cache Directory에 저장하여 백업 과부하 및 시스템 정리 시 캐시되지 않은 데이터 손실 위험 방지
  • 데이터 마이그레이션은 버전 업데이트 시 필수: 스키마 버전 확인, 데이터 마이그레이션 실행, 롤백을 위해 이전 버전 백업 유지
  • 문서 휴지통을 30일 보관 기간으로 구현하여 사용자 파일의 우발적 손실을 방지하고 HIG 및 Material Design 요구사항 충족

턴키 방식의 모바일 애플리케이션을 개발해 드립니다

IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.

프로젝트 논의

더 읽어보기