Web/TIL

캐시 무효화와 캐시 무효화 전략

wjdwwidz 2024. 8. 11. 21:17

캐시에 저장된 데이터를 유효하지 않은 데이터로 마킹하는 작업. 다음 요청이 왔을 때, 유효하지 않은 데이터는 반드시 캐시-미스 로 다루고, 원본 저장소에서 값을 재생성 하도록 해야한다. 즉 캐시 무효화는 캐시에서 데이터를 제거하여 캐시를 무효화하는 프로세스이다.

 

캐시된 데이터는 실제 원본 데이터가 아니다. 원본 데이터는 DB 에 있거나, 서비스가 생성해야 한다. 문제는 DB 의 데이터가 변경되는 경우 발생하는데 이 경우 캐시된 데이터는 더 이상 유효하지 않다.

 

 

캐시 무효화 전략이 필요한 이유 :

  1. 웹 브라우저가 GET 요청을 받을 경우 캐시 헤더 없이도 최적화를 위해 임의로 캐싱을 합니다.
  2. 리소스의 캐시 유효 기간을 장기간으로 설정해 오래된 정보가 표시되는 경우가 있을 것입니다. 이 경우 해당 캐시를 무효화하여 업데이트된 데이터가 반영되도록 해야 합니다. 그러나 캐시 저장소의 복사본에 갱신이 필요해도 기본적으로 브라우저는 캐시 유효 기간이 끝나야 캐시 유효성 검증을 서버에게 요청합니다.

 

위와 같은 경우 캐시 무효화를 통해 최신 상태로 유지하여야 한다.

 

캐시 무효화 전략

 

1. Expiration Time

캐시가 생성될 때 TTL 에 의해 캐시의 수명이 결정되고, 수명이 다한 캐시는 사용되지 않는다. 가장 일반적인 캐시 무효화 전략. TTL 을 보수적으로 설정하면, 해당 시간이 지나면 최신의 데이터가 반환되기 때문에 안전하다. 캐시를 잘 관리할 자신이 없다면 TTL을 짧게 설정하는 것이 좋다.

 

2. Freshness Caching Verification

별도의 검증 절차를 통해 캐시가 유효한지 확인하는 방법이다. 예를 들어, 원본 데이터가 업데이트된 시간과 캐시가 생성된 시간을 비교하여 캐시의 유효성을 판별한다. 단점은 캐시가 사용될 때마다 추가적인 확인 절차를 수행하기 때문에 이에 따른 오버헤드가 발생한다.

 

3. Active Application Invalidation

데이터가 수정되는 코드가 수행될 때마다 백엔드에서 연관된 캐시를 무력화하는 방법이다. 캐시를 세밀하게 관리할 수 있어, 이상적으로 설계되었을 때 가장 효율적이다. 1번 방식이 수동적인 방법인데 비해 매우 능동적인 방법이다. 별도의 코드를 통해 캐시를 컨트롤하기 때문에 가장 에러가 발생하기 쉽고, 관리가 까다롭다.

 

 

능동적 캐시 관리 방법 

 

1. 새로운 데이터 업데이트

원본 데이터의 변화에 따라 캐시를 수정하는 방법이다. 캐시 중 일부가 변경되었을 때 캐시 전체를 다시 생성하는 것보다 일부만 수정하는 게 효율적일 경우에 사용된다. 하지만 참조되고 있는 데이터가 많을 경우, 일일이 캐시를 수정하는 것은 비효율적일 수 있다.

 

2. 오래된 캐시 지우기

원본 데이터가 변경되었을 때, 업데이트할 캐시가 많다면 일일이 캐시를 수정하기보다 지우는 것이 효율적이다. 단점은 데이터 중 일부만 변경된 경우에도 전체를 지우고 다시 생성하기 때문에 약간의 비효율성이 발생할 수 있다. 그러나 캐시가 생성되는 과정이 비싼 연산이 아니라면, 수정하기보다 지우는 것이 관리 측면에서 더 용이하다.


https://velog.io/@zenon8485/%EC%BA%90%EC%8B%B1%EA%B3%BC-%EC%BA%90%EC%8B%9C-%EB%AC%B4%ED%9A%A8%ED%99%94%EC%97%90-%EB%8C%80%ED%95%9C-%EA%B0%84%EB%8B%A8%ED%95%9C-%EA%B8%80