# 7월 21일 학습 활동 ## 🧏‍♂️ iOS의 캐싱에 대해서 알아봅시다. ### 1) NSCache와 URLCache는 어떤 차이가 있나요? - **NSCache** - 로컬에서 사용하는 캐시방법 - 다른 응용 프로그램에서 메모리가 필요한 경우 이러한 자동 제거 정책은 캐시에서 일부 항목을 제거하여 메모리 사용 공간을 최소화 - **URLCache** - 클라이언트의 요청에 의해서 맵핑되는 캐시 - 캐시 운용 정책이 존재함 - **차이점** - NSCache는 자동 제거 기능이 있지만, URLCache는 이러한 기능이 없어서 디스크 공간이 부족해질 때까지 캐시된 데이터를 유지함 <br> ### 2) 메모리 캐싱과 디스크 캐싱의 차이는 무엇일까요? - 1) RAM 메모리 - 임시적인 데이터 - 자주 업데이트 되는 데이터 - 작은 사이즈의 데이터 - 2) 디스크 캐시 - 항상 가지고 있어야하는 데이터 - 자주 업데이트 되지 않는 데이터 - 큰 사이즈의 데이터 >![](https://i.imgur.com/UAImxRL.png) [참고 - GitHub](https://github.com/FE-Lex-Kim/-TIL/blob/master/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/%EB%A9%94%EB%AA%A8%EB%A6%AC%20%EC%BA%90%EC%8B%9C%2C%20%EB%94%94%EC%8A%A4%ED%81%AC%20%EC%BA%90%EC%8B%9C.md) <br> ### 3) URLCache의 기본 캐시 정책은 무엇일까요? - case allowed - URLCache제한 없이 보관 이 가능합니다. - case allowedInMemoryOnly - 저장 URLCache이 허용됩니다. 그러나 스토리지는 메모리로만 제한되어야 합니다. - case notAllowed - URLCache메모리나 디스크에 저장하는 것은 어떤 방식으로도 허용되지 않습니다. ![](https://i.imgur.com/x5SxYWC.png) ### 4) URLRequest에서도 캐싱에 대한 설정을 해줄 수 있답니다. URLRequest의 기본 캐시 정책은 무엇인가요? - URL 로드 요청에 대한 기본 정책 - 1) 요청에 대해 캐시된 응답이 없으면 URL 로딩 시스템은 원래 소스에서 데이터를 가져옵니다. - 2) 요청에 대해 캐시된 응답이있고 그 응답이 매번 유효성을 다시 확인해야 한다고 표시하지 않고, 오래되지 않은 경우(만료 날짜가 지나지 않은 경우) URL 로딩 시스템은 캐시된 응답을 반환합니다. - 3) 캐시된 응답이 오래되었거나 재검증이 필요한 경우 URL 로딩 시스템은 리소스가 변경되었는지 확인하기 위해 원본 소스에 HEAD 요청을 보냅니다. - 4) 만약 변경이 됐으면 URL 로딩 시스템은 원본 소스에서 데이터를 가져옵니다. 변경이 안됐으면 캐시된 응답을 반환합니다. ![](https://i.imgur.com/zeX19eE.png) [URLCache - 기본정책?](https://developer.apple.com/documentation/foundation/nsurlrequest/cachepolicy/useprotocolcachepolicy) <br> ### 5) 캐시를 구현할 때 고려해야하는 캐시 운용 정책에는 어떤 것들이 있을까요? 1) 보안성 (캐시 접근 및 저장 관련) 2) 데이터 수명 3) 캐시 교체 정책 (Cache Replacement Policy) - 데이터 사용시간에 따른 교체 (사용시간 작은것 부터..) - LRU, FIFO, LFU 구조에 따라 교체 - Random, NUR, Optimal 등등... 4) 저장하는 시점에 따른 정책 - Write Through: 쓰기 요청 시 즉시 저장 - Write Back: 쓰기 요청 시 캐시에서만 이뤄지고 바로 저장되지 않고 추후 캐시에서 해당 사항이 끝날때 최종으로 한번에 변경사항 저장 [참고](https://green1229.tistory.com/57)