# 조사해보기 40분
### AlamofireImage 라이브러리와 Kingfisher 라이브러리의 캐시 정책은 어떤 차이가 있나요?
* AlamofireImage
이미지 다운로드 task를 간단하게 한다
-> 이미지를 다운로드하고, 동시에 NSCache를 사용해 한번 다운로드 받은 이미지를 캐시에 추가할 수 있다. (NSCache는 메모리에 캐싱한다)
* Kingfisher
url로부터 이미지를 다운로드하고 memory cache와 disk cache에 보낸다.
(hybrid cache)
cache에 있는 이미지를 찾기 위해 cachekey를 이용한다.
---
### 각 라이브러리에서 캐시 기능을 지원하기 위해 활용하는 Cocoa Layer의 주요 기능(클래스, 구조체 등)은 무엇이 있나요?
* 메모리 캐싱
NSCache
URLCache
* 디시크 캐싱
FileManager
### 만약 라이브러리에서 on disk cache를 지원한다면, 캐시를 저장하는 디스크 영역은 어디인가요?
ios file system의 Library/cache file 안 ...?
User Default
CoreData
---
### 캐시를 구현할 때 고려해야 하는 캐시 운용 정책에는 어떤것들이 있을까?
1. 보안성(캐시 접근 및 저장 관련)
2. 데이터 수명
3. 캐시 교체 정책
- 데이터 사용시간에 따른 교체
- 교체 방식에 따라 교체
4. 저장하는 시점에 따른 정책
- 쓰기 요청 시 즉시 저장
- 쓰기 요청 시 캐시에서만 이뤄지고 바로 저장되지 않고 캐시에서 해당사항 끝날 때 최종적으로 한번에 변경사항 저장
---
### NSCache의 용도는?
> mutable collection you use to temporarily store transient key-value pairs that are subject to eviction when resources are low
>
#### key-value 형태의 데이터를 임시로 저장하는 데 사용할 수 있는 가변 컬렉션
: NSCache 객체를 사용하여 생성 비용이 많이 드는 일시적인 데이터 객체를 저장
→ 캐시가 시스템 메모리를 너무 많이 사용하지 않도록 자동 삭제 정책을 가짐
→ 캐시를 잠글(lock) 필요 없이 별도 스레드들에서 캐시 항목을 추가하고, 삭제하고 검색 가능함
→ 안에 들어간 키 오브젝트를 복사하지 않는다
---
### URLCache의 기본 캐시 정책은?
URLCache : An object that maps URL requests to cached response objects.
NSURLRequest.CachePolicy.reloadIgnoringLocalCacheData
: 초기 자원으로 부터 URL load는 로드되어야 한다.
NSURLRequest.CachePolicy.returnCacheDataDontLoad
: 시간이나 기간 등이 만료되지 않으면 기존의 캐시 데이터를 사용하고 만약 캐시된 데이터가 없다면 load를 실패한다.
NSURLRequest.CachePolicy.returnCacheDataElseLoad
: 시간이나 기간 등이 만료되지 않으면 기존의 캐시 데이터를 사용하고 만약 캐시된 데이터가 없다면 기존의 초기 자원으로 부터 로드한다.
NSURLRequest.CachePolicy.useProtocolCachePolicy
: 특정 URL load request가 있다면 프로토콜 구현에 의해 정의된 캐싱 로직을 사용한다.
---
# 해보기 30분
### 지난 주 구현했던 테이블뷰 이미지 로드 예제에 Cache 기능을 구현해봅니다
캐시처리 구현
1. 이미지가 memory cache(NSCache)에 있는지 확인하고 원하는 이미지가 없다면
2. disk cache(UserDefault 혹은 기기Directory에있는 file형태)에서 확인하고 있다면 memory cache에 추가해주고 다음에는 더 빨리 가져 올수 있도록 할 수 있어요 이마저도 없다면
3. 서버통신을 통해서 받은 URL로 이미지를 가져와야해요 이때 서버통신을 통해서 이미지를 가져왔으면 memory와 disk cache에 저장해줘야 캐시처리가 되겠죠?!
출처: https://nsios.tistory.com/58