본문 바로가기

내직업은 IT종사자/기타

[Memory] cache란? 캐시(cache)의 동작원리, 캐싱전략(caching strategies)

반응형

 

 

목차

 

 

 

1.  cache란?


“자주 사용하는 데이터나 값을 미리 복사해 놓는 임시 장소”

 

cache 자주 사용하는 데이터나 값을 미리 복사해 놓는 임시 장소를 가리킨다.

아래와 같은 저장공간 계층 구조에서 확인할 있듯이, 캐시는 저장공간이 작고 비용이 비싼 대신 빠른 성능을 제공한다.

 

 

https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZdW35%2FbtqCbTDmFj5%2FAKbAUKiWseStnfD1Cd7gqk%2Fimg.png

 

 

 

 

 

2. cache는 언제 주로 사용하는가?


- 접근 시간에 비해 원래 데이터를 접근하는 시간이 오래 걸리는 경우(ex 서버의 균일한 API데이터)

- 반복적으로 동일한 결과를 돌려주는 경우(ex 이미지, 썸네일)

 

 

 

 

3. cache가 사용되는 과정


https://velog.velcdn.com/images%2Ftyjk8997%2Fpost%2F8032d091-f99e-4c24-bf3e-222207efe6bc%2Fimage.png

 

 

 

(1). 클라이언트가 서버로 데이터를 요청한다.(ex 이미지, 값 등등)
(2). 서버가 요청받은 데이터를 캐시메모리에 있는지 없는지 확인한다.
       데이터가 있다면 캐시 안에 있는 것을 사용한다.
(3). 데이터가 없다면 DB를 뒤적뒤적.
(4). DB에서 가져온 데이터를 캐시에 저장한다.

 

 

*캐싱 전략(caching strategies)

 

캐시로 사용할 때 처리하느냐가 시스템 성능에 큰 영향을 끼치는데 이를 캐싱 전략(caching strategies)라고 한다.

 

 

 

[(1). Look-Aside]

 

 

데이터요청 -> 캐시에서 찾고 -> (있으면) 가지고오고 -> 없으면(Cache Miss) -> DB에서 요청데이터가져옴

 

 

 

이 구조는 캐시가 다운되더라도 DB에서 데이터를 가지고 올 수 있다.

단점: Cache Miss가 난다면 많은 프로세스가 DB로 접근하기 때문에 많은 부하가 생길 수 있다.

 

 

이러한 경우 DB에서 캐시로 데이터를 미리 넣어주는 작업을 하는데 이를 "Cache Warming"이라고 한다. (아래사진 참고)

 

 

 

[(2). Write Back]

 

데이터 저장 -> DB 로가지않고 Cache에 먼저 저장 -> 일정주기 또는 일정한 크기가 되면 -> DB에 저장

Write Back은 먼저 캐시에 데이터를 저장했다가 특정 시점마다 DB에 저장하는 방식

 

 

캐시에 데이터를 모아놨다가 한번에 DB에 저장하기 때문에 DB로 향하는 접근횟수를 줄일 수 있어 전체 시스템의 퍼포먼스가 좋아진다. 

 

단점: 데이터를 옮기기 전에 캐시 장애가 발생하면 데이터 유실이 발생할 수 있다.

 

 

 

 

[(3). Read Through] 

데이터요청 -> 캐시에서 읽어옴 ->(cache miss 나면) -> DB에서 데이터검색 해서 캐시 업데이트 -> 캐시에서 읽어옴

 

Read Through는 캐시에서만 데이터를 읽어오는 전략이다.

 

Cache miss가 발생한다면 캐시는 DB에서 데이터를 검색하고 캐시에 자체 업데이트한 뒤 데이터를 보내준다.

 

 

 

[(4). Write Through]

 

데이터 저장 -> Cache에 먼저 저장 -> 그다음 DB에 저장

 

Write Through는 데이터를 저장할 때 먼저 캐시에 저장한 다음 DB에 저장하는 방식

 

 

단점:

캐시는 항상 최신 정보를 가지고 있지만 저장할때 마다 두 단계 스텝을 거쳐야 하기 때문에 상대적으로 느리다.

또한, 저장하는 데이터가 재사용되지 않을 수도 있는데 무조건 캐시에 넣어버리기 때문에 리소스 낭비가 발생할 수 있음

* 이를 방지하기 위해 캐시에 expire time(데이터가 보관되는 시간 초과시 데이터 삭제) 을 설정하기도 함 

 

 

 

 

 

[(5). Write Around]

 

데이터 저장 -> 모든 데이터 DB저장 -> 읽어온 데이터만 cache에 저장

 

Write Around는 모든 데이터가 DB에 저장되고 읽은 데이터만 캐시에 저장되는 방식이다.

 

주로 Look aside, Read through와 결합해서 사용된다. 

 

 

 

 

 

4. cache 데이터의 지역성


(1). 시간지역성

 

특정데이터가 한번 접근 되었을 경우, 가까운 미래에 또 한번 데이터에 접근할 가능성이 높은것을 말한다.

즉, 한번 가져왔던 데이터를 또 쓸일이 있다는 의미를 말한다.

 

이러한 경우 캐시에 한번 가져와서 저장해놓고 여러번 사용하게 되면 메모리에 접근 하는 횟수가 줄어든다. 

따라서 캐시는 반복적으로 사용되는 데이터가 많을수록 높은 효율성을 낼 수 있다. 

 

 

(2). 공간지역성

 

특정 데이터와 가까운 주소가 순서대로 접근 되었을 경우 공간적 지역성이라고 한다.

CPU 캐시나 디스크 캐시의 경우에는 한 메모리 주소에 접근할 때 그 주소 뿐 아니라 해당 블록을 전부 캐시에 가져오게 된다.

 

이때, 메모리 주소를 오름차순이나 내림차순으로 접근한다면 캐시에 이미 저장된 같은 블록의 데이터를 접근하게 되므로 

캐시의 효율성이 크게 향상된다.

 

다시말하자면, 앞으로 사용할 데이터들이 가져올 블록 안에 모여있는 것을 말하는 것이다. 

필요한 데이터가 모여있다면 한번만 메모리에 접근해도 필요한 데이터들을 가져올 수 있다는 것이다.

 

만약 데이터가 모여있지 않다면 Cache Miss가 날 확률이 높아지고 메모리에 여러번 접근하게 되어 효율성이 떨어지게 된다.

 

 

 

오늘도 공부 끝!

 

 

출처: https://yoongrammer.tistory.com/101#Look-Aside,

https://velog.io/@tyjk8997/%EC%BA%90%EC%8B%9C%EC%99%80-%EA%B6%81%EA%B8%88%ED%95%9C%EC%A0%90

 

 

 

 

잘못된 정보에 대한 피드백은 언제나 환영입니다  (´▽`ʃƪ)♡

반응형