iOS 캠프 TIL - 2021.02.04 목

Updated:

캠프 공지

  • 방학끝나고 수요일 2시에 1인 인디개발자 특강
  • 3월 1일 수업합니다~

학습활동 - 캐시

  • 캐시란 무엇이고 어떤 역할일까?
  • 몇 가지 기준으로 캐시를 구분해볼까?
    • 캐시는 클라이언트 서버 구분이 있나?
    • 캐시는 어디에 저장할까?
    • 또 다른 기준이 있나?
  • 캐시를 구현할 때 고려해야 하는 캐시 운용 정책에는 어떤것들이 있을까?
  • iOS 환경에서 캐싱하는 방법에는 무엇무엇이 있을까?
  • 캐시란 무엇이고 어떤 역할일까?
    • 캐시(cache)는 데이터나 값을 미리 복사해 놓는 임시 장소를 가리킨다. 캐시는 캐시의 접근 시간에 비해 원래 데이터를 접근하는 시간이 오래 걸리는 경우나 값을 다시 계산하는 시간을 절약하고 싶은 경우에 사용한다. 캐시에 데이터를 미리 복사해 놓으면 계산이나 접근 시간 없이 더 빠른 속도로 데이터에 접근할 수 있다. - by wiki
    • iOS에서는 기기 안에 있는 임시 저장소라고 생각할 수 있을 것 같다. 네트워크 통신에서 캐시를 사용한다면 한번 다운 받은 데이터에 대해서 다시 다운로드 받지 않아도 될 것 같다!
  • 몇 가지 기준으로 캐시를 구분해볼까?
    • 캐시는 클라이언트 서버 구분이 있나?
      • 클라이언트와 서버의 캐시는 구분되어질 수 있을 것 같다.
      • 클라이언트는 클라이언트만의 local에 저장할 수 있는 캐시가 있을 것이고,
      • 서버는 여러 클라이언트의 요청에 대해 저장할 수 있는 캐시가 있을 수 있다.
    • 캐시는 어디에 저장할까?
      • 디스크 - 앱 내부 디스크(UserDefaults, CoreData), 앱 외부 디스크
      • 메모리
      • Alamofire 같은 외부 라이브러리는 캐시 기능이 구현되어있다.
    • 또 다른 기준이 있나?
      • 데이터가 저장되는 계층에 따라 구분? (비용, Hit rate, 속도) e.g. L1캐시, L2캐시, L3캐시,,
      • Read Only Cache or ReadWrite Cache
        • (읽기 캐시: 한번 읽어들인 내용을 캐시에 저장 후 다음에 읽을때 사용,
        • 쓰기 캐시: 읽을때뿐 아니라, 쓸때에도 디스크에 바로 쓰지 않고 캐시에만 임시로 써두는것으로 쓴 내용을 변경 시 디스크에 두번 쓸 필요가 없고 변경된 내용을 모아 한번에 저장)
  • 캐시를 구현할 때 고려해야 하는 캐시 운용 정책에는 어떤것들이 있을까?
    • 보안 e.g. 캐시에 접근하는 측면 or 캐시에 저장할때의 측면
    • 데이터의 수명 (해당 데이터가 유효한지 유효하지 않은지)
    • Cache Replacement Policy
    • 데이터의 사용시간(사용시간이 적은 것부터 교체)
    • LRU(Least Recently Used) : 가장 오래전에 참조된 것을 교체
    • FIFO : 들어온 순서대로 가장 먼저 들어온 것을 교체
    • LFU(Least Frequently Used): 데이터의 사용횟수(사용횟수가 적은 것부터 교체)
    • Random, NUR, Optimal,,, 등등 정책 존재
    • https://m.blog.naver.com/PostView.nhn?blogId=babyj2005&logNo=221508257824&proxyReferer=https:%2F%2Fwww.google.com%2F
    • 데이터 Coherence(일치성), 즉 cache 변경사항을 MM에 저장하는 시점
    • write through 정책 : 쓰기 요청시 바로 MM에 기록
    • write back 정책 : CPU에서 메모리에 대한 쓰기 요청시 캐시에서만 작업하고 그 변경 사실을 바로 MM에 기록하지 않고, 캐시에서 해당 내용이 제거될 때 최종적으로 해당 블록을 한번만 MM에 기록해준다. by https://richong.tistory.com/85
  • iOS 환경에서 캐싱하는 방법에는 무엇무엇이 있을까?
    • memory cache : NSCache활용. 기기 종료시 캐시에 저장된 데이터 삭제됨. LRU 캐시를 딕셔너리로 구현해서 사용할 수도 있음.
    • disk cache: 기기 안에 저장이 되어있는데 구현 방법에 따라서 (UserDefault, CoreData 등에 저장하면) 앱을 삭제할 때 해당 내용이 삭제 될 수도있고, 그렇지 않게 구현(파일 경로에 저장)하면 앱이 삭제되어도 캐시가 남아있게 된다.
    • FileManager를 사용하여 Cache Directory에 접근하여 자체 디렉터리를 만들어 관리
    • ETag를 이용하여 디스크 캐시를 제대로 활용할 수 있음 (서버에서 ETag기능을 지원해야함)by https://nsios.tistory.com/58
  • 캐시된 데이터가 업데이트 됐는지 서버에 확인하는 방법?
    • ETag
    • 메타데이터 비교

Leave a comment