캐시는 일정 기간동안 임시로 데이터 하위집합을 저장하기 위한 fast data storage layer입니다.
캐시는 어디에나 존재합니다.
하드웨어 캐시(ex. L1, L2), 페이지 캐시, 데이터베이스 캐시, API캐시, DNS캐시, 브라우저 캐시 등등..
Cache 는 ubiquitous 합니다.
캐시가 필요한 이유는 무엇일까요?
캐시는 origin data source보다 빠르므로 데이터 검색 속도를 높입니다. 또한 캐시는 복잡하거나 resource intensive한 작업을 미리 수행하여 데이터 조회를 효율적으로 만들 수 있습니다.
보통 우리는 생성 비용이 높거나, 잘 변하지 않는 데이터를 TTL을 두고 캐시해 두곤 합니다.
결과적으로 서버 혹은 데이터베이스로의 로드를 줄일 수 있고, end-user에게 latency를 줄여 데이터를 제공할 수 있습니다.
캐시의 좋은 점과 마찬가지로 매우 유의해야할 부분이 있습니다.
바로 Cache Invalidation, 즉 캐시 무효화입니다.
캐시는 절대로 source of truth가 아닙니다. 그러므로 언제든 dirty/stale data가 될 수 있고, 적절한 시점에 캐시를 무효화해줘야 합니다.
그렇지 않으면 일관성이 없거나 잘못된 정보가 서빙됩니다.
하지만 이 무효화는 참 어려운 문제입니다.
왜냐하면 캐시 데이터를 제공하는 모든 입력에 연결된 의존관계에 대해 생각해줘야 합니다.
언제나 단일 입력이 변경된다면 캐시가 stale하거나 invalid해질 가능성이 있기 때문입니다.
또한 캐시 업데이트 또는 무효화 전략 중 미묘한 부분 하나 놓쳤을 때 프로그램은 계속 작동할 것이므로 문제를 추적하는 것이 어렵습니다.
아예 작동하지 않는다면 문제 발견과 대처가 빠르겠지만, 대부분 작동하는 상황에서는 버그를 찾고 해소하기 어렵습니다.
(심지어 버그가 있는지도 모르고 지나갈 수 있습니다.)
어쨌든, 캐시는 매우 유용하고 굉장히 많이 사용하지만 invalidation 시기와 방법을 이해하고 적절한 전략을 구축하는 것이 중요합니다.
좋은 의견, 다른 의견이 있으면 언제든 댓글 부탁드립니다.
관련 : https://chupin-tech.tistory.com/67
다양한 캐시 전략들
캐시는 일정 기간동안 임시로 데이터 하위집합을 저장하기 위한 fast data storage layer입니다. 캐시란? 캐시에 대하여 캐시는 일정 기간동안 임시로 데이터 하위집합을 저장하기 위한 fast data storage l
chupin-tech.tistory.com
'츄Log > 기타 끄적' 카테고리의 다른 글
MySQL on duplicate key update & affected rows (0) | 2024.01.25 |
---|---|
다양한 캐시 전략들 (1) | 2024.01.05 |
Side Cache / Transparent Cache (0) | 2024.01.04 |
localhost.http-alt 란? PNS(Port Name Service) (0) | 2023.12.28 |
MySQL 트랜잭션 격리 수준 (isolation level) (1) | 2023.12.21 |