캐싱이란
캐싱은 자주 사용되는 데이터를 빠르게 접근할 수 있는 곳에 저장하는 기술입니다. 40년간 성능 최적화를 해온 저로서는 캐싱이 가장 효과적인 성능 개선 방법 중 하나라고 확신합니다. '모든 성능 문제의 해결책은 캐싱'이라는 농담이 있을 정도입니다. 하지만 캐싱은 복잡성을 추가하므로 신중하게 적용해야 합니다.
캐시 레이어
브라우저 캐시: 정적 자원을 클라이언트에 저장합니다. CDN: 지리적으로 분산된 엣지 서버에 콘텐츠를 캐싱합니다. 애플리케이션 캐시: Redis, Memcached로 데이터베이스 쿼리 결과를 캐싱합니다. 데이터베이스 캐시: 쿼리 결과를 DB 수준에서 캐싱합니다. CPU 캐시: 하드웨어 수준의 캐싱.
캐시 무효화(Invalidation)
캐시의 가장 어려운 문제는 무효화입니다. '컴퓨터 과학에서 어려운 것은 두 가지: 캐시 무효화와 이름 짓기.' TTL(Time To Live)로 시간 기반 만료를 설정합니다. 이벤트 기반으로 데이터 변경 시 캐시를 삭제합니다. Write-through, Write-behind 전략이 있습니다. 일관성과 성능의 트레이드오프를 고려합니다.
캐시 패턴
Cache-Aside(Lazy Loading): 캐시 미스 시 DB에서 조회 후 캐시에 저장. Read-Through: 캐시가 DB 조회를 대행. Write-Through: 쓰기 시 캐시와 DB에 동시 저장. Write-Behind: 캐시에 먼저 쓰고 나중에 DB에 반영. 각 패턴의 장단점을 이해하고 선택합니다.
캐싱 주의사항
캐시 폭주(Cache Stampede): 많은 요청이 동시에 캐시 미스. 락이나 확률적 조기 갱신으로 방지. 핫키(Hot Key): 특정 키에 요청 집중. 분산이나 로컬 캐시로 완화. 메모리 용량을 모니터링합니다. 캐시 히트율을 측정하고 개선합니다. 캐싱 없이 먼저 작동하게 한 후 캐싱을 추가하세요.
댓글
0