Cache 란, 미래의 사용 될 데이터를 빠르게 조회할 수 있는 곳(물리적 장소 또는 소프트웨어로 구현된 위치)에 두고서 사용하는 것을 말합니다.
보통 원본 데이터는 다른 곳에 있고 그것으로부터 copy된 데이터가 Cache에 존재합니다.
access 시도 횟수 대비 cache hit 의 비율.
이 값이 (상대적으로) 높으면 캐시가 Cost-Effective 하다고 합니다.
절대적인 기준은 없고 설치하기 이전보다 더 좋아졌다면 Cache hit가 좋아졌다고 표현을 합니다. 즉, cache hit 의 비율이 상대적으로 높다면 비용 효율적이라고 하는 것이죠.
캐시의 목표는 결국 Cost-Effective를 달성하는 것입니다.
CPU 칩 내에 자주 사용하는 데이터 또는 최근 사용된 데이터를 임시 저장하는 작은 cache가 있어서, CPU cache에 hit되는 경우 메모리 IO에 의한 속도를 줄일 수 있습니다.

조회속도를 높이기 위해서 디스크에서 가져오지 않고 메모리에서 가져오도록 했는데 이것도 만족하지 못해서 CPU 칩 안에 캐시를 두었습니다. 바로 L1, L2, L3 캐시 등에서 조회하면 bus를 타고 왔다갔다 안해도 되니까요.
직접 코딩할 일은 없지만 L1, L2, L3 캐시 같은 경우는 컴파일러나 운영체제에서 최적화할 때 사용합니다.
int sum = 0; for(int i = 0; i < 1000; i++) { sum += i + 1; }이런 경우에 sum 값을 메모리에 두지 않고 컴파일러가 최적화해서 L1 캐시 등에서 왔다갔다 하도록 해줍니다.
데이터베이스에서 인덱싱 데이터는 메모리에 올려두고 관리하기 때문에, 인덱싱 기준으 로 조회하면 조회속도가 빠릅니다.
예를 들어, 유저ID가 PK였는데 유저 이름으로 가지고 인덱싱을 건다면 이름에 대해서 어느 위치에 어떤 데이터가 있는지 메모리에 올려둡니다.
인덱싱 기준으로 조회하면 빨라지는 이유가 아키텍처상 디스크에서 조회하는게 아니라 메모리에서 어느 위치에 있는지를 빨리 찾을 수 있기 때문입니다.
웹 브라우저에서 최근 방문 기록, 최근 로드한 이미지 등을 임시 저장해서 사이트내 이 동 또는 재방문시 웹서비스의 이용을 빠르게 합니다.
특히 이미지 다운로드 같은 경우는 파일이기 때문에 시간이 많이 걸립니다.
업데이트 할 일이 거의 없는 정보(메타데이터, 설정정보 등)를 어플리케이션 메모리에 올려두고 재사용하고, 주기적으로 또는 업데이트 푸시에 의해서만 cache를 업데이트 하는 방법을 사용합니다.