iOS) Cache에 관하여

어흥·2024년 4월 2일
0

iOS

목록 보기
1/10
post-thumbnail

안녕하세요 오늘은 컴퓨터 구조적 측면에 대한 포스팅을 작성하려고 합니다.
iOSInterviewquestions
위 깃허브 내용을 기준으로 면접 준비와 cs 공부를 병행할 계획입니다. 다른 분들도 참고하시면 좋을 거 같아서요! 자 시작하겠습니다~

캐시(Cache)

캐시는 자주 사용하는 데이터나 값을 미리 복사해 놓는 임시 장소입니다. 특정 데이터에 접근하는 시간이 오래 걸리는 경우 혹은 다시 계산하는 시간을 세이브하고 싶은 경우에 사용됩니다.
예를 들어, 서버에서 이미지를 불러올때 이미지 URL을 받고 다시 해당 URL로 통신을 하는 식으로 이미지를 받아오는 것은 비효율 적입니다. 특히 이미지 크기도 크다고하면 더욱 효율적이지 않을 것입니다. 이때 캐시를 사용하면 됩니다!

메모리 계층 구조

메모리 계층 구조를 살펴보면 캐시는 래지스터와 주기억장치인 Main Memory 사이에 존재합니다. CPU가 필요로 하는 레지스터에 필요한 데이터가 없을 경우 MM에 데이터를 읽어오기 위해서 많은 시간을 기다려야 합니다. 이때 cache에 데이터를 미리 복사해 놓으면 접근 시간을 줄여 더 빠른 속도로 데이터에 접근할 수 있다.
메모리 계층 구조

캐시 구분하는 기준

  1. 클라이언트/서버
  • 클라이언트 캐시: 클라이언트 만의 local에 저장하는 캐시
  • 서버 캐시: 여러 클라이언트의 요청에 대해 저장하는 캐시
  1. 저장 장소
  • 메모리 캐시
  • 디스크 캐시: 앱 내부 디스크(UserDefaults, CoreData), 앱 외부 디스크
  1. 데이터가 저장되는 계층에 따른 구분
    레벨이 낮을수록 속도가 빠르고 용량이 작음
    • L1, L2, L3
  2. 읽기/쓰기
  • 읽기 캐시: 한번 읽은 데이터를 캐시 저장 후 read시 사용
  • 쓰기 캐시: 읽기 캐시 기능을 포함하고 write시 디스크에 바로 올리지 않고 캐시에 임시로 저장하여 추루 캐시 데이터를 모아 한번에 디스크 저장 (update할 때마다, 여러번 디스크에 저장할 필요 없음)

iOS 캐시

iOS에서 사용하는 캐시는 크게 2가지로 나눌 수 있습니다.

1. Memory Cache

대표적으로 NSCache가 있습니다.

  • iOS에서 자체적으로 제공해주는 캐시
  • App을 종료하면 캐시에 저장된 데이터가 사라짐
  • 처리속도가 빠르지만 저장 공간이 작음

2. Disk Cache

캐시에 저장할 데이터를 기기 내부에 아카이빙 하는 방식으로 App을 껐다가 켜도 데이터가 사라지지 않고 남아있습니다.
대표적으로 UserDefaults, CoreData, FileManager가 있습니다.

  • App을 삭제할 때 캐시에 저장된 데이터 삭제 혹은 보존 가능
    • UserDefault`사용하여 저장하면 App 삭제시 데이터도 같이 삭제됨
    • FileManager 사용하여 파일 경로에 이미지를 저장하면, App이 삭제되어도 캐시가 남아있게 됨(보통 파일 경로에 이미지 저장)
  • 메모리 캐시와 비교하면, 공간은 크고 처리속도는 느림(네트워크 통신보다는 빠름)
  • 사용 예시: 카카오톡 이미지나 동영상을 디바이스에 저장하지 않아도 앱에서 이미지를 확인할 수 있다. 이때 disk caching되어 앱을 종료했다가 다시 실행해도 볼 수 있다.

이미지 캐싱 방법

  1. 메모리 캐시에서 이미지를 검색
  2. 없는 경우, 디스크 캐시에서 이미지를 검색
  3. 없는 경우, URL에서 이미지를 비동기 로드
  4. 메모리 캐시와 디스크 캐시에 해당 이미지를 저장
  5. 다음 번 요청시에는 메모리 캐시에서 이미지를 불러옴
  6. 프로세스 재시작 이후의 요청에는 디스크 캐시에서 불러온 후 메모리 캐시에 추가

참고
[Swift] Cache
Cache

0개의 댓글