Application Support: 설정 저장소 및 Core Data

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

Application Support는 iOS 앱 샌드박스의 디렉토리로, 앱 작동에 필요한 보조 데이터를 저장하도록 설계되었지만 사용자가 직접 생성하지는 않습니다. Apple File System Basics(2024)에 따르면, 이 디렉토리는 설정 파일, Core Data SQLite 데이터베이스, 캐시된 문서 및 앱이 자체적으로 생성하는 기타 데이터에 최적화되어 있습니다. Documents Directory와 달리 Application Support는 iTunes File Sharing에 표시되지 않으며 사용자가 직접 액세스할 수 없어 서비스 데이터가 실수로 삭제되는 것을 방지합니다.

핵심 사항

  • Application Support — 앱이 자체 작업을 위해 생성하는 데이터용 디렉토리로, 사용자용이 아닙니다.
  • Application Support의 파일은 제외 플래그가 설정되지 않은 한 자동으로 iCloud 및 iTunes에 백업됩니다.
  • 디렉토리 경로는 NSApplicationSupportDirectory 또는 FileManager.urls(for: .applicationSupportDirectory)입니다.
  • Core Data는 기본적으로 SQLite 데이터베이스를 Application Support에 배치합니다.
  • 사용자는 Files 또는 iTunes를 통해 Application Support에 직접 액세스할 수 없습니다.

iOS에서 Application Support란?

Application Support는 iOS 앱 샌드박스의 디렉토리로, 앱이 자체 작업을 위해 생성하고 사용하는 데이터를 저장하도록 설계되었지만 사용자 문서는 아닙니다. 설정, 데이터베이스, 캐시된 메타데이터 및 기타 보조 파일의 기본 위치입니다.

iOS는 Application Support를 Documents(사용자 데이터)와 Caches(임시 데이터) 사이의 중간 계층으로 지정합니다. Application Support의 파일은 비교적 영구적일 수 있지만 사용자가 직접 액세스할 수 없어야 합니다 — 이것이 Documents Directory와의 차이점입니다.

Apple Developer Documentation(2024)에 따르면, Application Support는 Core Data SQLite 데이터베이스, Realm 파일, JSON/plist 형식의 설정, 다운로드한 참고 자료 및 앱이 사용하지만 사용자가 명시적으로 생성하지 않은 기타 데이터를 저장하기 위한 권장 위치입니다.

중요: 기본적으로 Application Support는 iCloud 및 iTunes 백업에 포함됩니다. 앱이 이 디렉토리에 다시 생성할 수 있는 대량의 데이터(예: 다운로드한 가이드)를 저장하는 경우, 해당 파일에 isExcludedFromBackup 플래그를 설정해야 합니다.

Application Support 경로 가져오기

Swift에서는 FileManager.urls(for: .applicationSupportDirectory)를 통해 Application Support Directory의 경로를 가져옵니다. Apple은 데이터 격리를 위해 Application Support 내에 앱 이름의 하위 디렉토리를 생성할 것을 권장합니다.

swift
import Foundation

let fileManager = FileManager.default
guard let appSupportURL = fileManager.urls(
    for: .applicationSupportDirectory,
    in: .userDomainMask
).first else { return }

// Create app subdirectory
let bundleID = Bundle.main.bundleIdentifier ?? "com.example.app"
let appDir = appSupportURL.appendingPathComponent(bundleID)
try fileManager.createDirectory(
    at: appDir,
    withIntermediateDirectories: true
)

Objective-C는 NSApplicationSupportDirectory와 함께 NSSearchPathForDirectoriesInDomains를 사용합니다. Swift와 마찬가지로 앱 이름의 하위 디렉토리를 생성하는 것이 좋습니다.

objective-c
@import Foundation;

NSArray *paths = NSSearchPathForDirectoriesInDomains(
    NSApplicationSupportDirectory,
    NSUserDomainMask,
    YES
);
NSString *appSupportPath = paths.firstObject;
NSString *appDir = [appSupportPath stringByAppendingPathComponent:@"com.example.app"];

첫 번째 실행 시 Application Support 디렉토리가 존재하지 않을 수 있습니다 — createDirectory(at:withIntermediateDirectories:)를 사용하여 생성해야 합니다. 이것이 시스템이 자동으로 생성하는 Documents Directory와의 차이점입니다.

