---
# System prepended metadata

title: Cache/NSCache/URLCache
tags: [학습활동]

---

## 활동학습1
### 01. URLCache의 기본 캐시 정책은?
- `allowed` : `URLCache`에 저장하는 것은 제한 없이 허용한다.
- `allowedInMemoryOnly` : `URLCache`에 저장하는 것이 허용됩니다. 그러나 스토리지는 메모리로만 제한되어야 합니다.
- `notAllowed` : `URLCache`의 저장은 메모리나 디스크에 어떤 방식으로도 허용되지 않습니다.
3개중에 알맞게 쓰면된다 누가? 너가!(개발자)
아나 칸넘기고있는데 바로 나와지뿌네 젠장 머고 아무도 없네 코드 누가 올리노
### 02. URLRequest에서도 캐싱에 대한 설정을 할 수 있습니다. URLRequest의 기본 캐시 정책은 무엇인가요?
- `NSURLRequest.CachePolicy.useProtocolCachePolicy`
    1. 요청에 대해 캐시된 응답이 없으면 URL 로딩 시스템이 원본 소스에서 데이터를 가져온다.
    2. 그렇지 않고 캐시된 응답이 매번 유효성을 다시 검사해야 한다고 표시하지 않고 캐시된 응답이 오래되지 않은 경우(만료 날짜가 지난 경우) URL 로딩 시스템은 캐시된 응답을 반환한다.
    3. 캐시된 응답이 오래되었거나 재검증이 필요한 경우 URL 로딩 시스템은 원래 소스에 HEAD 요청을 보내 리소스가 변경되었는지 확인한다.
    4. 그렇다면 URL 로딩 시스템은 원래 소스에서 데이터를 가져옵니다. 그렇지 않으면 캐시된 응답을 반환한다.
    ![](https://hackmd.io/_uploads/HJcQ02Osh.png)


### 03. NSCache와 URLCache는 어떤 차이가 있나요?
- NSCache: 인-메모리 캐싱
- URLCache는: 인-메모리 캐싱, 온-디스크 캐싱

### 04. 메모리 캐싱과 디스크 캐싱의 차이는 무엇일까요?
 - 메모리 캐시 -> iOS에서 자동으로 제공해주것?
     - NSCache 사용가능?
     - 처리속도 빠르지만 저장 공간이 작다
     - App을 끄면 캐시에 저장된 내용이 사라짐

 - 디스크 캐시 -> 
     - 저장할 데이터를 기기 내부에 아카이빙 하는 방식 App을 껐다가 켜도 데이터가 사라지지 않는다(유저디폴트, 키체인?)
     - UserDefault를 사용해 간단하게 저장하면, App 삭제시 데이터도 같이 삭제됨(App삭제시에도 남길려면 키체인?)
     - FileManager를 통해서 사용 가능
     - 저장공간은 비교적 크지만, 파일 입출력으로 인해 처리속도가 메모리 캐시보다 느림 

#### 🔗 참고링크
- [Developer Apple - Accessing Cached Data](https://developer.apple.com/documentation/foundation/url_loading_system/accessing_cached_data)
- [Developer Apple - URLCache.StoragePolicy](https://developer.apple.com/documentation/foundation/urlcache/storagepolicy)
- [Developer Apple - URLRequest.CachePolicy](https://developer.apple.com/documentation/foundation/urlrequest/cachepolicy)

## 활동학습2
### 01. 지난 주에 진행했던 URLSession 으로 테이블뷰에 이미지를 로드하는 예제 코드에 캐시를 적용시켜 봅시다.

