캐시란?

  • 자주 사용하는 데이터에 빠르게 접근할 수 있도록 데이터를 미리 복사해 놓은 고속 임시 저장소
  • 매번 느린 원본 저장소에서 가져오는 것보다 빠르게 접근할 수 있음
  • 주로 RAM같은 빠른 매체 사용. DB, 디스크, 네트워크처럼 느린 계층에 대한 접근 횟수 줄임

캐싱이란?

  • 자주 사용하는 데이터에 빠르게 접근할 수 있도록 데이터를 임시 저장소(메모리, 디스크)에 복사해서 보관하는 기술
  • 캐시 히트: 캐시에 해당 데이터가 있는 경우. 데이터가 반환됨
  • 캐시 미스: 캐시에 해당 데이터가 없는 경우. 원본을 데이터에서 복사해서 캐시에 저장.
  • 유의사항: 원본 데이터가 바뀌면 캐시도 갱신해야함.
  • 캐시 예시: CPU 캐시부터 웹 브라우저, 앱 이미지 캐시까지 컴퓨터 시스템 전반에서 쓰임
    • 브라우저 캐시: 웹페이지, 이미지, 스크립트 등을 로컬에 저장
    • CPU 캐시: 자주 쓰는 데이터를 RAM보다 빠른 캐시 메모리에 보관
    • 데이터베이스 캐시: 반복되는 결과를 메모리에 저장 ex Redis
    • CDN: 콘텐츠를 전 세계 서버에 분산 저장해 가까운 곳에서 제공

캐싱이 필요한 이유

  • 지역성의 원리 기반:
    • 시간 지역성: 방금 쓴 데이터는 곧 다시 쓸 가능성이 높음.
    • 공간 지역성: 특정 데이터 근처 데이터도 함께 참조될 가능성이 큼.
  • 성능 향상: 네트워크 요청이나 DB 조회는 밀리초 단위로 느리지만, 메모리 캐시는 나노초 수준으로 상대적으로 빠르게 접근 가능.
  • 비용 절감: 서버 부하와 네트워크 트래픽을 줄여 비용을 낮춘다.

장점과 단점

  • 장점
    • 응답 속도 향상을 통한 사용자 체감 성능 개선.
    • 원본 저장소(DB, API, 디스크, 네트워크)의 부하 감소 및 비용 절감.
  • 단점
    • 캐시와 원본 데이터 간 불일치(스테일 데이터) 문제.
    • 추가 메모리 사용, 캐시 구축·무효화 전략 설계 복잡도 증가

캐시 위치에 따른 캐싱 종류: 메모리 캐싱과 디스크 캐싱

  • 메모리 캐싱
    • 저장 위치: RAM
    • 휘발성: 앱이 종료되면 사라짐.
    • 용량: RAM의 용량이 제한적이라 많이 저장 못함.
  • 디스크 캐싱
    • 저장 위치: 저장소
    • 영구성: 앱을 종료해도 유지됨.
    • 용량: 메모리(RAM)에 비해 저장을 훨씬 더 많이할 수 있음.

Apple 플랫폼 개발에서의 캐싱 대상

  • 이미지
  • 일반 데이터
  • 구조화된 데이터
  • 네트워크 응답
  • 등등

Apple Platforms 개발에서 캐싱 계층 예시

  • 메모리 캐시(NSCache): 앱 실행 중 빠른 접근용, 메모리 부족시 자동 제거.
  • 디스크 캐시(FileManager): 앱 재시작해도 유지, 영속성 보장.
  • 네트워크 캐시: HTTP 응답 자체를 캐싱.

캐싱을 위한 도구, 방법들

NSCache

설명

  • Apple Platform에서 메모리 기반 캐싱을 위한 Foundation 프레임워크 클래스
  • 이미지, API 응답 등 자주 쓰이는 데이터를 메모리에 임시 저장
  • 재계산 비용을 줄이며 시스템 압박시 자동으로 항목 제거
특징
  • 자동 메모리 관리
  • Thread-safe
    • 다중 스레드 환경에서 lock 없이 안전하게 접근/수정 가능
    • GCD와 잘 맞음
  • 키 복사 안함
    • NSMutableDictionary와 달리 key 객체를 복사하지 않아 메모리 효율적.
    • NSString이나 AnyObject로 키사용

Dictionary

  • [swift-dictionary] 참고

FileManager

  • 디스크 캐시

UserDefault

CoreData

SwiftData

URLCache

King fisher (3rd Party)

SDWebImage (3rd Party)

캐시 메모리 캐싱 vs 메모리 캐싱 vs 디스크 캐싱

				 빠름			
                  │
    ┌─────────────▼─────────────┐
    │   CPU 캐시 메모리 캐싱        │  ← CPU가 RAM 데이터 캐싱
    │   (L1 / L2 / L3)          │
    └─────────────┬─────────────┘
                  │
    ┌─────────────▼─────────────┐
    │      메모리 캐싱             │  ← RAM에 저장장치 데이터 캐싱
    │   (NSCache, 이미지 캐시)     │
    └─────────────┬─────────────┘
                  │
    ┌─────────────▼─────────────┐
    │     디스크 캐싱              │  ← 저장장치에 네트워크 데이터 캐싱
    │   (URLCache, 파일 캐시)     │
    └─────────────┴─────────────┘
                  │
                 느림