해당 포스트의 목적
F-LAB 멘토링의 과제로, 캐시란 정확히 무엇인지 알아보고자 한다. 현업에서 대충 들어서 어설프게 알고있는 오개념들을 정리하고, 앞으로는 명확히 알고 쓰는것을 목표로 한다.
캐시(Cache)란 무엇인지?
Cache란
자주 사용하는 데이터나 값을 미리 복사해 놓는 임시 장소
를 가리킨다.
Cache는 저장공간이 작고, 빠를 수록 비싸고, 싸고 느릴수록 저장공간은 더 커진다!
https://mangkyu.tistory.com/69
Cache는 아래와 같은 경우에 사용하면 좋다.
- 반복적으로 동일한 결과를 돌려주는 경우(이미지나 썸네일)
- Cache 접근시간에 비해 원래 데이터에 접근하는 시간이 오래걸리는 경우(서버의 균일한 API데이터)
Cache란 반복적으로 데이터를 불러오는 경우에, DBMS 혹은 서버에 요청하는 것이 아니라
Memory에 데이터를 저장하였다가 불러다 쓰는 것
을 의미한다. Enterprise급 Application에서는 DBMS의 부하를 줄이고, 성능을 높이기 위해 캐시(Cache)를 사용한다. 원하는 데이터가 캐시에 존재할 경우 해당 데이터를 반환하며, 이러한 상황을 Cache Hit라고 한다. 하지만 원하는 데이터가 캐시에 존재하지 않을 경우 DBMS 또는 서버에 요청을 해야하며 이를 Cache Miss라고 한다. 캐시는 저장공간이 작기 때문에, 지속적으로 Cache Miss가 발생하는 데이터의 경우 캐시 전략에 따라서 저장중인 데이터를 변경해야 한다.
캐시(Cache)의 필요성
https://mangkyu.tistory.com/69
위의 그래프는 Long Tail 법칙의 그래프이다. Long Tail 법칙은 20% 요청이 시스템 리소스의 대부분(80%)을 사용한다는 법칙이다.
상위 20%의 요청만 캐시(Cache)를 사용해도 전체 80%리소스가 절감 될 것이고, 성능은 대폭 향상 될 것이다.
캐시의 작동원리
앞서 배운 내용을 토대로, 캐시메모리에는 "자주사용 하는 데이터"를 위치시켜야 유리하다는 것을 알수있다. 그러면 이 "자주사용 하는 데이터"는 어떻게 판단 할까?
"자주 사용하는 데이터"에 대한 판단은 지역성의 원리를 따른다. 지역성의 원리는 시간적 지역성(Temporal Locality)와 공간적 지역성(Spataial Locality)가 있다.
- 시간적 지역성(Temporal Locality)최근 접근한 데이터에 자주 접근하는 특성을 말한다.(점심시간에 카페에 아이스아메리카노를 찾는 현상이 높아지는 경우...)
int[] arr = new int[6]; for(int i=0; i<10; i++){ arr[i] = i+1 }
- 예를 들면 for문의 인덱스 변수의 경우 짧은 시간에 여러번의 접근이 이루어진다.
- 공간적 지역성(Spatial Locality)최근 접근한 데이터의 주변 공간을 접근하는 특성을 말한다.컴퓨터는 메모리에서 데이터를 읽어올때, 메모리의 주소를 이용해 가져온다. 이때 해당 데이터만 가져오는 것이 아니라, 해당 데이터의 블록을 읽어오는 특성이 있다.
- (상사에게 자료보고시, 해당년도 자료외에도 3개년치 정도의 자료를 혹시 몰라서 가져갈때!....)
- 💡
- 위 그림을 예시로 들면, arr이라는 int형 배열의 요소에 계속 접근하는 것을 볼수 있다.
컴퓨터 공학에서 캐시란 어떤 의미로 쓰이는지?
"캐시"란
속도가 다른 두 장치 사이에서 속도차이를 메워주는
장치다.
모든 기기들의 데이터 전송 속도와 대역폭이 같다면, 매우 이상적이겠지만, 현실은 그렇지 않다. 이렇게 속도와 대역폭이 차이나는 기기들간의 속도를 조절해 주는 것이 캐시이다.
빠른 속도를 내는 기기에게는 미리 데이터를 준비함으로써 최적의 효율을 끌어내고, 느린 속도를 내는 기기에게는 처리할 데이터를 대신 받아 줌으로써, 다른 기기가 기다리는 일을 줄어들게끔 도와준다.
예를 들어보자. 데이터처리속도가 100MB/s인 메모리와, 1MB/s인 하드디스크가 있다. 이때 용량이 50MB인 데이터를 디스크에서 읽어와야할 상황이 생겼다. 메모리는 0.5초에처리 할것을, 하드디스크는 50초의 시간을 사용해야 하며, 이후 디스크로부터 메모리가 읽는시간0.5까지 추가로 발생한다. 이런 현상을 극복하기 위해 캐시(Cache)라는 장치가 탄생했다.
만약 메모리의 특정 영역을 캐시하고, 위의 상황에서 50MB중 30MB가 캐시되어있었다면, 20MB만 하드디스크에서 읽어오면 되고, 시간은 20초로 줄어든다. (데이터를 미리준비)
또 반대로, 20MB의 데이터를 연산해야 한다고 하자. 디스크를 통해 연산한다면, 20초가걸릴수 있으나, 캐시(Cache)메모리로 연산을 한다면, 0.2초에 끝날 것이다. (처리할 데이터를 대신 받기)
💡
2020.05.12 수정
CPU에서 연산된 값들을 바로바로 메인메모리에 저장하지 않고, 캐시(Cache)메모리에 저장후, 캐시(Cache)메모리에서 메인 메모리로 한번에 저장할 때가 있다. (버퍼의기능과 매우 유사하며, 데이터를 대신 받기에 해당한다.)
해당 포스트를 작성하며 알게된점
캐시의 대한 기본적인 개념을 잘못 알고 있었다. 그저 성능을 빠르게 해주기 위해 별도로 생겨난 메모리 공간 이라고만 생각해 왔었다. 물론 틀린 말은 아니지만, 캐시메모리의 본질적인 탄생이유는 각 기기간의 속도차이에 따른병목현상을 완충해주기 위함이고, 그런 과정에서 성능이향상 되는것을 알았다. 또한, 캐시메모리에 자주사용하는 데이터들을 저장해, 빠르게 읽어오는 것만이 캐싱이라 생각했지만, 데이터 연산시 속도가 느린 매체대신 해당 연산들을 받아줌으로써 빠른 연산을 실행 할 수 있다는 점도 같이 알게되었다.
Reference
- 캐시란?https://mangkyu.tistory.com/69
- 캐시란 무엇인가?https://act.jinbo.net/wp/1066/
- 캐시? 캐시란 무엇인가?https://wh00300.tistory.com/79
- 인터넷 세상에서의 캐싱http://www.inven.co.kr/webzine/news/?news=172478&site=bangdream
- 왜 캐시를 사용하는가?https://charsyam.wordpress.com/2016/07/27/입-개발-왜-cache를-사용하는가/
- 캐시메모리와 버퍼메모리의 차이https://lascrea.tistory.com/140
- https://ryusstory.tistory.com/entry/Cache-Buffer-캐쉬와-버퍼
- 캐시-나무위키https://namu.wiki/w/캐시 메모리?from=캐시메모리#s-2.3
- 아마존 -캐싱의 사레https://aws.amazon.com/ko/caching/
'프로그래밍 > Java' 카테고리의 다른 글
String의 == 연산시 동작 (0) | 2021.05.13 |
---|---|
equals() 와 == (0) | 2021.05.12 |
Buffer VS Cache (0) | 2021.05.12 |
캐시는 어느영역에서 사용되나? (0) | 2021.05.11 |
String (2) | 2021.05.10 |