캐시

JuhyeokLee·2022년 2월 23일
1

CS

목록 보기
1/4

캐시의 개념

캐시는 장치간의 입출력 속도의 차이를 해결하기 위해서 자주 사용하는 데이터를 미리 복사해두는 임의의 장소

캐시를 이해하기 위한 선수개념

메모리 계층(Memory Hierarchy)

  • 컴퓨터에서 메모리의 속도와 용량은 반비례 관계
  • 일반적으로 속도가 빠를수록 용량이 작기 때문에 두가지를 모두 잡기 위해서는 비용이 많이 듦
  • 위와 같은 이유로 데이터 저장공간은 역할을 나눠서 사용하는게 일반적이고 속도와 용량의 관계에 따라 나열하게 되면 위와 같은 피라미드 형태를 구성하게 된다.

파레토의 법칙(캐시의 철학적 개념)

원인의 상위 20% 가 전체 결과의 80%를 만든다는 법칙

데이터 지역성

자주 쓰이는 데이터는 시간적 혹은 공간적으로 한곳에 몰려있을 가능성이 높다.
캐시 메모리는 데이터 지역성(Locality)의 원리를 사용

  • 시간 지역성
    한 번 참조된 데이터는 잠시 후에 또 참조될 가능성이 높다는 성질
    ex) for문의 i값은 해당 for문이 끝나기 까지 계속 사용할 가능성이 높다.

  • 공간 지역성
    데이터 배열에 연속으로 접근할 때 참조된 데이터 근처에 있는 데이터가 잠시 후에 사용될 가능성이 높다는 성질
    ex) for문에서 배열에 접근한다고 할 때 배열이라는 것이 메모리의 데이터를 나열해놓은 것이기 때문에 그 배열의 메모리공간은 계속 사용할 가능성이 높다.

캐시의 작동방식

  1. 원본 데이터와는 별개로 자주 쓰이는 데이터를 따로 캐시공간에 복사해둔다 ex) hash자료구조와 유사
  2. 캐시에 원하는 데이터가 없을 경우는 원본 데이터에 접근하여 가져온다.
  3. 이 때 데이터를 가져오면서 캐시에도 해당 데이터를 복사하거나 갱신한다.
  4. 캐시 공간은 작기때문에 안쓰는 데이터는 삭제하여 공간을 확보 ex)LFU(Least Frequently Used), LRU(Least Recently Used) ...)

캐시를 쓰이는 사례

  1. 하드디스크나 SSD 혹은 아무리 빠른 주기억자치라 할지라도 CPU의 속도를 따라가기엔 어려움 따라서 캐시를 사용한다.
  2. 구글은 각 통신사 마다 구글 글로벌 캐시를 두어 인기있는 유튜브 동영상을 미국 서버까지 접속할 필요없이 처리하도록 한다.(cdn)
  3. 네트워크를 통해 데이터를 가져오는 것은 하드디스크보다도 느릴 때가 많기 때문에 웹 브라우저는 html css js 이미지 등을 하드디스크나 메모리에 캐싱해뒀다가 다시 접속할 때 재활용한다.(브라우저 캐시)

    브라우저 캐시 : 웹 프로그래머가 통제해야 하는 캐시

    • 웹 서버에서 클라이언트에 보내는 http 헤더에 캐시 지시자를 삽입
    • 웹 브라우저는 해당 지시자에 명시된 캐시 정책에 따라 캐싱을 실시
      • 이 때 캐시의 유효 시간이 지나도 캐시된 데이터가 바뀌지 않는 경우를 확인하기 위해 Etag라는 유효성 검사 토큰을 사용
  4. 웹서버 또한 상당수의 경우 동적 웹페이지라 할지라도 매번 내용이 바뀌지 않는 경우가 많으므로 서버에서 생성한 html을 캐싱해두었다가 다음요청에 재활용한다.(응답캐시)
  5. 웹서버 앞단의 프록시 서버에서 캐싱해둔 데이터를 바로 제공하기도 한다.(프록시 캐시)
  6. Redis
    • NoSQL DBMS의 일종으로 웹 서비스에서 캐싱을 위해 사용(해시)
    • 기본적으로 모든 데이터를 메모리에 저장하여 처리하기 때문에 속도가 빠름
    • DBMS의 일종이기 때문에 메모리에서 데이터가 삭제되지 않음
profile
성장하는 개발자가 되겠습니다~

0개의 댓글