DB/Redis

캐시(Cache)와 캐싱 전략

yeojinj 2023. 8. 8. 18:42
더보기
캐싱 읽기 전략에는 Look aside Cache (Lazy Loading), Read Through가 있고 
캐싱 쓰기 전략에는 Write Back (Write Behind), Write Through, Write Around가 있다. 
데이터 정합성 문제와 메모리를 고려해 캐싱 전략을 선택해야 한다.

 

📌 캐시(Cache)란?

 

데이터를 미리 저장해 두는 임시 장소를 말한다.

일반적으로 캐시 데이터는 RAM이나 인메모리 엔진에 저장된다.

이후에 해당 데이터에 대한 요청이 생겼을 때, 데이터 기본 저장소(디스크)로 접근하는 것보다 캐시 데이터로 접근하면 더 빠르게 요청을 처리할 수 있다.

 

레지스터, 캐시, 메모리, 디스크 비교

 

캐시는 디스크보다 처리 속도가 빠르지만 저장 공간이 작고, 비용이 많이 든다.

 


 

📌 캐싱 전략

 

캐싱에 전략이 필요한 이유는 결국 데이터를 저장하는 곳이 2개이기 때문이다.

같은 데이터가 캐시와 데이터베이스 두 곳에 저장되면서, 서로 다른 값으로 저장되는 데이터 정합성 문제가 발생할 수 있다.

또한 위에서 말한대로 캐시는 저장 공간이 작으므로 데이터 관리에 주의해야 한다.

상황에 따라 이런 점들을 고려해서 캐싱 전략을 선택해야 한다.

 

캐싱 읽기 전략 1 - Look Aside Cache (Lazy Loading)

 

일반적으로 가장 많이 쓰이는 전략이다.

데이터를 조회할 때 캐시에 있는지 먼저 확인하고, 없을 경우 DB를 조회한다.
캐시에 없던 데이터를 가져온 Server는 캐시에 이 데이터를 업데이트한다.

단, 캐시를 새로 투입하거나 DB에만 새로운 데이터를 저장했다면 cache miss가 많이 발생해서 성능에 저하가 생길 수 있다.
DB에서 캐시로 미리 데이터를 밀어 넣어주는 작업인 Cache Warming을 통해 이를 해결할 수 있다.

이 전략은 캐시와 DB간 데이터 정합성 문제가 발생할 수 있다는 단점이 있다.

 

캐싱 읽기 전략 2 - Read Through

 

Look Aside 전략에서 발전된 방식이다.

나머지 과정은 동일한데,
캐시에 없던 데이터를 Server가 아닌 Data Store가 직접 캐시에 업데이트한다.

 

캐싱 쓰기 전략 1 - Write Back (Write Behind)

 

로그를 DB에 저장할 때 자주 쓰는 방식이다.

해당 전략을 사용하는 이유는 DB로 데이터 500개를 insert 해야 한다고 했을 때,
insert 쿼리 1개를 500번 날리는 것보다 쿼리 500개를 1번에 날리는 게 훨씬 더 빠르기 때문이다.

 

캐싱 쓰기 전략 2 - Write Through

 

DB에 데이터를 저장할 때 캐시에도 함께 저장하는 방식이다.

이 전략은 캐시가 항상 최신 정보를 가지고 있으므로 데이터 정합성 문제가 해결된다는 장점이 있다.

하지만 저장 과정이 느리고,
재사용되지 않는 데이터도 무조건 캐시에 들어가므로 리소스가 낭비될 수 있다.

캐시 데이터에 expire time을 설정해 주면 단점을 보완할 수 있다.

 

캐싱 쓰기 전략 3 - Write Around

 

DB에만 데이터를 저장하는 방식이다.

cache miss가 발생한 경우에만 캐시로 데이터를 가져온다.

캐시의 데이터와 DB의 데이터가 다를 수 있다.

 


참고

[우아한테크세미나] 191121 우아한레디스 by 강대명님

[NHN FORWARD 2021] Redis 야무지게 사용하기