---
# System prepended metadata

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

---

# 활동학습1

### URLCache의 기본 캐시 정책은?

1. `allowed`: URLCache에 저장하는 것이 제한 없이 허용된다.
2. `allowedInMemoryOnly`: URLCache에 저장하는 것이 허용된다. 그러나 저장공간은 메모리로만 제한되어야 한다.
3. `notAllowed`: URLCache의 저장이 허용되지 않습니다.

### URLRequest에서도 캐싱에 대한 설정을 할 수 있습니다. URLRequest의 기본 캐시 정책은 무엇인가요?
- NSURLRequest.CachePolicy.useProtocolCachePolicy

#### URLRequest의 캐시 정책들
1. `useProtocolCachePolicy` : protocol 특성에 따른 기본 캐시정책 (서버에서 전달한 Cache-Control Header를 그대로 따름)
2. `reloadIgnoringLocalCacheData` : local 캐시를 무시하고 항상 네트워크에 접속하도록 설정하는 정책
3. `returnCacheDataDontLoad` : 네트워크에 접속하지 않고 항상 local 캐시를 사용하도록 설정하는 정책
4. `returnCacheDataElseLoad` : local 캐시를 확인하고 캐시가 없는 경우에만 네트워크에 접속하도록 설정하는 정책
    - `returnCacheDataElseLoad`정책을 사용할 경우 캐시에 데이터가 존재한다면 네트워크 상의 데이터가 업데이트됐음에도 클라이언트에 예전 데이터를 띄워줄 위험이 존재하기 때문에 캐시의 저장기간이 중요합니다.

5. `reloadIgnoringLocalAndRemoteCacheData` : protocol이 허용하는 한도 내에서 로컬과 서버단의 모든 캐시를 무시하는 정책
6. `reloadRevalidatingCacheData` : 원본 소스의 유효성을 검사할 수 있을 경우에만 캐시를 사용하는 정책

### NSCache와 URLCache는 어떤 차이가 있나요?
- NSCache는 메모리 캐시 형식이고, URLCache는 메모리/디스크 캐시 두 가지 방식 모두 활용 가능합니다.


### 메모리 캐싱과 디스크 캐싱의 차이는 무엇일까요?
- 메모리 캐싱: 데이터를 주로 RAM(랜덤 액세스 메모리)에 저장하는 것을 말합니다. 빠른 액세스 속도를 제공하지만, 앱이 종료되면 캐시된 데이터가 모두 삭제됩니다.
- 디스크 캐싱: 데이터를 디스크(하드 디스크 또는 SSD)에 저장하는 것을 말합니다. 영구적인 저장을 제공하므로 앱이 종료되어도 캐시된 데이터가 보존됩니다. 디스크에 저장하는 것은 메모리보다 느리지만, 데이터를 영구적으로 보존할 수 있다는 장점이 있습니다. URLCache는 메모리와 디스크 모두에 캐싱을 지원하므로, 네트워크 응답을 빠르게 반환하면서도 데이터를 영구적으로 저장할 수 있습니다.


### 참고자료
[🍏 Apple Developer Documentations: URLCache.CachePolicy](https://developer.apple.com/documentation/foundation/urlcache/storagepolicy)
[🍏 Apple Developer Documentations: NSURLRequest.CachePolicy](https://developer.apple.com/documentation/foundation/nsurlrequest/cachepolicy)


# 활동학습2

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