캐시

캐시란 무엇일까?

1. 캐시란?

캐시(Cache)자주 사용하는 데이터나 값을 미리 복사해 놓는 임시 장소 이다.


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


캐시 저장소


캐시는 아래와 같은 경우에 사용을 고려하면 좋다.

  • 접근 시간에 비해 원래 데이터를 접근하는 시간이 오래 걸리는 경우(서버와 균일한 API 데이터)
  • 반복적으로 동일한 결과를 돌려주는 경우(이미지나 썸네일)



2. 캐시 필요할까?

캐시는 반복적으로 데이터를 불러오는 경우에, 지속적으로 DBMS 혹은 서버에 요청하는 것이 아니러 Memory에 데이터를 저장하였다가 불러다 쓰는 것이다.


파레토 법칙으로 80%의 결과는 20%의 원인으로 인해 발생하한다는 뜻인데 이러한 원리는 캐시에서도 적용된다.


파레토 법칙


우리는 서비스를 할 때 많이 사용되는 20%를 캐싱한다면 전체적으로 영향을 주어 효율을 극대화 할 수 있다는 말입니다.

캐시는 저장공간이 작기 때문에, 지속적으로 Cache Miss가 발생하는 데이터의 경우 캐시 전략에 따라서 저장중인 데이터를 변경해야 한다.

Cache Hit
원하는 데이터가 캐시에 존재할 경우 해당 데이터를 반환

Cache Miss
원하는 데이터가 캐시에 존재하지 않을 경우 DBMS 또는 서버에 요청


3. 캐시 지역성

모든 데이터를 캐시에 담기에는 저장 공간이 그리 크지않기 때문에 힘들다. 그래서 보통 캐시는 지역성을 나누어 분류한다.


캐시 지역성

시간적 지역성

특정 데이터가 한번 접근되었을 경우 가까운 미래에 또 한번 데이터에 접근할 가능성이 높은 것을 말한다. 즉, 한번 가져왔던 데이터를 또 쓸 일이 있다는 의미를 말한다.


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

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

공간적 지역성

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


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

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

  • 사용할 데이터들이 가져올 블록안에 모여있는 것, 필요한 데이터가 모여있다면 한번만 메모리에 접근해도 필요한 데이터들 가져올 수 있다는 것

순차 지역성

공간 지역성과 함께 설명되기도 한다. 데이터가 순차적으로 액세스되는 경향을 보이며 프로그램 내의 명령어가 순차적으로 구성된다.


4. 캐시의 사용 구조


캐시 사용 구조


① Client로 부터 요청을 받는다.

② Cache와 작업을 한다.

③ 실제 DB와 작업을 한다.

④ 다시 Cache와 작업을 한다.


캐시는 일반적으로 flow로 사용됩니다. 동일한 flow에서 어떻게 사용함에 따라 look aside cache(lazy loading)write back으로 나눌 수 있다.


look aside cache(lazy loading)

캐시를 한번 접근하면 데이터가 있는지 판단한 후, 있다면 캐시의 데이터를 사용하며 없다면 실제 DB 또는 API를 호출하는 로직으로 구현됩니다.

  1. Client에 Data 존재 유무 확인

  2. Data가 있다면 Cache의 Data 사용

  3. Data가 없다면 Cache의 실제 DB Data 사용

  4. DB에서 가져온 Data를 Cache에 저장


  • 대부분의 캐시를 사용한 개발이 해당 프로세스를 따르고 있습니다.


write back

write back는 캐시를 다르게 이용한 방법이다. DB는 접근 횟수가 적을 수록 전체 시스템의 퍼포먼스는 좋아진다.

데이터를 쓰거나 많은 데이터를 읽게되면 DB에 디스크를 접근하게 되며 Application의 속도 저하가 일어날 수 있다.

  • 데이터를 캐시에 모으고 일정한 주기 또는 일정한 크기가 되면 한번에 처리하는 것이다.


  1. Data를 Cache에 저장

  2. Cache에 있는 Data를 일정 기간동안 체크

  3. 모여있는 Data를 DB에 저장

  4. Cache에 있는 Data 삭제



5. 웹 캐시란?

웹 캐시(Web Cache) 는 사용자(Client)가 웹 사이트(Server)에 접속할 때, 정적 컨텐츠(이미지, JS, CSS 등)를 특정 위치(Client, Network등)에 저장하여, 웹 사이트 서버에 해당 컨텐츠를 매번 요청하여 받는 것이 아니라,

  • 특정 위치에서 불러옴으로써 사이트 응답시간을 줄이고 서버 트래픽 감소 효과를 볼 수 있는 것을 말한다.



참고

캐시/ 웹 캐시(Cache)란? (개념/ 사용 이유/ 장점/ 동작 원리)

캐시란 무엇인가

[Server] Cache(캐시)란?


© 2021. All rights reserved.

Powered by Hydejack v9.1.6