Temporary Directory — 정의, 임시 파일 및 스토리지 관리

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

Temporary Directory(tmp)는 iOS 앱 샌드박스 내의 디렉토리로, 현재 앱 세션 내에서만 필요한 매우 단기적인 데이터를 저장합니다. Apple File System Programming Guide(2024)에 따르면, 시스템은 앱이 종료되거나 기기가 재시작될 때 tmp를 지울 수 있습니다. Caches Directory와 달리 tmp의 임시 파일은 실행 간에 유지되지 않으며, 개발자는 디스크 공간을 낭비하지 않도록 사용 후 명시적으로 삭제해야 합니다.

핵심 요점

  • Temporary Directory — 현재 앱 세션에서만 필요한 데이터를 위한 디렉토리입니다.
  • iOS는 기기 재시작 또는 앱 종료 시 tmp를 지울 수 있습니다.
  • tmp의 파일은 iCloud 및 iTunes 백업에 포함되지 않습니다.
  • tmp 경로는 Swift 또는 Objective-C의 NSTemporaryDirectory()를 통해 가져옵니다.
  • 개발자는 사용 후 tmp에서 파일을 수동으로 삭제해야 합니다.

iOS에서 Temporary Directory란?

Temporary Directory(tmp라고도 함)는 iOS 앱 샌드박스 내의 디렉토리로, 수명이 현재 세션으로 제한된 데이터를 저장하도록 설계되었습니다. 모든 샌드박스 디렉토리 중 가장 수명이 짧은 스토리지입니다.

iOS는 중간 파일 저장이 필요한 작업을 위해 tmp를 제공합니다: Documents로 이동하기 전 파일 다운로드, 내보내기 전 임시 복사본 생성, 스트리밍 데이터 버퍼링. 작업이 완료된 후에는 임시 파일을 삭제해야 합니다.

Apple Developer Documentation(2024)에 따르면, tmp 디렉토리는 경로가 앱 실행 간에 변경될 수 있다는 점에서 독특합니다. iOS는 실행할 때마다 새로운 tmp 경로를 생성하며, 이를 통해 이전 세션의 데이터가 실수로 읽히지 않도록 보장합니다. 개발자는 실행 간에 tmp 경로를 저장해서는 안 됩니다.

중요한 점: Caches Directory에서는 데이터가 여러 실행에 걸쳐 유지될 수 있지만, tmp는 장기적으로 세션 간 데이터를 보존하지 않습니다. 진정으로 임시적인 데이터를 저장하는 가장 신뢰할 수 있는 방법입니다.

Temporary Directory 경로 가져오는 방법

Swift에서 tmp 경로를 가져오려면 전역 함수 NSTemporaryDirectory() 또는 FileManager.temporaryDirectory를 사용합니다. 이는 모든 샌드박스 디렉토리 중 가장 간단한 API입니다.

swift
import Foundation

// Option 1: NSTemporaryDirectory()
let tempDir = NSTemporaryDirectory()
let tempFile = (tempDir as NSString)
    .appendingPathComponent("export_temp.pdf")

// Option 2: FileManager.temporaryDirectory (URL)
let tempURL = FileManager.default.temporaryDirectory
let exportURL = tempURL.appendingPathComponent("export_temp.pdf")

Objective-C는 동일한 전역 함수 NSTemporaryDirectory()를 사용합니다. 결과는 앱의 임시 디렉토리에 대한 전체 경로가 포함된 문자열입니다.

objective-c
@import Foundation;

NSString *tempDir = NSTemporaryDirectory();
NSString *tempFile = [tempDir stringByAppendingPathComponent:@"temp_data.bin"];

다른 디렉토리와의 주요 차이점: NSTemporaryDirectory()는 도메인이나 검색 마스크를 지정할 필요가 없으며 전역 함수입니다. 하지만 다음 실행 시 경로가 변경될 수 있으므로 UserDefaults나 다른 영구 저장소에 저장하지 마십시오.

tmp에 저장할 데이터

