[SwiftUI] 이미지 캐시 구현
iOS file System
sandbox
iOS는 보안을 위해 앱 설치시 os내부 설치 프로그램이 그 앱에 자체 독립 공간(sandbox)을 생성한다. (sandbox) 내부에는 각 역할을 가진 컨테이너 디렉터리들이 생성된다. 즉 각 iOS App은 자체 독립돈 공간 (sandbox)를 가지고 이 공간에서 앱 data와 파일을 관리하고, 다른 App에서 Access 하지 못하도록 보장한다. 각 App의 file, data는 App의 Container 내에서만 Access 가능한다. 또한 iOS는 특정 메커니즘을 사용해 앱 사이의 통신을 지원하며, 제한된 방식으로 상호작용 할 수 있다.(ex: url Scheme)
또한 root 권한이 없는 상태에서 App이 실행되므로 보안을 높이는 역할을 하고, 사용자에게 권한 요청을 통해(연락처 요청..) 승인이 안될 시 해당 기능을 사용할 수 없다.
특징
- 앱 격리
- 파일 시스템 제한
- 앱 간 통신
- 보안성
- 권한 관리
Bundle Container
앱의 번들을 소유하고 있다. 앱과 앱을 실핼할 수 있는 이미지, icon, storyboard등 리소스들이 모두 포함되어 있다. 이 폴더는 읽기 전용이라 쓰기가 불가능하며 변조 방지를 위해 이 디렉토리는 설치 시 서명된다.
Data Contaier
App과 사용자를 위한 데이터를 담고 있다.
Cache
기기 안에 자주 사용되는 데이터나 값을 미리 저장하여, 빠르게 접근 가능한 임시 저장소다. 네트워크를 통해 이미지를 받고 뷰를 그리고, 갱신이 된다면 네트워크를 통해 다시 불필요한 리소스를 사용하게 되는데 이러한 자원 낭비를 해결하기 위해 이미지 캐시는 앱개발에서 필수적이다.
이미지 캐시 구현
url을 통해 이미지를 받아오면 이미지를 캐시로 저장하여 view를 다시 그릴 때 네트워크를 통해 이미지 데이터를 불러올 필요 없도록 개발 진행.
Memory storage와 Disk storage를 생성
-> Memory storage(NSCache): iOS에서 지원해주는 캐시, key, value 쌍을 저장, 기기 전원을 종료하면 사라진다.
Disk Storage
-> Cache Directory로 폴더를 만들어서 사용.
플로우
- Memory storage(NSCache)에 해당 이미지가 존재하는지 확인 후 없으면 Disk Storage에 해당 경로에 이미지가 있는지 체크를 한 후 네트워크 통신을 하여 가져오고, 각 Storage에 저장한다.
Leave a comment