Computer Science/테크톡 정리

[CS 정리]캐시 정리

미스터로즈 2021. 8. 21. 10:53

우아한 테크톡 관련된 유튜브 강의 정리 내용입니다.

정확한 내용을 학습하고 싶으면 강의 링크를 참고하시면 됩니다.

 


메모리 계층 구조

데이터를 저장하는 공간의 속도와 용량은 반비례 관계

  • 속도가 빠른 메모리 일수록 용량이 작음
  • 용량이 큰 저장장치는 속도가 느림
  • 둘 다 잡기에는 비용이 많이 듬
  • 그래서 데이터 저장 공간은 속도와 용량에 따라 특성에 맞게 역활을 나누어서 사용합니다.

데이터 저장 공간을 속도 - 용량 순서도래 쌓으면 마치 피라미드와 같은 형상이 나타납니다.

 

파레토의 법칙

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

2대 8 법칙이라고도 합니다.

 

데이터 지역성의 원리

자주 쓰이는 데이터는 시간적 혹은 공간적으로 한 곳에 몰려 있을 가능성이 높습니다.

 

  • 시간 지역성
  • 공간 지역성


캐시 란? 

사전적 의미

나중에 필요할 수도 있는 무언가를 저장하였다가 신속하게 회수할 수 있는 보관 장소로, 어떤 식으로든 보호되거나 숨겨진다.

 

캐시의 작동 방식

  • 원본 데이터와는 별개로 자주 쓰이는 데이터들을 복사해둘 캐시 공간을 마련합니다. 캐시 공간은 상수 시간등 낮은 시간 복잡도로 접근 가능한 곳을 주로 사용합니다.
  • 데이터를 달라는 요청이 들어오면, 원본 데이터가 담긴 곳에 접근하기 전에 먼저 캐시 내부부터 찾습니다.
  • 캐시에 원하는 데이터가 없거나 너무 오래되어 최신성을 잃었으면 그때서야 원본 데이터가 있는 곳에 접근하여 데이터를 가져옵니다. 이때 데이터를 가져오면서 캐시에도 해당 데이터를 복사하거나 혹은 갱신합니다.
  • 캐시에 원하는 데이터가 있으면 원본 데이터가 있는 공간에 접근하지 않고 캐시에서 바로 해당 데이터를 제공합니다.
  • 캐시 공간은 작으므로, 공간이 모자라게 되면 안 쓰는 데이터부터 삭제하여 공간을 확보합니다.

캐시가 쓰이는 사례

 

CPU의 캐시 메모리

현대의 CPU는 1초에 최고 수십억 번의 작동이 가능함

  • 아무리 빠른 주기억장치라도 CPU를 따라가기 어려움
  • 그래서 SRAM이라는 특수한 메모리를 CPU에 넣어 캐시 메모리로 사용

최근 출시된 AMD의 3세데 RYZEN CPU는 L3 캐시 메모리의 용량을 기존의 2배로 늘려 게이밍 성능을 인텔 제품과 동등한 수준으로 끌어올림

 

하드디스크, 데이터 베이스

  • 하드디스크는 주기억장치에 비해 10만 배 이상 느린 장치입니다.
  • 처리 효율을 올리려면 자주 쓰이는 데이터를 캐싱해두는 것이 좋습니다.
  • 데이터베이스 또한 쿼리를 실행하여 하드디스크에서 데이터를 읽고 쓰는 것은 시간이 오래 걸리는 작업입니다.
  • 대개 데이터베이스는 쓰기보다는 읽기가 많으므로 자주 요청받는 쿼리의 결과를 캐싱해두면 효율이 오릅니다.
  • JPA의 영속성 컨텍스트도 실은 캐시의 일종입니다.

 

CDN (Content Delivery Network)

  • 구글은 각 통신사마다 Google Global Cache를 두어 인기 있는 유튜브 동영상은 미국 서버까지 접속할 필요 없이 국내 서버에서 처리하도록 했습니다.
  • 비싼 국제 회선 비용이 절감되고, 버퍼링이 줄어 고화질 서비스의 이용 경험이 개선되었습니다.

이처럼 세계 각지에 캐시 서버를 두어 전송속도를 높이고 부하를 분산하는 시스템이 바로 CDN입니다.

 


웹 캐시

  • 네트워크를 통해 데이터를 가져오는 것은 하드디스크보다도 느릴 때가 많습니다.
  • 그래서 웹 브라우저는 웹 페이지에 접속할 때, HTML, CSS, 자바스크립트, 이미지 등을 하드디스크나 메모리에 캐싱해 뒀다가 다음 번에 다시 접속할 때 이를 재활용합니다. (브라우저 캐시)
  • 웹 서버 또한 상당수의 경우 동적 웹 페이지라 할지라도 매번 내용이 바뀌지 않는 경우가 더 많으므로, 서버에서 생성한 HTML을 캐싱해 뒀다가 다음 번 요청에 이를 재활용합니다. (응답 캐시)
  • 이와 유사하게, 클라이언트에서 자주 요청받는 내용은 웹 서버로 전달하지 않고, 웹서버 앞단의 프록시 서버에서 캐싱해둔 데이터를 바로 제공하기도 합니다. (프록시 캐시)

 

브라우저 캐시

  • 웹 서버에서 클라이언트에 보내는 HTTP 헤더에 캐시 지시자를 삽입하면, 클라이언트 웹 브라우저에서는 해당 지시자에 명시된 캐시 정책에 따라 캐싱을 실시합니다.
  • 캐시의 유효 시간이 지나도 캐시된 데이터가 바뀌지 않은 경우를 확인하기 위해 ETag라는 유효성 검사 토큰을 사용합니다.
  • 때로는 캐시 유효 시간을 최대한 길게 잡으면서도 정적 파일의 업데이트를 신속히 적용하기 위해 정적 파일의 이름 뒤에 별도의 토큰이나 버전 번호를 붙여야 하는 경우가 있습니다.
  • 캐시 정책은 해당 웹페이지의 전반적인 상황에 따라 각 파일마다 다르게 적용되어야 합니다.
  • 적어도 정적 파일과 동적인 부분의 브라우저 캐싱 정책은 달라야 합니다. 비공개 정보가 담긴 페이지는 보안상 아예 캐싱을 막아야 할 수도 있습니다.

Redis

  • 메모리 기반 오픈소스 NoSQL DBMS의 일종으로, 웹 서비스에서 캐싱을 위해 많이 사용합니다.
  • Dictionary는 Java의 HashMap< Key , Value >을 생각하면 됩니다.
  • 기본적으로 모든 데이터를 메모리에 저장하여 처리하므로 속도가 빠릅니다.
  • 서버 재부팅 때 메모리의 데이터가 휘발되지 않게끔 데이터를 하드디스크에 기록할 수 있습니다.
  • DBMS의 일종이므로, 명시적으로 삭제하지 않는 한 메모리에서 데이터를 삭제하지 않습니다.

 

EHchche

  • Java의 표준 캐싱 API 명세로 오픈소스 캐시 구현체입니다.
  • Spring 프레임워크나 Hivernate ORM 등에서 사용이 가능합니다.
  • Java 진영에서 가장 널리 사용이 됩니다.
  • 캐시 저장공간을 속도에 따라 여러 등급으로 나누어 메모리 계층 구조를 적용 가능합니다.
  • 메모리에 캐시된 내용을 하드디스크에 기록이 가능합니다.
  • 대규모 서비스에서 캐시 서버 여럿을 클러스터로 묶을 수 있는 기능을 제공합니다.