캐시 전략 결정 요인
- 캐시할 데이터 종류
- 캐시할 데이터 크기
- 데이터 액세스 패턴
데이터 액세스 패턴이란?
데이터가 어떻게 쓰이고 읽히는지를 말한다.
- 쓰기 작업이 많고 읽기 작업은 적은가? (예: 시간별 로그)
- 한 번 쓰인 후 여러 번 읽히는가? (예: 사용자 프로필)
- 결과가 항상 고유한가? 즉, 동일한 요청이라도 매번 다른 결과가 나올 수 있는가? (예: 검색 쿼리는 사용자의 위치나 시간 등에 따라 검색 결과가 달라질 수 있음)
읽기 전략 1 - 캐시 어사이드(Cache-Aside)
- 가장 일반적으로 사용됨
- 앱이 캐시/DB와 직접 통신함
- 캐시와 DB 사이에는 연결이 없음.
- 캐시와 DB의 싱크를 위해 일반적으로 TTL(Time to Live)를 사용한다.
캐시 어사이드(Cache-Aside) 프로세스
1. 앱이 캐시를 확인
2. 데이터가 캐시에 있으면 읽음 (캐시 히트)
3. 데이터가 캐시에 없으면 (캐시 미스) DB에서 데이터를 읽고 반환 후 캐시에 저장함.
캐시 어사이드(Cache-Aside)가 적합한 케이스
- 읽기 중심일 때.
- 특정 조건에서만 캐시를 사용해야 하는 경우 (예: 실시간성이 비교적 중요한 데이터)
- 캐시 만료 정책을 애플리케이션에서 유연하게 조정하고 싶은 경우
- Memcached와 Redis가 널리 사용됨
- 캐시 failure에 대한 대응이 잘됨. 캐시 클러스터가 다운되면 앱이 DB를 직접 읽으면 되기 때문. (하지만 부하가 피크일 때는 응답 시간이 매우 길어지고, 최악의 경우에는 DB까지 다운될 수 있음)
읽기 전략 2 - 읽기 주도형 캐시 전략 (Read-Through)
캐시에 응답이 저장되어 있으면 이것을 반환하고, 그렇지 않으면 캐시 제공자가 데이터베이스에 갔다 와서 데이터를 저장한 뒤 반환하는 전략. cache-aside 전략과의 차이점은 캐싱 로직이 앱이 아니라 앱 외(라이브러리나 캐시 제공자)에 있다는 것이다.
읽기 주도형 캐시 전략 (Read-Through)이 적합한 케이스
- 뉴스 기사와 같이 한 번 쓰이고 여러번 읽히는 읽기 중심일 때 적합
- 데이터가 자동으로 캐싱되는 것이 유리한 경우
참고 자료
'시스템 디자인' 카테고리의 다른 글
CAP 정리란? (0) | 2025.02.15 |
---|---|
캐시 쓰기 전략과 피크에 강한 캐싱 전략 (1) | 2025.02.13 |
캐싱의 정의와 똑똑하게 캐싱하기 (2) | 2025.02.12 |