Cashing
캐싱이란 저장한다는 뜻을 가지고 있다. 오랜 시간이 걸리는 작업의 결과를 저장해서 시간과 비용을 줄이는 기법을 의미한다. 캐싱은 고성능 애플리케이션을 만드는데 가장 중요한 요소 중에 하나다.
캐싱과 비슷한 예)
- 같은 사진을 여러번 사용하려고 할 때, 매번 다운로드 받는것이 아니라 로컬 파일에 저장했다가 사용하고 싶을 때 로컬에 저장된 이미지를 사용한다.
- CPU는 연산의 결과를 빠르게 저장하기 위해서 메인메모리보다 빠른 캐쉬 메모리를 사용해서 빠르게 작업을 처리한다.
그냥 한마디로 말하자면 원래 있던 장소보다 더 가까운 곳에 저장해놓고 매번 가져다 쓰는거라고 생각하면 된다.
문제
미리 저장해 놓는다고 좋은 것만은 아니다. 만약 원본이 있던 곳에서 원본 데이터가 변경이 되었을 경우엔 자동으로 반영이 되지 않는다. 즉, 갱신의 어려움을 가지고 있다. 그렇기 때문에 전에 작성한 글에서도 GET방식은 Caching되기 때문에 최신 데이터가 아닌 예전의 데이터를 가져올 가능성이 있다고 말하는 것이다.
TTL
그래서 생각한 방법이 TTL, Time to Live다. TTL은 캐쉬의 유효기간을 정한다. 지정된 기간이 되면 캐쉬를 삭제하고 다시 데이터를 받아와서 새로운 캐쉬를 생성한다.
캐쉬의 저장소
- 파일 : 캐시를 저장할 때 가장 기본적으로 고려되는 저장소다. 저렴하다는 장점이 있지만 캐시데이터를 여러 시스템에서 공유하기 어렵다는 점과 메모리 대비 느리다는 단점을 가진다. 또한 캐쉬 메커니즘을 직접 구현해야하는 어려움이 있다.
- 메모리 : 네트워크를 통해 접근하는 기능을 지원하기 때문에 단일 캐쉬에 대해 여러 곳에서 접근 할 수 있으며 파일보다 훨씬 빠르게 데이터를 처리 할 수 있다는 장점이 있지만 비싸다는 단점이 있다.
- 데이터베이스 : 자체적인 보안 시스템을 가지고 있고, 네트워크를 통해 접근할 수 있기 때문에 공유가 가능하다는 장점이 있다. 단점은 메모리보다는 느리다.
웹페이지에서의 Caching
캐쉬는 평소에도 중요하지만 특히 트래픽이 급증할 때 매우 중요하다. 서비스의 트래픽은 어느 순간에 갑자기 증가하는 경우도 있을 수 있기 때문에 이런 경우엔 웹페이지 Caching을 생각할 수 있다. Caching을 사용하면 파일에 저장된 내용을 그대로 전송하기 때문에 대용량 트래픽을 감당할 수 있다. 하지만 페이지 전체가 Caching 되기 때문에 사용자마다 다르게 보여져야할 부분이나 수정된 컨텐츠의 내용을 반영하기 어렵다. 이런 경우에는 폭증한 요청에 대해서만 Caching을 사용한다면 전반적인 서비스의 품질을 유지하면서 높은 응답속도를 유지할 수 있을 것이다.
참고