Server

[Caching] 캐싱의 원리 와 목적

Raconer 2024. 2. 29. 00:41
728x90

🔃 캐싱(Caching)


🧠 캐시란?

  • Cache: 자주 사용하는 데이터를 미리 복사해 저장하는 임시 저장소
  • 원본 데이터에 대한 접근 횟수를 줄여 성능을 향상
  • Cache의 데이터는 언제든 사라질 수 있음 → 원본이 아님

🛠 캐시의 적용 효과

  • 네트워크 지연 감소
  • 서버 리소스 절약
  • 병목 현상 감소

📌 원칙: 더 빠르고 값싸게 데이터를 가져올 수 있다면 캐시를 사용한다.


🧩 캐싱 관련 용어

용어 설명
Cache Hit 캐시에 데이터가 존재하여 바로 반환되는 경우
Cache Miss 캐시에 데이터가 없어 원본에서 가져와야 하는 경우
Eviction Policy 캐시 공간 확보를 위해 데이터를 삭제하는 정책
캐싱 전략 데이터를 언제/어떻게 캐시에 쓰고 읽을지 정하는 방식 (Cache-Aside, Write-Through 등)

📚 캐싱 전략

1. Cache-Aside (Lazy Loading)

  • 동작: 캐시에 먼저 접근 → 없으면 DB 조회 후 캐시에 저장
  • 장점:
    • 필요한 데이터만 캐시에 저장됨
    • 캐시 미스가 발생해도 안정적
  • 단점:
    • 최초 접근 시 느림
    • 캐시가 최신 데이터가 아닐 수 있음

📌 순서:

  1. Cache 읽기 시도
  2. 없으면 DB 조회
  3. 조회 결과를 Cache에 저장

2. Write-Through

  • 동작: 데이터 쓰기를 Cache와 DB에 동시에 반영
  • 장점:
    • 캐시가 항상 최신 데이터로 유지됨
  • 단점:
    • 자주 사용되지 않는 데이터도 캐시됨
    • 쓰기 속도 느려질 수 있음

📌 순서:

  1. Cache에 저장
  2. DB에도 저장

3. Write-Back

  • 동작: Cache에만 쓰고 일정 주기로 DB에 동기화
  • 장점:
    • DB 부하 감소 (쓰기 집중 서비스에 적합)
  • 단점:
    • 캐시가 유실되면 데이터 손실 발생 가능

📌 순서:

  1. Cache에만 저장
  2. 주기적으로 DB에 반영

🧹 데이터 제거 정책

캐시 공간이 부족할 때 어떤 데이터를 제거할지 결정

  • Expiration: TTL(Time-To-Live)을 설정해 일정 시간 후 자동 삭제
  • Eviction Algorithm:
    • LRU (Least Recently Used): 가장 오래 사용되지 않은 데이터 삭제
    • LFU (Least Frequently Used): 가장 적게 사용된 데이터 삭제
    • FIFO (First In First Out): 가장 먼저 들어온 데이터 삭제

⚙️ Spring Boot 캐시 어노테이션

어노테이션 설명
@Cacheable 메소드 실행 전 캐시 존재 여부 확인 후 캐시 반환 or 저장 (Cache-Aside 방식)
@CachePut 메소드 실행 후 결과를 캐시에 무조건 저장
@CacheEvict 메소드 실행 후 캐시에서 해당 키 삭제

Redis 또는 Caffeine 등 다양한 Cache Provider와 함께 Spring Cache 추상화를 활용할 수 있습니다.

728x90