프로그램을 동작시키기 위해서는 메모리
에 적재가 되고 CPU
를 할당받아야 동작
CPU
와 메모리(RAM)
사이에서 데이터를 주고받게 되는데 CPU에 비해 비교적 속도가 느린 메모리에 의해서 제대로 성능을 내지 못해 캐시 메모리
를 사용하여 CPU
와 RAM
사이에서 발생하는 병목 현상을 완화
캐시 메모리
는 CPU
사이에 존재하며 캐시 메모리에 데이터가 존재한다면 메모리에 접근할 필요가 없으므로 성능상 이점을 얻을 수 있음
원본 데이터(System-of-Record)
와는 별개로 자주 쓰이는 데이터(Hot Data)들을 복사해둘 캐시 공간을 마련. 캐시 공간은 상수 시간 O(1) 등 낮은 시간 복잡도로 접근 가능한 곳을 주로 사용
CPU
는 메모리
에 접근하기 전에 캐시 메모리
를 먼저 들러 찾고자 하는 데이터가 있는지 확인
필요한 데이터를 찾았을 때 : 적중(Cache Hit)
필요한 데이터를 찾지 못했을 때 : 실패(Cache Miss)
요청한 데이터를 캐시 메모리에서 찾을 확률을 캐시 적중률(cache hit ratio)
이라고 하며 캐시 메모리의 성능은 적중률에 의해 결정
적중률 = 캐시 메모리의 적중 횟수 / 전체 메모리의 참조 횟수
CPU는 데이터를 가져오기 위해서 캐시 메모리 -> 주기억장치(Memory) -> 보조기억장치(Disk)
순으로 접근
Cache Hit
할 경우 : 캐시 메모리에서 데이터를 CPU 레지스터에 복사한다.
Cache Miss
& 메모리에서 찾았을 경우 : 메모리의 데이터를 캐시 메모리에 복사하고, 캐시 메모리에 복제된 내용을 CPU 레지스터에 복사
Cache Miss
& 메모리에서 찾지 못했을 경우 : 보조기억장치에서 메모리에 적재하고 적재된 내용을 캐시 메모리에 복사. 그리고 캐시 메모리의 데이터를 CPU 레지스터에 복사
캐시에 원하는 데이터가 없거나(Cache miss) 너무 오래되어 최신성을 잃으면(Expiration) 원본 데이터가 있는 곳에 접근. 이때, 데이터를 가져오면서 캐시에도 해당 데이터를 복사하거나 혹은 갱신
캐시 공간은 작으므로, 공간이 모자르게 되면 안 쓰는 데이터부터 삭제하여 공간을 확보(Eviction)
웹 브라우저는 웹 피이지에 접속할 때, HTML, CSS, JS, 이미지 등
을 하드디스크나 메모리에 캐싱해 뒀다가 다음 접속때 이를 재활용함 --> 브라우저 캐시
웹 서버 또한 상당수의 경우 동적 웹 페이지라 할지라도 매번 내용이 바뀌지 않는 경우가 더 많으므로, 서버에서 생성한 HTML을 캐싱해뒀다가 다음번 요청에 재활용
클라이언트에서 자주 요청받는 내용은 웹 서버로 전달하지 않고, 웹 서버 앞단의 프록시 서버에서 캐싱해둔 데이터를 바로 제공 --> 프록시 캐시
웹 서버에서 클라이언트에 보내는 HTTP 헤더에 캐시 지시자를 삽입하면, 클라이언트 웹 브라우저에서는 해당 지시자에 명시된 캐시 정책에 따라 캐싱을 실시
캐시의 유효 시간(max-age)이 지나도 캐시된 데이터가 바뀌지 않는 겅우를 확인하기 위해 ETag
라는 유효성 검사 토큰을 이용
캐시 유효 시간을 최대한 길게 잡으면서도 정적(Static) 파일 업데이트를 신속하게 적용하기 위해 정적 파일의 이름 뒤에 별도의 토큰이나 버전 번호를 붙이는 경우도 존재
<script src="test.js?v=1></script>
Remote Dictionary Server의 약자
메모리 기반 오픈소사 NoSQL DBMS의 일종으로, 웹 서비스에서 캐싱을 위해 많이들 씀
캐시에서 사용하는 Dictionary는 Java의 HashMap<key, value>를 생각하면 됨. key를 넣으면 바로 value가 나오는 방식
기본적으로 모든 데이터를 메모리에 저장하여 처리하므로 속도가 빠름
서버 재부팅 때 메모리의 데이터가 휘발되지 않게끔 데이터를 하드디스크에 기록할 수 있음
DBMS의 일종이므로, 명시적으로 삭제하지 않는한 메모리에서 데이터를 삭제하지않음
자체적으로 여러가지 자료형 지원
[출처]