728x90
본 글은 캐싱 전략에 대해서 공부를 한 지식을 정리한 글입니다.
캐싱 전략은 데이터나 결과를 저장하여 반복적인 요청이나 계산을 더 빠르게 처리할 수 있도록 하는 방법론입니다. 효과적인 캐싱 전략을 사용하면 애플리케이션의 응답 속도를 개선하고, 서버의 부하를 줄일 수 있습니다.
Cache의 기본 개념
캐시(Cache)
- 원본
데이터 저장소가 아닌 다른 장소에 데이터를 저장하는 시스템입니다. - 캐시는 속도와 성능을 높이기 위해 자주 접근되는 데이터를 빠르게 제공할 수 있습니다. 그러나 캐시는 휘발성 메모리나 제한된 저장 공간을 사용하기 때문에 언제든지 사라질 수 있으며, 저장할 데이터 양이 너무 크지 않도록 관리해야 합니다.
캐시 적중(Cache Hit)
- 캐시에 접근했을 때, 요청한 데이터가 캐시에 존재하는 경우를 의미합니다.
- 캐시 적중은 응답 속도를 빠르게 하고, 데이터베이스나 원본 데이터 저장소의 부하를 줄이는 데 도움이 됩니다.
캐시 누락(Cache Miss)
- 캐시에 접근했을 때, 요청한 데이터가 캐시에 존재하지 않는 경우를 의미합니다.
- 이 경우, 데이터는 원본 데이터 저장소에서 조회되며, 필요에 따라 캐시에 새롭게 저장될 수 있습니다.
삭제 정책(Evicion policy)
- 캐시의 저장 공간이 부족할 때 어떤 데이터를 제거할지를 결정하는 정책입니다.
- 적절한 삭제 정책을 선택하는 것은 캐시 성능을 극대화하고 효율성을 유지하는 데 중요합니다.
Cache-Aside(Lazy Loading) 전략
Cache-Aside 전략은 애플리케이션이 캐시와 데이터베이스를 직접적으로 제어하는 방법입니다. 이 전략은 데이터의 읽기와 쓰기 작업에 따라 캐시와 데이터베이스를 함께 활용합니다.
데이터를 조회할 때 항상 캐시를 먼저 확인하는 전략입니다. 캐시에 데이터가 있으면 캐시에서 데이터를, 없으면 원본에서 데이터를 가져온 뒤 캐시에 저장합니다.
- 읽기 작업
- 애플리케이션이 데이터를 요청할 때, 먼저 캐시에서 데이터를 조회합니다.
- 캐시에 데이터가 존재하지 않으면 (캐시 미스), 데이터베이스(원본)에서 데이터를 조회하여 캐시에 저장한 후 클라이언트에게 반환합니다.
- 쓰기 작업
- 데이터베이스에 데이터가 변경되면, 해당 데이터와 관련된 캐시 항목을 명시적으로 무효화하거나 삭제합니다. 이후, 다음 요청 시 캐시가 재빌드됩니다.
장점
- 유연성: 애플리케이션이 직접 캐시를 제어하므로, 복잡한 데이터 요구 사항을 처리할 수 있습니다.
- 캐시 적중률 개선: 자주 조회되는 데이터가 캐시에 유지되므로 성능이 개선됩니다.
단점
- 최초로 조회할 때 캐시를 확인하기 때문에 최초의 요청은 상대적으로 오래 걸립니다.
- 반드시
원본을 확인하지 않기 때문에, 데이터가최신이라는 보장이 없습니다.
Write-Through 전략
데이터가 데이터베이스와 캐시에 동시에 기록됩니다. 데이터가 업데이트될 때, 캐시와 데이터베이스가 일관성을 유지합니다.
장점
- 데이터 일관성 유지
- 캐시와 데이터베이스 간의 데이터 일관성을 보장합니다.
- 데이터베이스와 캐시가 항상 동기화되어 있기 때문에, 데이터베이스에서 업데이트된 내용이 캐시에서도 즉시 반영됩니다.
단점
- 성능 저하
- 모든 쓰기 작업이 캐시와 데이터베이스 양쪽에 동시에 이루어지기 때문에, 쓰기 작업의 성능이 저하될 수 있습니다.
- 특히 높은 쓰기 빈도를 가진 애플리케이션에서는 성능이 문제가 될 수 있습니다.
- 자원 소모
- 자주 사용되지 않는 데이터도 캐시에 저장되므로, 캐시의 용량이 빨리 소모될 수 있습니다. 이로 인해 캐시의 관리와 유지 보수에 추가적인 자원이 소요될 수 있습니다.
Write-Behind 전략
Write-Behind (또는 Write-Back) 전략은 캐싱에서 데이터를 업데이트하거나 저장할 때 사용되는 전략으로, 캐시와 원본 데이터 저장소 간의 동기화를 조절합니다.
- 비동기 저장
- Write-Behind 전략에서는 데이터가 캐시에 저장될 때 원본 데이터 저장소(예: 데이터베이스)에 대한 업데이트는 즉시 이루어지지 않습니다.
- 대신, 데이터가 캐시에 기록된 후, 일정 시간 간격으로 또는 특정 조건이 충족되었을 때, 캐시에 저장된 데이터가 배치(batch)로 원본 데이터 저장소에 기록됩니다.
장점
- 성능 향상
- 원본 데이터 저장소에 대한 쓰기 작업이 비동기적으로 처리되기 때문에, 쓰기 작업의 성능이 향상됩니다. 애플리케이션의 응답 속도를 빠르게 유지할 수 있습니다.
- 캐시 적중률 향상
- 쓰기 작업이 지연되기 때문에, 캐시에서 읽기 작업을 빠르게 처리할 수 있습니다. 이로 인해 캐시의 적중률이 향상될 수 있습니다.
단점
- 데이터 일관성 문제
- 캐시와 원본 데이터 저장소 간의
데이터가 일치하지 않을 수 있습니다. - 캐시와 데이터 저장소 간의 동기화가 지연되기 때문에, 최신 데이터가 원본 데이터 저장소에
즉시 반영되지 않을 수 있습니다.
- 캐시와 원본 데이터 저장소 간의
- 복잡성
- 비동기 쓰기 작업을 관리하기 위해 추가적인 복잡성이 필요합니다.
- 실패한 쓰기 작업에 대한 처리나 데이터 일관성 유지를 위한 추가적인 로직이 필요할 수 있습니다.
'TIL,일일 회고' 카테고리의 다른 글
[TIL, 일일 회고] 2024.08.14 - final 파라미터의 장점 (0) | 2024.08.14 |
---|---|
[TIL, 일일 회고] 2024.08.13 - @Builder(access=AccessLevel.PRIVATE) 옵션이란❓ (0) | 2024.08.13 |
[TIL, 일일 회고] 2024.08.11 - MapStruct의 편리함 (0) | 2024.08.11 |
[TIL, 일일회고] 2024.08.10 - DTO 사용 시 고려해야 할 주요 문제점과 해결책 (0) | 2024.08.10 |
[TIL, 일일회고] 2024.08.09 - @Data를 지양하자 (0) | 2024.08.09 |