캐시는 프로세서의 속도를 따라가지 못하는 메인메모리를 보완하여
처리속도를 빠르게 개선하기 위한 장치입니다.
위키백과에는 다음과 같이 정의되어있습니다.
"데이터나 값을 미리 복사해서 놓는 임시 장소를 의미한다."
정의된 대로 캐시는 주 메모리 이외에 캐시메모리라는 공간을 의미하며
이 공간에 데이터를 미리 복사해두고 아래와 같은 데이터에 빠르게 접근할 수 있게끔 해줍니다.
1. 자주 접근하게 되는 경우
'자주 접근한다'는 지역성의 원리
에 기반하여 판단합니다.
지역성은 시간지역성
과 공간지역성
으로 나뉘어집니다.
- 시간지역성
최근 접근한 데이터에 다시 접근하는 경향
- 공간지역성
접근한 데이터 주변에 있는 데이터에 다시 접근하는 경향
2. 값을 다시 계산하여 써야하는데 이 계산시간이 오래 걸리는 경우
또한 캐시는 반응속도 자체가 빠른 SRAM임과 동시에
주소가 키로 주어졌을떄 바로 접근할 수 있는 해시테이블 형식의 하드웨어이므로
접근시간자체도 O(1)정도로 매우 빨라 시스템 성능향상에 큰 역할을 합니다.
웹서버가 캐시에 접근하는 원리는 다음과 같습니다.
장고에서 지원하는 기본 캐시 중 가장 빠르고 효율적인 것은 Memcached
입니다.
DB나 API호출 이후 받아오는 결과데이터를 작은단위(청크)의 key-value 형태로 메모리
에 저장하는 형식이며 CPU가 처리할 데이터를 임시로 저장하는 RAM에 데이터 및 오브젝트를 캐시함으로써 데이터를 읽는 횟수를 줄이는 방식을 사용합니다.
이를 통해 디스크를 거치지 않으므로 속도가 매우 빠르다는 장점도 있습니다.
Memcached를 사용하면 서버단에서는 부족한 메모리를 충족시키기 더욱 좋아지는데요.
- 기존
하나의 웹서버에서 쓸 수 있는 메모리가 정해져있고,
한 서버당 정해진 크기의 메모리만 사용할 수 있습니다.
- Memcached 도입 후
웹서버에서 쓸 수 있는 메모리들을 논리적으로 결합시켜
각각의 웹서버는 전체 메모리 캐시 크기만큼 사용할 수 있게 됩니다.
이처럼 Memcached를 사용하면 웹서버들이 할당된 메모리가 아닌
전체 캐시 크기만큼 메모리를 사용할 수 있어 부족한 메모리를 쉽게 융통할 수 있습니다.
참고
https://docs.djangoproject.com/en/3.1/topics/cache/
https://testdriven.io/blog/django-caching/#:~:text=Redis%20vs%20Memcached,%2C%20key%2Dvalue%20data%20stores.&text=Redis%2C%20on%20the%20other%20hand,in%20a%20pub%2Fsub%20system.
https://ko.wikipedia.org/wiki/Memcached
http://milooy.github.io/TIL/Django/django-cache.html#%E1%84%8F%E1%85%A2%E1%84%89%E1%85%B5
https://parksb.github.io/article/29.html#:~:text=%F0%9F%92%B5%20%EC%BA%90%EC%8B%9C%EA%B0%80%20%EB%8F%99%EC%9E%91%ED%95%98%EB%8A%94%20%EC%95%84%EC%A3%BC%20%EA%B5%AC%EC%B2%B4%EC%A0%81%EC%9D%B8%20%EC%9B%90%EB%A6%AC,-%ED%95%98%EB%93%9C%EC%9B%A8%EC%96%B4%EB%A1%9C%20%EA%B5%AC%ED%98%84&text=%EA%B8%B0%EC%88%A0%EC%9D%98%20%EB%B0%9C%EC%A0%84%EC%9C%BC%EB%A1%9C%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%84%9C,%EB%B0%94%EB%A1%9C%20%EC%BA%90%EC%8B%9C(Cache)%EB%8B%A4.
http://melonicedlatte.com/computerarchitecture/2019/02/12/203749.html