Application Support에 저장할 데이터

Application Support는 앱이 작업에 사용하는 광범위한 데이터에 적합합니다. 이 디렉토리에 적절한 데이터를 선택하면 파일 시스템 구성이 개선되고 백업이 간소화됩니다.

Core Data 및 Realm 데이터베이스

Core Data의 SQLite 파일은 기본적으로 Application Support에 생성됩니다. Realm도 데이터베이스를 이 디렉토리에 배치할 것을 권장합니다. 이렇게 하면 사용자 문서가 앱의 내부 데이터베이스에서 분리됩니다.

설정 파일

앱 설정, Feature Flags, 캐시된 사용자 메타데이터(인증 토큰 제외 — 해당 항목에는 Keychain 사용)가 포함된 JSON, plist, XML 파일.

데이터 유형Application Support대안
SQLite Core Data예 (기본)
설정 .plist / .jsonUserDefaults (간단한 경우)
다운로드한 참고 자료Documents (사용자용인 경우)
앱 로그조건부Caches (로그용)
인증 토큰아니요Keychain

선택 기준: 데이터가 에 의해 생성 및 사용되고, 사용자가 아닌 경우, 그리고 실행 간에 유지되어야 하는 경우 — Application Support가 적합한 장소입니다.

Core Data와 Application Support

Core Data는 Application Support의 주요 소비자 중 하나입니다. NSPersistentContainer를 생성할 때 Core Data는 자동으로 SQLite 파일을 모델 이름을 기반으로 한 고유한 이름으로 Library/Application Support에 배치합니다.

Core Data가 파일을 저장하는 위치를 이해하는 것은 마이그레이션, 백업 및 디버깅에 중요합니다. 주요 파일: .sqlite(데이터), .sqlite-wal(Write-Ahead Log), .sqlite-shm(Shared Memory).

swift
import CoreData

// Create Core Data container
let container = NSPersistentContainer(name: "MyAppModel")

// Custom store URL directory
guard let appSupportURL = FileManager.default
    .urls(for: .applicationSupportDirectory,
        in: .userDomainMask).first else { return }

let storeURL = appSupportURL
    .appendingPathComponent("MyAppModel.sqlite")
let description = NSPersistentStoreDescription(url: storeURL)
container.persistentStoreDescriptions = [description]

CloudKit Core Data 동기화를 사용할 때 SQLite 파일은 Application Support에 남아 있고 CloudKit은 전송 계층으로 작동합니다. 이 경우 파일을 백업에서 제외하지 않는 것이 중요합니다 — 그렇지 않으면 장치 간 동기화가 중단될 수 있습니다.

Application Support vs Documents Directory

Application SupportDocuments의 차이는 iOS 앱 파일 구조를 올바르게 구성하는 데 가장 중요한 차이점 중 하나입니다. 잘못된 선택은 사용자가 실수로 중요한 앱 데이터를 삭제하거나 반대로 파일을 찾을 수 없게 만들 수 있습니다.

매개변수Application SupportDocuments Directory
사용자 액세스없음 (숨김)iTunes File Sharing을 통해
데이터 유형앱 서비스 데이터사용자 문서
iCloud 백업예 (기본)예 (기본)
삭제 위험낮음 (액세스 불가)중간 (사용자가 액세스 가능)
예시SQLite Core Data내보낸 PDF

간단한 규칙: 사용자가 파일을 보고 삭제할 수 있어야 하는 경우 — Documents를 사용합니다. 파일이 앱 작동에 필요하지만 사용자가 알 필요가 없는 경우 — Application Support를 사용합니다. 데이터를 다시 생성할 수 있는 경우 — Caches를 사용합니다.

Application Support 모범 사례

Application Support로 작업하려면 다른 샌드박스 디렉토리와 구분되는 몇 가지 특징을 고려해야 합니다. 이러한 모범 사례를 따르면 데이터 손실, 마이그레이션 문제 및 예기치 않은 앱 동작을 방지할 수 있습니다.

첫 실행 시 항상 디렉토리 생성

Documents와 달리 Application Support는 첫 실행 시 존재하지 않을 수 있습니다. withIntermediateDirectories: true 매개변수와 함께 createDirectory(at:withIntermediateDirectories:)를 사용하여 전체 하위 디렉토리 체인이 생성되도록 보장합니다.

