- 캐싱(caching)은 데이터 또는 계산 결과를 임시 저장하여 재사용하는 기술로, 주로 성능을 최적화하고 응답 시간을 줄이기 위해 사용된다.
- 캐시는 본래 저장된 곳이 아닌 곳에 데이터를 저장하는 행위이기 때문에 언제든 데이터가 사라질 수 있으므로 너무 크게 관리되어서는 안된다.
- 캐시를 확인했을 때 필요한 데이터가 있을 수도, 없을 수도 있기 때문에 캐시를 구현할 때는 해당 데이터가 얼마나 자주 사용될 것인가를 고려해야한다.
캐싱 전략 용어 :
- 캐시 적중(Cache Hit): 캐시에 접근했을 때 찾고 있는 데이터가 있는 경우
- 캐시 누락(Cache Miss): 캐시에 접근했을 때 찾고 있는 데이터가 없는 경우
- 삭제 정책(Eviction Policy): 캐시에 공간이 부족할때 어떻게 공간을 확보하는지에 대한 정책
1. Cache-Aside (Lazy Loading)
가장 간단하면서도 많이 사용되는 캐싱 전략 중 하나로, 캐시와 데이터베이스가 각각 독립적으로 동작한다.
데이터 조회 과정 :
- 데이터를 읽어오려면 먼저 캐시에서 데이터를 찾는다.
- 캐시에 데이터가 존재하지 않으면 데이터베이스에서 데이터를 조회한다.
- 조회된 데이터를 캐시에 저장한 후, 애플리케이션에 반환한다.
데이터 쓰기 과정 :
- 먼저 데이터베이스에 저장하고, 그 후에 캐시를 업데이트한다.
장점 :
- 캐시 무효화가 자연스럽고 쉬워서 일관성 유지가 비교적 간단하다.
- 데이터베이스와 캐시가 독립적으로 동작하기 때문에 캐시 실패 시에도 애플리케이션이 데이터를 가져올 수 있다.
단점 :
- 캐시 미스 시 데이터베이스에서 데이터를 가져와야 하므로, 처음 접근할 때 더 느릴 수 있다.
2. Write-Through
데이터 저장 시에 캐시와 데이터베이스(또는 다른 데이터 저장소) 모두를 업데이트하는 전략.
데이터 쓰기 과정 :
- 캐시에 저장하고, 동시에 데이터베이스에도 쓰는 작업을 수행한다.
장점 :
- 데이터베이스와 캐시가 항상 일관성을 유지하므로 데이터 유효성 관리가 쉽다.
- 데이터베이스 쓰기 성능에 영향을 미치지 않고 캐시에 쓰기 작업을 수행할 수 있다.
단점 :
- 쓰기 작업이 두 배로 발생하기 때문에 쓰기 지연 문제가 발생할 수 있다.
- 쓰기 연산 비용이 높을 수 있다.
3. Write-Behind (Write-Back)
데이터를 먼저 캐시에만 쓰고, 나중에 비동기적으로 데이터베이스에 쓰는 전략.
데이터 쓰기 과정 :
캐시에 쓰기 작업을 완료한 후, 비동기적으로 데이터베이스에 쓰기 작업을 수행한다.
장점 :
- 애플리케이션이 캐시에만 쓰기 작업을 수행하고, 데이터베이스 쓰기 작업은 비동기적으로 처리되기 때문에 쓰기 성능이 개선될 수 있다.
- 쓰기 작업의 지연을 줄일 수 있다.
단점 :
- 데이터베이스와 캐시의 일관성 관리가 복잡할 수 있다.
- 캐시 쓰기 작업 후 데이터베이스 쓰기 작업이 실패할 경우 일관성 문제가 발생할 수 있다.
- 비동기 쓰기 작업이 완료될 때 까지 캐시의 데이터가 일시적으로 데이터베이스와 다를 수 있다.