Cache

캐시(cache)

데이터나 값을 미리 복사해 놓는 임시 장소

웹 브라우저에 캐시, CPU의 캐시, 데이터베이스의 캐시 등 많은 곳에서 캐시라는 개념이 사용되고 있습니다. 정확하게 캐시가 무엇인지 정리해 보겠습니다!

어떤 정보를 캐시에 담아야 할까

모든 데이터를 캐시에 담기에는 캐시라는 저장 공간은 작다. 그렇기 때문에 파레토의 법칙에 해당하는 소수의 선택받은(?) 데이터를 선별해야한다. 이때 사용되는 것이 지역성이다.

image1

시간적 지역성

특정 데이터가 한번 접근되었을 경우, 가까운 미래에 또 한번 데이터에 접근할 가능성이 높은 것을 말한다.

메모리 상의 같은 주소에 여러 차례 쓰기를 수행할 경우 상대적으로 작은 크기의 캐시를 사용해도 효율성을 꾀할 수 있다.

공간적 지역성

특정 데이터와 가까운 주소가 순서대로 접근되었을 경우를 공간적 지역성이라고 한다.

CPU 캐시나 디스크 캐시의 경우 한 메모리 주소에 접근할 때 그 주소뿐 아니라 해당 블록을 전부 캐시에 가져오게 된다.

이때 메모리 주소를 오름차순이나 내림차순으로 접근한다면, 캐시에 이미 저장된 같은 블록의 데이터를 접근하게 되므로 캐시의 효율성이 크게 향상된다.

순차 지역성

공간 지역성과 함께 설명되기도 한다. 데이터가 순차적으로 엑세스되는 경향을 보인다. 프로그램 내의 명령어가 순차적으로 구성된다.

캐시 더 많이 쓰면 좋은 것 아니야?

그렇다면 한가지 의문이 들 수 있습니다. 캐시를 사용하면 저장된 데이터에 접근하는 속도가 더 빠르니 ‘모든 데이터를 캐시에 담아두면 되지 않을까?’ 하고 말입니다. 물론 그렇게 하면 좋겠지만 문제는 돈입니다.

컴퓨터를 구성하는 메모리 저장공간은 속도가 빠를 수록 용량이 작고 가격이 높습니다. 지금 당장 쇼핑몰에 HDD와 RAM을 검색해보면 GB당 가격차이는 HDD는 약 52~ 56원 RAM은 6900~7000원정도 입니다.

때문에 캐시에 저장할 적은 양의 정보를 잘 선택하는 것이 비용도 절약하고 효율도 높이는 방법이 될 것입니다.

image2

캐시의 동작 방식

  1. 데이터를 달라는 요청이 오면 먼저 캐시에서 데이터를 찾는다.
  2. 캐시가 없거나(cache miss) 너무 오래되면(expiration) 원본 데이터가 저장된 곳에서 데이터를 조회한다.이때 캐시에도 데이터를 복사하거나 갱신한다.
  3. 캐시에 데이터가 있으면(cache hit) 캐시의 저장된 데이터를 제공한다.
  4. 캐시는 용량이 작은 공간으로 사용하지 않거나 오래된 데이터는 삭제한다.(eviction)

원문링크