오늘의 질문
캐싱 전략에 대해서 설명해주세요.

📍 정답 확인

캐시란 ? 사용자의 입장에서 데이터를 더 빠르게, 더 효율적으로 액세스할 수 있는 임시 저장소를 말한다.

캐시는 성능 향상과 부하 감소를 목표로 한다. 이 때 캐시를 사용하는 양상이 서비스에 큰 영향을 끼치기 때문에 캐싱 전략을 이해하는 것은 매우 중요하다.


✔️ 캐싱 전략

읽기 전략 : Cache-aside(Lazy Loading)

애플리케이션이 데이터를 읽을 때, 캐시 히트(캐시 저장소에 데이터가 있는 경우) 시 캐시에서 데이터를 불러오며, 캐시 미스(캐시 저장소에 데이터가 없는 경우) 시 원본 데이터베이스에서 조회하여 반환하는 방식이다. 애플리케이션은 캐시 미스가 발생하면 해당 데이터를 캐시에 적재한다.

[ 장점 ]

1. 실제 요청된 데이터만 캐시에 저장되므로 불필요한 데이터 캐싱을 줄일 수 있다.
2. 캐시에 문제가 발생해도 애플리케이션은 데이터베이스에 접근할 수 있기에 서비스 장애가 발생하지 않는다.

[ 단점 ]

1. 캐시 미스가 발생하는 경우에만 데이터를 캐시에 적재하기 때문에 원본 데이터베이스와 같은 데이터가 아닐 수 있다.
2. 운영 초반에는 DB 에만 데이터가 존재하기 때문에 대량의 캐시 미스가 발생할 수 있어 데이터베이스 성능 저하가 발생할 수 있다.

👀 2번 단점은, 미리 DB 에서 캐시로 데이터를 밀어 넣어주는 cache warming 방법으로 해소할 수 있다.


쓰기 전략 : 읽기 전략의 단점 중 하나인 ‘캐시 불일치’ 문제를 해소할 수 있는 전략이다.


1️⃣ Write-through : DB 에 데이터를 저장할 때 cache 에도 같이 저장하는 방법이다.

캐시는 항상 최신 정보를 가진다는 장점이 있지만, 저장할 때 마다 두 단계 (DB, 캐시) 를 거쳐야 하기 때문에 상대적으로 느리다. 그리고 재사용하지 않는 데이터도 무조건 캐시에 넣어버리기 때문에 리소스 낭비를 초래할 수 있다.


2️⃣ Cache Invalidation : 원본 데이터에 변경이 생긴 경우 캐시 데이터를 만료시킨다.

Write-through 의 단점을 보완하는 전략이다.


3️⃣ Write Behind : 원본 데이터에 변경이 생긴 경우 캐시를 먼저 업데이트한 이후 원본 데이터를 변경한다.

원본 데이터와 캐시가 일시적으로 불일치할 수 있지만, 디스크 쓰기 작업을 비동기로 수행하여 성능을 개선할 수 있다.


🔖 참고자료

매일메일

캐시 전략 알고 써보자