Bundle Identifier로 하위 디렉토리 사용

Application Support 내에 Bundle Identifier의 하위 디렉토리를 생성합니다. 이렇게 하면 앱의 데이터가 다른 앱의 데이터와 격리되고(샌드박스가 이미 격리를 제공하지만) 제공자 변경 시 마이그레이션이 간소화됩니다.

swift
import Foundation

enum AppSupport {
    static func ensureDirectory() throws -> URL {
        let fm = FileManager.default
        let baseURL = try fm.url(
            for: .applicationSupportDirectory,
            in: .userDomainMask,
            appropriateFor: nil,
            create: true
        )
        let appDir = baseURL
            .appendingPathComponent(Bundle.main.bundleIdentifier ?? "default")
        try fm.createDirectory(at: appDir, withIntermediateDirectories: true)
        return appDir
    }
}

이러한 모범 사례를 따르면 앱의 서비스 데이터가 올바르게 구성되고, 사용자의 실수로 인한 삭제로부터 보호되며, 백업에서 올바르게 복원됩니다.

자주 묻는 질문

Application Support Directory를 수동으로 생성해야 하나요?

네, Application Support는 앱 설치 시 자동으로 생성되지 않습니다. 시스템이 첫 실행 시 생성하는 Documents 및 Caches와 달리, Application Support는 개발자가 FileManager.createDirectory(at:withIntermediateDirectories:)를 사용하여 생성해야 합니다. 이는 일반적으로 application(_:didFinishLaunchingWithOptions:) 메서드에서 수행됩니다.

사용자가 실수로 Application Support에서 데이터를 삭제할 수 있나요?

아니요, 표준 iOS 인터페이스(Files, iTunes)를 통해 사용자는 Application Support에 액세스할 수 없습니다. 그러나 앱 자체가 삭제되면 Application Support를 포함한 전체 샌드박스가 완전히 제거됩니다. iCloud 백업은 복원 또는 수동 삭제까지 유지됩니다.

Application Support는 다운로드한 비디오 저장에 적합한가요?

사용자용으로 다운로드한 비디오의 경우, 사용자가 Files를 통해 파일을 관리할 수 있도록 Documents Directory를 사용하는 것이 좋습니다. 비디오가 앱의 내부 캐시의 일부인 경우(예: 오프라인 교육 콘텐츠), 큰 파일에 대해 isExcludedFromBackup 플래그를 설정하여 Application Support를 사용할 수 있습니다.

앱 업데이트 시 Application Support에서 데이터를 마이그레이션하려면 어떻게 해야 하나요?

Application Support 내에 하위 디렉토리의 버전 관리를 추가합니다. 업데이트 시 현재 데이터 버전을 확인하고 필요한 경우 새 하위 디렉토리를 만들고 이전 디렉토리는 롤백용으로 유지합니다. 모든 사용자가 새 데이터 버전으로 성공적으로 마이그레이션되었는지 확인한 후에만 이전 디렉토리를 삭제합니다.

Application Support의 크기가 앱 실행 속도에 영향을 미치나요?

간접적으로 — 네. Application Support에 수만 개의 작은 파일이 있는 경우 FileManager.enumerator가 초기화를 느리게 할 수 있습니다. Application Support의 파일 수를 제한(1000개 이하)하고 구조화된 데이터의 경우 여러 개별 파일 대신 데이터베이스(Core Data, Realm)를 사용하는 것이 좋습니다.

요약

  • Application Support — 사용자 직접 액세스용이 아닌 앱 서비스 데이터용 디렉토리입니다.
  • 디렉토리 경로는 FileManager.urls(for: .applicationSupportDirectory) 또는 NSApplicationSupportDirectory가 포함된 NSSearchPathForDirectoriesInDomains입니다.
  • 디렉토리는 첫 앱 실행 시 수동으로 생성해야 합니다.
  • Core Data는 기본적으로 SQLite 데이터베이스를 Application Support에 배치합니다.
  • 사용자는 Files 또는 iTunes를 통해 Application Support에 액세스할 수 없습니다.
  • Application Support의 파일은 isExcludedFromBackup이 설정되지 않은 한 iCloud에 백업됩니다.
  • 데이터 격리 및 쉬운 마이그레이션을 위해 Bundle Identifier로 하위 디렉토리를 생성합니다.

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

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

프로젝트 논의

더 읽어보기