---
# System prepended metadata

title: 참고 자료

---

- 캐시란 무엇이고 어떤 역할일까?
    - memoization
    - 저장소
    - 소프트웨어적, 하드웨어적으로 캐시를 구현할 수 있음.
    - 자주 사용하는 데이터를 임시 저장
    - 하드웨어적 캐시는 CPU와 메인 메모리 사이의 속도차이를 완충하기 위해서 중간에 메인 메모리의 데이터를 미리 복사해두는 임시적인 메모리
- 몇 가지 기준으로 캐시를 구분해볼까?
    - 캐시는 클라이언트 서버 구분이 있나?
        - 있음.
    - 캐시는 어디어디에 저장할 수 있을까?
        - CPU, RAM, DISK
- 캐시를 구현할 때 고려해야 하는 캐시 운용 정책에는 어떤것들이 있을까?
    - Cache의 수명?
    - 보안?
    - 캐시 교체 정책(FIFO...)
- NSCache의 용도는?🤔
    - NSCache 객체를 사용하여 생성 비용이 많이 드는 임시 데이터가 있는 객체를 임시로 저장합니다. 이러한 객체를 재사용하면 해당 값을 다시 계산할 필요가 없기 때문에 성능상의 이점을 얻을 수 있습니다.
- URLCache의 기본 캐시 정책은?
    - URLCache.StoragePolicy

|종류|기능|
|:---:|:---:|
|allowed|제한 없이 허용한다.|
|allowedInMemoryOnly|메모리에만 허용한다.|
|notAllowed|디스크, 메모리 그 어디에도 저장할 수 없다.|

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

|캐시 정책|캐시|원본소스|
|:---:|:---:|:---:|
|useProtocolCachePolicy|프로토콜을 따른다|프로토콜을 따른다|
|reloadIgnoringLocalCacheData|로컬 캐시만 무시됨|알수 없다|
|reloadRevalidatingCacheData|유효성 검사 성공시 사용|유효성 검사 실패시 접근|
|reloadIgnoringLocalAndRemoteCacheData|로컬 및 서버등의 모든 캐시 데이터 무시|무조건 사용한다.|
|returnCacheDataDontLoad|무조건 사용한다. 없으면 실패한다.|접근하지 않음|
|returnCacheDataElseLoad|접근한다.|필요시 접근한다.|

![](https://i.imgur.com/lzo5440.png)

- NSCache와 URLCache는 어떤 차이가 있나요?
    - 어떤 저장방식을 사용하는지에 대한 차이점이 존재합니다.
        - NSCache: 메모리 사용
        - URLCache: 메모리, 로컬 저장소 사용

- NSCache
    - in-memory 캐시 제공
    - 일반적으로 이미지 또는 데이터의 크기에 비례하는 크기를 할당
    - NSCache는 퇴거 프로세스가 순서대로 진행될 것이라고 보장 X
    - 캐시된 개체는 다음 실행에서 존재 X
    - 생성 비용이 많이 드는 일시적인 데이터가 있는 개체에 대한 성능 및 자동 제거 기능
- URLCache
    - URL 로드 요청에 대한 Response 캐싱을 구현합니다.
    - in-memory와 on-disk 캐시를 제공한다.
    - in-memory와 on-disk 부분의 크기를 조작할 수 있습니다.
    - 캐시 데이터가 지속적으로 저장되는 경로를 제어할 수도 있습니다.
- 차이점
    - 모든 네트워크 데이터 관리의 경우 데이터 캐싱을 위해 NSCache가 아닌 URLCache를 사용해야 함
    - 왜냐하면, URLCache는 메모리 내 캐시와 디스크 캐시 모두에 있으며 데이터에 메모리 청크를 할당하지 않기 때문
        - 청크 -> 하나의 번들 파일을 효과적으로 다루기 위해 여러가지의 파일로 다시 나누는 것
    - 메모리 내 크기와 디스크 크기를 정의할 수 있어 더 유연
    - URLCache는 시스템의 디스크 공간이 부족해질 때까지 캐시된 데이터를 유지합니다.

# 참고 자료

[URLCache.StoragePolicy](https://developer.apple.com/documentation/foundation/urlcache/storagepolicy)
[URLRequest.CachePolicy](https://developer.apple.com/documentation/foundation/nsurlrequest/cachepolicy)
[NSCache와-URLCache의-차이](https://velog.io/@apwierk2451/NSCache와-URLCache의-차이)

https://stackoverflow.com/questions/53624466/urlcache-ios-storecachedresponse-works-asynchronously-how-to-catch-the-compl