Temporary Directory는 엄격하게 정의된 시나리오를 위해 설계되었습니다. 개발자는 종종 tmp를 Caches와 혼동하여 한 세션 이상 지속되어야 하는 데이터를 tmp에 배치합니다. 올바른 사용 사례를 살펴보겠습니다.

내보내기 시 중간 파일

데이터 내보내기 중에 생성되는 파일: 이메일로 보내기 전 보고서의 임시 복사본, 업로드 전 압축 아카이브, 형식 변환을 위한 중간 파일. 내보내기가 완료되면 파일을 삭제해야 합니다.

스트리밍 데이터 버퍼링

실시간으로 처리되는 오디오, 비디오 또는 스트리밍 데이터를 기록하기 위한 임시 버퍼. 예를 들어, 영구 저장소에 저장하기 전 음성 녹음 또는 스트리밍 중 비디오 스트림 버퍼링.

시나리오디렉토리이유
보내기 전 PDF 내보내기tmp보낸 후 파일 불필요
이미지 캐시Caches세션 간 유용
이동 전 파일 다운로드tmp중간 저장
세션 로그tmp세션 중에만 관련
문서 편집tmp저장 전 버전

데이터가 지금 여기서만 필요하다면 tmp를 사용하세요. 다음 세션에서 유용할 수 있다면 Caches를 사용하세요. 데이터 손실이 허용되지 않는다면 Documents를 사용하세요.

임시 파일의 라이프사이클

iOS는 tmp의 라이프사이클을 다른 샌드박스 디렉토리와 다르게 관리합니다. 이 주기를 이해하는 것은 앱에서 적절한 파일 저장소를 설계하는 데 중요합니다.

앱이 실행될 때마다 iOS는 tmp에 새 경로를 할당할 수 있습니다. 이전 경로는 접근할 수 없게 되지만, 물리적 파일은 기기가 재시작될 때까지 디스크에 남아 있을 수 있습니다. 이것이 Apple이 세션 간에 tmp 경로를 저장하지 말 것을 강력히 권장하는 이유입니다.

Apple Tech Note TN2150(2024)에 따르면, 시스템은 다음 경우에 tmp를 지울 수 있습니다: 기기 재시작, 디스크 공간 제한 도달, 앱 오프로드(Offload). Caches와 달리 tmp는 여러 실행에 걸쳐 데이터를 저장하도록 설계되지 않았으며, 샌드박스에서 가장 신뢰할 수 없는 스토리지입니다.

개발자는 FileManager.removeItem(at:)을 사용하여 작업 완료 후 임시 파일을 명시적으로 삭제해야 합니다. tmp에서 삭제되지 않은 파일은 축적되어 디스크 공간을 낭비하며, iOS는 가까운 시일 내에 자동 정리를 보장하지 않습니다.

Temporary Directory vs Caches Directory

tmpCaches를 비교하면 개발자가 저장소 디렉토리를 선택할 때 올바른 결정을 내리는 데 도움이 됩니다. 잘못된 선택은 조기 데이터 손실이나 불필요한 공간 소비로 이어질 수 있습니다.

매개변수Temporary DirectoryCaches Directory
수명현재 세션만세션 간 (보장 없음)
경로 변경실행마다 변경될 수 있음안정적인 경로
자동 정리재시작 시, 오프로드 시공간 부족 시
개발자 삭제작업 후 필수한도 초과 시 권장
사용중간 작업영구 캐시

실용적인 규칙: 생성 후 몇 초 또는 몇 분 내에 삭제될 데이터에는 tmp를 선택하세요. 세션 간에 몇 시간 또는 며칠 동안 유지하는 것이 유용하지만 재생성할 수 있는 데이터에는 Caches를 선택하세요.

tmp 작업 모범 사례

Temporary Directory 작업에는 규율이 필요합니다. tmp의 데이터는 수명이 짧고 축적되면 공간 낭비로 이어질 수 있으므로 개발자는 몇 가지 주요 사례를 따라야 합니다.

사용 후 항상 파일 삭제

FileManager.removeItem(at:)은 임시 파일 작업이 완료된 직후 호출해야 합니다. 오류가 발생하더라도 삭제를 보장하려면 Swift에서 defer를 사용하세요.

