한 줄 대답
Cache는 아래와 같은 경우에 사용을 고려하면 좋다.
Cache에 데이터를 미리 복사해 놓으면 계산이나 접근 시간 없이 더 빠른 속도로 데이터에 접근할 수 있다.
결국 Cache란 반복적으로 데이터를 불러오는 경우에, 지속적으로 DBMS 혹은 서버에 요청하는 것이 아니라 Memory에 데이터를 저장하였다가 불러다 쓰는 것을 의미한다.
Enterprise급 Application에서는 DBMS의 부하를 줄이고, 성능을 높이기 위해 캐시(Cache)를 사용한다.
원하는 데이터가 캐시에 존재할 경우 해당 데이터를 반환하며, 이러한 상황을 Cache Hit라고 한다.
하지만 원하는 데이터가 캐시에 존재하지 않을 경우 DBMS 또는 서버에 요청을 해야하며 이를 Cache Miss라고 한다.
캐시는 저장공간이 작기 때문에, 지속적으로 Cache Miss가 발생하는 데이터의 경우 캐시 전략에 따라서 저장중인 데이터를 변경해야 한다.
Local 장비 내에서만 사용되는 캐시로, Local 장비의 Resource를 이용한다.
Local에서만 작동하기 때문에 속도가 빠르다.
Local에서만 작동하기 때문에 다른 서버와 데이터 공유가 어렵다.
여러 서버에서 Cache Server에 접근하여 사용하는 캐시로 분산된 서버에서 데이터를 저장하고 조회할 수 있다.
네트워크를 통해 데이터를 가져오므로, Local Cache에 비해 상대적으로 느리다.
별도의 Cache서버를 이용하기 때문에 서버 간의 데이터 공유가 쉽다.
시간적 지역성
특정 데이터에 한번 접근해서 가져온 경우, 그 데이터가 가까운 미래에 또 한번 접근할 가능성이 높은 것이 시간적 지역성입니다. 최근에 접근된 데이터를 다시 사용할 가능성이 높다는 의미입니다.
공간적 지역성
특정 데이터와 가까운 주소가 순서대로 접근되었을 경우를 공간적 지역성이라고 합니다.
사용된 데이터의 주변 데이터는 다시 사용될 확률이 높다는 의미입니다.
예를 들어 arr = [1, 2, 3]
이라는 배열이 있을때 arr[0]
, arr[1]
에 접근하면 arr[2]
에 접근할 확률이 높다는 것 입니다.
#Cold miss
해당 메모리 주소를 처음 불러서 나는 미스
#Conflict miss
캐시 메모리에 A와 B 데이터를 저장해야 하는데, A와 B가 같은 캐시 메모리 주소에 할당되어 있어서 나는 미스 (direct mapped cache에서 많이 발생)
항상 핸드폰과 열쇠를 오른쪽 주머니에 넣고 다니는데, 잠깐 친구가 준 물건을 받느라 손에 들고 있던 핸드폰을 가방에 넣었음. 그 이후 핸드폰을 찾으려 오른쪽 주머니에서 찾는데 없는 상황
#Capacity miss
캐시 메모리의 공간이 부족해서 나는 미스 (Conflict는 주소 할당 문제, Capacity는 공간 문제)
캐시 크기를 키워서 문제를 해결하려하면, 캐시 접근속도가 느려지고 파워를 많이 먹는 단점이 생김