🔹 1️⃣ 문제의 시작: 이미지를 선택했는데, 또 저장해야 한다고?
앱을 개발하다 보면,
사용자가 갤러리에서 이미지를 선택하거나 카메라로 사진을 찍는 기능을 구현할 때가 많습니다.
이때 흔히 드는 의문이 있죠 👇
“이미 사용자가 폰 안에 가지고 있는 이미지를 선택했는데,
그걸 FileManager로 또 저장하는 건 중복 저장 아닌가요?”
직관적으로는 맞는 말 같지만,
iOS의 파일 접근 구조를 이해하면 답이 완전히 달라집니다.
🔹 2️⃣ 전제: 선택한 이미지는 “앱의 것”이 아니다
사용자가 이미지를 선택하는 경로는 보통 두 가지입니다.
| 선택 방식 | 설명 | 저장 위치 |
| 📸 카메라 촬영 | 사용자가 새로 찍은 사진 | 임시 디렉토리 (tmp/) |
| 🖼 앨범에서 선택 (PHPicker) | 이미 저장된 사진을 선택 | Photos 앱(시스템 영역) |
즉, 사용자가 선택한 이미지는
"시스템이 관리하는 영역"에 있고,
“앱이 직접 소유하거나 수정할 수 없는 리소스”입니다.
🔹 3️⃣ 그래서 FileManager에 다시 저장해야 한다
UIImagePickerController나 PHPickerViewController를 통해 가져온 이미지는
앱 안에서 일시적으로 사용할 수 있는 UIImage 객체일 뿐이에요.
이건 메모리 상에만 존재하고,
앱을 종료하면 완전히 사라집니다.
Core Data나 Realm 같은 데이터베이스에 그대로 저장할 수도 없습니다.
그래서 이렇게 해야 합니다 👇
1. UIImage를 JPEG 또는 PNG 데이터(Data)로 변환
2. FileManager를 통해 앱의 전용 폴더(/Documents/...)에 저장
3. Core Data에는 이미지 파일의 경로(String) 만 저장
이 과정을 통해 이미지가 앱의 “소유 데이터”가 되는 거예요.
🔹 4️⃣ 중복 저장처럼 보여도, 사실은 영역이 다르다
겉으로 보기엔 “같은 이미지가 한 번 더 저장된다”고 느껴질 수 있지만,
iOS 입장에서는 완전히 다른 영역이에요.
| 구분 | 관리 주체 | 저장 위치 | 접근 권한 |
| 사용자의 원본 사진 | 시스템 (Photos) | /var/mobile/Media/DCIM/... | ❌ 앱 직접 접근 불가 |
| FileManager 복제본 | 앱 | /Documents/EmotionDiaryImages/... | ✅ 앱 전용 접근 가능 |
즉,
Photos 앱의 이미지는 “사용자 소유”,
FileManager 이미지는 “앱 소유”입니다.
이건 중복이 아니라 “권한이 다른 두 공간에 존재하는 독립 복제본”이에요.
✅ 결론
📌 FileManager에 이미지를 다시 저장하는 건 중복이 아니라,
앱이 이미지 데이터를 ‘직접 소유’하기 위한 필수 과정입니다.
Photos의 이미지는 사용자의 영역이고,
FileManager의 이미지는 앱의 영역입니다.
Core Data에는 이미지를 저장하는 대신,
FileManager에 저장된 경로(String) 만 기록하는 게
가장 효율적이고, 안정적인 설계입니다.
'감정일기(가칭)' 카테고리의 다른 글
| 📸 Core Data에서 ‘이미지 피드 + 게시글 연결’ 기능을 설계하는 방법 (0) | 2025.10.16 |
|---|---|
| 🧩 Core Data에서 여러 이미지를 저장하는 두 가지 방법 비교 (0) | 2025.10.16 |
| 🚀 iOS에서 앱 로고를 보여주는 두 가지 방식 — LaunchScreen vs SplashViewController 완전 정리 (0) | 2025.10.15 |
| 📁 LemonLog 폴더 구조 정리 — MVVM + Application + Resource 구성 (0) | 2025.10.15 |
| 🚀 [2편] Git 커밋 vs 푸시 — 언제 해야 할까? (0) | 2025.10.14 |