728x90
🔃 캐싱(Caching)
🧠 캐시란?
- Cache: 자주 사용하는 데이터를 미리 복사해 저장하는 임시 저장소
- 원본 데이터에 대한 접근 횟수를 줄여 성능을 향상
- Cache의 데이터는 언제든 사라질 수 있음 → 원본이 아님
🛠 캐시의 적용 효과
- 네트워크 지연 감소
- 서버 리소스 절약
- 병목 현상 감소
📌 원칙: 더 빠르고 값싸게 데이터를 가져올 수 있다면 캐시를 사용한다.
🧩 캐싱 관련 용어
용어 | 설명 |
---|---|
Cache Hit | 캐시에 데이터가 존재하여 바로 반환되는 경우 |
Cache Miss | 캐시에 데이터가 없어 원본에서 가져와야 하는 경우 |
Eviction Policy | 캐시 공간 확보를 위해 데이터를 삭제하는 정책 |
캐싱 전략 | 데이터를 언제/어떻게 캐시에 쓰고 읽을지 정하는 방식 (Cache-Aside, Write-Through 등) |
📚 캐싱 전략
1. Cache-Aside (Lazy Loading)
- 동작: 캐시에 먼저 접근 → 없으면 DB 조회 후 캐시에 저장
- 장점:
- 필요한 데이터만 캐시에 저장됨
- 캐시 미스가 발생해도 안정적
- 단점:
- 최초 접근 시 느림
- 캐시가 최신 데이터가 아닐 수 있음
📌 순서:
- Cache 읽기 시도
- 없으면 DB 조회
- 조회 결과를 Cache에 저장
2. Write-Through
- 동작: 데이터 쓰기를 Cache와 DB에 동시에 반영
- 장점:
- 캐시가 항상 최신 데이터로 유지됨
- 단점:
- 자주 사용되지 않는 데이터도 캐시됨
- 쓰기 속도 느려질 수 있음
📌 순서:
- Cache에 저장
- DB에도 저장
3. Write-Back
- 동작: Cache에만 쓰고 일정 주기로 DB에 동기화
- 장점:
- DB 부하 감소 (쓰기 집중 서비스에 적합)
- 단점:
- 캐시가 유실되면 데이터 손실 발생 가능
📌 순서:
- Cache에만 저장
- 주기적으로 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
'Server' 카테고리의 다른 글
롤링 배포 (Rolling Deployment) vs 블루-그린 배포 (Blue-Green Deployment) vs 카나리 배포 (Canary Deployment) (0) | 2024.08.26 |
---|---|
[Redis] Pub/Sub (0) | 2024.03.01 |
[Session] Spring Boot에서의 세션 관리 (0) | 2024.02.28 |
Session 이란? (0) | 2024.02.24 |
동시성 제어 (0) | 2024.02.18 |