캐싱

기술노트

⚡ 캐싱 (Caching)

캐싱은 자주 사용되거나 접근하는 데 시간이 오래 걸리는 데이터나 계산 결과를, 더 빠른 저장소(캐시, Cache)에 임시로 저장해두었다가, 다음 요청 시 실제 데이터 소스까지 가지 않고 캐시에서 직접 가져와 사용하는 기술입니다. 이를 통해 전체적인 응답 속도를 크게 향상시키고, 원본 데이터 소스의 부하를 줄일 수 있습니다.


🤔 캐싱은 왜 중요한가?

컴퓨터 시스템에서 데이터 접근 속도는 저장 장치에 따라 큰 차이를 보입니다. (CPU 레지스터 > CPU 캐시 > 메모리(RAM) > 디스크(SSD/HDD) > 네트워크)

캐싱은 이 속도 차이를 완화하기 위한 핵심 전략입니다. 느린 저장소의 데이터를 더 빠른 저장소에 미리 복사해 둠으로써, 데이터 접근의 병목 현상을 해결하고 사용자 경험을 향상시킵니다.


📚 캐싱의 종류

캐싱은 애플리케이션의 다양한 계층에서 사용됩니다.

  • 브라우저 캐시 : 웹 브라우저가 이미지, CSS, JS 파일 등을 사용자의 컴퓨터에 저장하여, 같은 사이트 재방문 시 로딩 속도를 높입니다.
  • CDN (Content Delivery Network) : 사용자와 지리적으로 가까운 캐시 서버에 콘텐츠를 저장하여, 콘텐츠 전송 속도를 높입니다.
  • 프록시 캐시 / 리버스 프록시 캐시 : 프록시 서버가 자주 요청되는 콘텐츠를 캐싱하여, 원본 서버의 부하를 줄입니다.
  • 데이터베이스 캐시 : 데이터베이스 자체적으로 자주 사용되는 쿼리 결과나 데이터를 메모리에 캐싱합니다.
  • 인메모리 캐시 (In-memory Cache) : Redis, Memcached와 같은 별도의 인메모리 데이터 저장소를 사용하여, 애플리케이션의 데이터를 캐싱합니다.

⚙️ 캐시 관리 전략

캐시는 용량이 한정되어 있으므로, 어떤 데이터를 캐시에 남기고 어떤 데이터를 삭제할지를 결정하는 정책이 필요합니다.

  • 캐시 무효화 (Cache Invalidation) : 원본 데이터가 변경되었을 때, 캐시에 저장된 이전 데이터를 어떻게 최신 데이터로 갱신할 것인가 하는 문제입니다. 캐싱에서 가장 어렵고 중요한 부분입니다.
  • 캐시 교체 정책 (Cache Replacement Policy) : 캐시가 가득 찼을 때, 새로운 데이터를 저장하기 위해 기존 데이터 중 어떤 것을 삭제할지를 결정하는 알고리즘입니다. (예: LRU - 가장 오랫동안 사용되지 않은 것 삭제, LFU - 가장 적게 사용된 것 삭제)

💡 개발자 핵심 Point

  • 캐싱은 성능 최적화의 가장 기본적이고 효과적인 방법 중 하나입니다.
  • 자주 조회되지만 자주 변경되지 않는 데이터가 캐싱의 가장 좋은 대상입니다.
  • 애플리케이션의 성능 문제를 해결할 때, 가장 먼저 캐시를 적용할 수 있는 부분이 있는지 검토해보는 것이 좋습니다.
  • 특히 Redis와 같은 인메모리 캐시 솔루션은 현대적인 웹 서비스 아키텍처에서 매우 중요한 역할을 합니다.