캐시란?
데이터 또는 정보를 임시로 저장하고 빠르게 접근할 수 있도록 하는 저장 공간을 가리킵니다.
이에, 캐시는 데이터 접근 시간을 줄이고 시스템 성능을 향상 시키는데 사용됩니다.
특히나 캐시는 다양한 컴퓨팅 분야에서 활용이 되는데 주로 네트워크, 웹 브라우징, 데이터베이스 시스템, 하드웨어, 소프트웨어, 그래픽 처리 등에 발견 됩니다.
캐시 특징
- 캐시는 빈번하게 액세스 되는 데이터나 정보를 저장하므로 원본 데이터를 다시 검색하는것보다 빠르게 접근할 수 있어 응답 시간이 단축된다.
- 캐시를 통해 반복적으로 동일한 데이터를 검색하거나 계산하지 않아도 되므로 시스템 자원(CPU, 대역폭)등 절약할 수 있습니다.
- 대용량 데이터를 실제 저장소에 저장하기보다 캐시에 저장하여 스토리지 요구를 줄일수 있습니다.
- 캐시 데이터는 주로 원본 데이터를 대표하므로 데이터 무결성을 유지합니다.
캐시 종류
- 웹 브라우저 또는 웹 서버에서 사용하는 캐시로, 웹 페이지 및 리소스를 저장하고 재사용합니다.
- 네트워크 트래픽을 중계하는 프록시 서버가 사용하는 캐시로 클라이언트 요청 및 서버 응답을 저장하고 관리합니다.
- 웹 콘텐츠를 가까운 위치에 복제하여 더 빠르게 제공하는 서비스로 캐시가 중요한 역할을 합니다.
캐시 효율적인 관리
👉 적절한 캐시 정책 설정
어떤 데이터를 캐싱할 것인지 결정하고 해당 데이터에 대한 캐시 정책을 설정하여 자주 변경되는데이터를 캐시하지 않는것이 좋습니다.
👉 만료 전략 구현
캐시된 데이터의 유효기간을 설정하여 만료전략을 구현합니다.
👉 캐시 폐기(Cache Eviction)
캐시 메모리가 한정적이므로 캐시 폐기 알고리즘을 구현하거나 주기적으로 폐기하여 공간을 확보하며 주로, 가장 오래된 데이터 또는 가장 적게 사용된 데이터를 폐기합니다.
👉 캐시 피어링(Cache Coherence)
여러 캐시 서버가 사용되는 경우 캐시 서버 간의 데이터 일관성을 유지하도록 조치합니다.
👉 성능 모니터링 및 튜닝
캐시의 성능을 지속적으로 모니터링하고 필요한 경우 튜닝 작업을 수행하는데 여기서 성능 모니터링 도구 및 로그 분석을 활용합니다.
👉 보안 고려사항
중요한 데이터는 보안을 고려하여 캐시를 사용하지 않도록 합니다.
캐시 동작원리
위의 그림처럼 웹 브라우저에서 서버로 요청을 하여 서버가 응답 헤더 값으로 Cache-control에 max-age를 60으로 주게 된다면 60초에 동안 응답 값을 캐시 해서 사용할 수 있습니다.
이때, 웹 브라우저에서 캐시로 저장된 시간인 60초가 지나게 된다면 캐시가 유효하지 않다고 판단하여 다시 서버에게 재요청을 하게 됩니다.
그럼 서버에서는 다시 응답 값으로 max-age를 60으로 보내줍니다.
이에 캐시 유효 시간이 초과하게 된다면 서버를 통해 데이터를 다시 조회하고 캐시를 갱신이 되어지면서 다시 네트워크 다운로드가 발생하게 됩니다.
만약 위 그림처럼 캐시 유효 시간이 초과해서 서버에 다시 요청하는 경우에는 2가지 경우가 있는데
① 서버에서 기존 데이터를 변경하는 경우
② 서버에서 기존 데이터를 변경하지 않는 경우라면,
데이터를 전송하는 대신 저장해놓았던 캐시를 재사용할 수 있습니다.
But, 클라이언트의 데이터와 서버의 데이터가 같다는 사실을 확인을 해야만 하기때문에
Last-Modified라는 검증 헤더를 추가하며 데이터가 마지막에 수정된 시간을 기록합니다.