Project/개발 업무

iOS 캐싱 로직 구현 전 디스크 분석

lgvv 2024. 12. 9. 00:39

iOS 캐싱 로직 구현 전 디스크 분석

 

앱에서 서버로 값을 받아온 뒤 캐싱해 두고, 사용자가 앱을 종료했다 다시 접속하면 캐싱된 값을 먼저 보여준 후 네트워크 응답이 도착하면 갱신하는 형태로 구현하고자 함.

 

UserDefaults, SwiftData, CoreData, Realm, FileManager 중에서 어떤걸 선택하는 것이 좋은지 궁금해서 비교해보기로 함.

  • UserDefaults: 간단한 값 저장용이라 이 용도엔 적합하지 않아 보임.
  • SwiftData: iOS 17이상이라서 현재 현실적으로 사용하기가 어려움.
  • CoreData: Realm이 있어서 굳이 써야하는지 의문이긴 함.
  • FileManager: 자주 변경되는 데이터라서 성능적으로 적합하지 않을 것 같음.
  • Realm: 12.24에 Realm 들어가보니까 디바이스 지원 중단한다는 것 같아서, 장기적으로 지원 끊기는거 아닐까 걱정.

 

그래서 CoreData와 FileManager만 간단하게 비교 분석해보고자 함.

  • 애플 문서에서는 FileManager가 블록 전체를 다시 쓰므로, 자주 변경되는 데이터에는 증분 변경에 최적화된 CoreData를 쓰라고 안내함.
  • https://rldd.tistory.com/723

 

 

Instruments 분석 이미지

두 가지가 얼마나 차이나는지 궁금해서 간단하게 비교해봄.

 

인스트루먼트 직접 확인하기

 

FileManager

쓰기 작업

  • write 안을 보면 파일시스템 블록 단위로 처리됨(APFS 기본 블록 4KB). 작은 변경이라도 블록 단위로 재기록되어 잦은 변경엔 비효율

 

쓰기 작업

 

읽기 작업

 

읽기 작업

 

CoreData

CoreData는 쓰기 후 읽기를 수행

 

CoreData