swift
import Foundation

let tempURL = FileManager.default
    .temporaryDirectory
    .appendingPathComponent("upload_temp.dat")

defer {
    try? FileManager.default.removeItem(at: tempURL)
}

// Work with temp file
try "temporary data".write(to: tempURL, atomically: true)
// ... file operation ...
// defer executes when scope exits

장기 데이터에 tmp 사용하지 않기

생성 후 1시간 후에도 데이터가 필요할 수 있다면 Caches 또는 Application Support에 저장하세요. tmp는 몇 분 동안의 작업을 위해 설계되었으며 저장용이 아닙니다.

이러한 규칙을 따르면 임시 파일이 축적되지 않고, 디스크 공간이 효율적으로 사용되며, 앱이 iOS 파일 시스템 정리 시나리오를 올바르게 처리할 수 있습니다.

자주 묻는 질문

앱 실행 중에 Temporary Directory의 경로가 변경될 수 있나요?

일반적으로 단일 세션 내에서는 경로가 변경되지 않지만, iOS는 이를 보장하지 않습니다. 드물게 앱이 백그라운드에서 포그라운드로 전환될 때 시스템이 tmp를 변경할 수 있습니다. 따라서 Apple은 경로를 변수에 저장하는 대신 필요할 때마다 NSTemporaryDirectory()를 호출할 것을 권장합니다.

tmp에서 파일을 삭제하지 않으면 어떻게 되나요?

파일이 축적되어 디스크 공간을 차지합니다. iOS는 기기 재시작 시 tmp를 지울 수 있지만, 그때까지 앱은 디스크 공간을 낭비하게 됩니다. 상당히 축적되면 사용자는 저장소 설정에서 앱이 많은 공간을 차지하고 있음을 확인할 수 있습니다.

tmp는 임시 데이터 암호화에 적합한가요?

네, 민감한 데이터가 포함된 임시 파일에는 NSFileProtectionComplete와 함께 DataProtectionType을 사용할 수 있습니다. 하지만 파일이 현재 세션 내에서만 읽히고 삭제될 경우 암호화가 과도할 수 있습니다. 데이터 유형에 따라 암호화 필요성을 평가하세요.

충돌 없이 tmp에서 고유한 파일 이름을 만드는 방법은?

고유 식별자를 생성하려면 ProcessInfo.processInfo.globallyUniqueString 또는 UUID().uuidString을 사용하세요. FileManager는 tmp에서 자동으로 고유한 이름을 생성하는 urlForCreatingTemporaryFile 메서드도 제공합니다. 이는 병렬 쓰기 시 충돌이 없음을 보장합니다.

tmp의 크기가 App Store 리뷰에 영향을 미치나요?

간접적으로 — 네. Apple은 앱이 디스크에 저장하는 총 데이터 양에 주의합니다. tmp에 삭제되지 않은 기가바이트의 파일이 있는 경우 리뷰어가 앱을 거부할 수 있습니다. tmp의 권장 제한은 항상 100 MB를 초과하지 않는 것입니다. 정기적으로 tmp를 정리하고 FileManager를 통해 크기를 확인하세요.

요약

  • Temporary Directory(tmp) — 수명이 현재 앱 세션으로 제한된 데이터를 위한 디렉토리입니다.
  • tmp 경로는 실행 간에 변경될 수 있으므로 영구 저장소에 저장하지 마십시오.
  • 시스템은 기기 재시작 또는 앱 오프로드 시 tmp를 지울 수 있습니다.
  • tmp의 파일은 iCloud 및 iTunes 백업에 포함되지 않습니다.
  • Caches Directory와 달리 tmp는 세션 간 저장용이 아닙니다.
  • 개발자는 FileManager.removeItem을 사용하여 임시 파일을 명시적으로 삭제해야 합니다.
  • 작업 결과에 관계없이 임시 파일 삭제를 보장하려면 Swift에서 defer를 사용하세요.

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

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

프로젝트 논의

더 읽어보기