4. 캐싱(Caching) 전략
1. 캐싱 전략이란?
- 캐싱 전략은 최근 웹 서비스 환경에서 시스템 성능 향상을 위해 가장 중요한 기술이다.
- 캐시는 메모리를 사용함으로 디스크 기반 데이터베이스보다 훨씬 빠르게 데이터를 반환할 수 있다.
- 서비스 목적에 따른 여러가지 캐싱 전략이 있다.
2. 캐싱 전략 종류
1) Cache Aside (Lazy Loading)
- Cache Aside는 캐시를 옆에 두고 필요할 때만 데이터를 캐시에 로드하는 전략이다.
- Cache Aside 전략은 다음과 같이 2가지 상황이 있을 때 동작하는 과정이 달라진다.
1] 사용자가 요청했을 때, 캐시 저장소에는 아무 데이터도 없는 상황
- 애플리케이션은 먼저 캐시 저장소에 데이터가 있는지 조회하지만 데이터가 없다.
- 애플리케이션은 데이터베이스에서 데이터를 조회하고 사용자에게 제공한다.
- 애플리케이션은 데이터베이스에서 가져왔던 데이터를 캐시 저장소에 저장한다.
2] 사용자가 요청했을 때, 이미 캐시 저장소에 데이터가 있는 상황
- 애플리케이션은 먼저 캐시 저장소에 데이터가 있는 조회하고, 캐시 저장소에 저장되어 있는 데이터를 제공한다.
- Cache Aside 전략의 장점은 다음과 같다.
1] 읽기가 많은 워크로드에 적합하다
2] Redis가 가장 많이 쓰이며 캐시 분리를 사용했기 때문에 캐시 오류에 대해 탄력적이므로, 캐시 클러스터가 다운되어도 시스템 전체의 오류로 가지 않는다
- Cache Aside 전략의 단점은 다음과 같다.
1] 캐시에 없는 데이터인 경우, 더 오랜 시간이 걸리게 된다.
2) Read-Through
- Read-Through는 캐시와 데이터베이스를 일렬로 배치하는 전략이다.
- 캐시 미스가 발생하면 데이터베이스에서 누락된 데이터를 로드하고 캐시를 채우고 나서 애플리케이션에 반환한다.
- Cache Aside 전략과의 차이점은 애플리케이션이 캐시를 채우는 역할을 하지 않는다는 것이다.
- Read-Through 전략의 장점은 다음과 같다.
(1) 읽기가 많은 워크로드에 적합하다.
- Read-Through 전략의 단점은 다음과 같다.
1] 데이터를 처음 요청하면 항상 캐시 누락이 발생하여, 그에 따른 패널티가 발생한다.
3) Write-Through
- Write-Through는 Read-Through와 반대로 구성되어 있는 전략이다.
- 데이터를 데이터베이스에 작성할 때마다 캐시에 데이터를 추가하거나 업데이트한다.
- 이로 인해 캐시의 데이터는 항상 최신 상태로 유지할 수 있다.
- Write-Through 전략의 장점은 다음과 같다.
1] 데이터가 항상 동기화되어 있다.
- Write-Through 전략의 단점은 다음과 같다.
1] 쓰지 않는 데이터도 캐시에 저장되기 때문에 리소스가 낭비된다.
2] 쓰기 지연 시간이 증가한다.
- 여러 장점과 단점이 있지만, Write-Through 전략과 Read-Through 전략을 함께 사용하면 Read-Through 전략의 모든 이점을 얻을 수 있으며, 데이터 일관성 보장도 얻을 수 있다.
- 이에 대한 예로 AWS의 DynamoDB Accelerator(DAX)가 있다.
- DAX는 읽기/쓰기 캐시의 좋은 예이다.
- DAX는 DynamDB 및 애플리케이션과 인라인으로 배치된다.
- DynamoDB에 대한 읽기 및 쓰기는 DAX를 통해 수행할 수 있다.
4) Write-Around
- 데이터는 데이터베이스에 직접 기록되며, 읽은 데이터만 캐시에 저장된다.
- Write-Around 전략은 Read-Through 전략과 결합될 수 있으며, Cache-Aside 전략과도 결합될 수 있다.
- 데이터가 한 번 쓰여지고, 자주 읽히지 않은 상황에서 좋은 성능을 제공한다.
- 예를 들어, 실시간 로그 또는 채팅방 메시지가 있다.
5) Write-Back (Write-Behind)
- 애플리케이션은 캐시에 먼저 데이터를 쓰고, 약간의 지연 후에 데이터를 한 번에 데이터베이스에 쓴다.
- Write-Back 전략의 장점은 다음과 같다.
1] 쓰기가 많은 워크로드에 적합하다.
2] Read-Through 전략과 결합하여 가장 최근에 업데이트되고 액세스된 데이터를 항 상 캐시에서 사용할 수 있는 혼합 워크로드에 적합하다.
3] 데이터베이스에 대한 전체 쓰기를 줄일 수 있어, 해당 비용을 감소시킬 수 있다.
- Write-Back 전략의 단점은 다음과 같다.
1] 위와 반대의 경우 적합하지 않다.
2] 일부 개발자는 Cache-Aside 전략과 Write-Back 전략 모두 Redis를 사용하는데, 가장 큰 단점은 캐시에서 오류가 발생하면 데이터베이스에 쓰기 전에 데이터를 영구 소실할 수 있다는 것이다.