캐시 (Cache)

hoo00nn·2021년 1월 27일
0
post-thumbnail

이번 포스팅에서는 Cache에 대한 개념과 왜 필요한지에 대해서 알아보겠다.

캐시란 ?

캐시가 무엇이고 왜 쓰이는지에 대해서 알기위해 몇 가지 기본 지식들을 먼저 알아보자.

메모리 계층 구조

메모리 계층 구조는 필요에 따라 여러가지 종류로 나눈 것을 말하며 간단하게 나타내면 아래와 같이 나타낼 수 있다.

메모리 계층 구조는 몇 가지 특징을 가지고 있다.

  • 데이터를 저장하는 공간의 속도와 용량은 반비례한다.
  • 그렇기 때문에 데이터 저장 공간은 속도와 용량에 따라 특성의 맞게 나누어지고 사용된다.

파레토 법칙

파레토 법칙은 이탈리아 경제학자인 빌브레도 파레토가 발견한 현상으로 전체 결과의 80%는 상위 20%에 의해 발생한다는 것을 말한다.

데이터 지역성의 원리

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

  • 시간 지역성
    - 예를 들어 for문에서 조건 변수 (let i = 0;)를 선언했을 때, 해당 변수는 for문이 끝나기 전까지 계속 쓰일 확률이 높다는 것을 말한다.
  • 공간 지역성
    - 예를 들어 for문에서 어떤 배열에 접근했을 때, 해당 배열이 위치한 메모리 공간은 for문이 끝나기 전까지 계속 쓰일 확률이 높다는 것을 말한다.

위의 개념들을 가지고 있다고 가정하고, 캐시의 필요성에 대해 한 번 생각해보자.

캐시 왜 필요할까 ?

  • 사용자가 동일한 데이터를 요청할 때마다 새로 데이터를 가져와 전달한다면 비효율적이지 않을까?
    -> 자주 쓰이는 데이터를 특정 저장소에 저장하고, 요청이 왔을 때 바로 전달해주면 중복되는 처리과정을 반복하지 않아도 된다.

  • 저장소로 캐시를 사용한다면 훨씬 빠른 속도로 사용자에게 응답을 줄 수 있지 않을까?

  • 캐시는 속도가 빠른 대신 용량이 적다는 문제점이 있지 않을까?
    -> 파레토 법칙을 적용시켜본다면 자주 사용하는 20%를 캐시에 저장한다면 80%의 일을 아주 빠르게 처리할 수 있게 되고, 이는 적은 용량으로도 많은 요청을 처리하기 때문에 매우 효율적이라고 볼 수 있지 않을까?

개인적인 생각으로는 위와 같은 이유로 캐시를 사용한다고 생각한다.

또한, 캐시의 쓰임을 생각했을 때 내가 내린 캐시의 정의나중에 필요할 수도 있는 무언가를 저장하였다가 신속하게 가져다 쓸 수 있는 보관장소 라고 할 수 있을 것 같다.

캐시의 작동 방식

  • 원본 데이터와는 별개로 자주 쓰이는 데이터(Hot Data)를 캐시 저장소에 저장을 한다.
  • 데이터 요청이 들어오면 먼저 캐시를 확인하고, 캐시에 있다면 해당 데이터를 바로 제공한다. (Cache Hit)
  • 만약 캐시에 해당 데이터가 없다면(Cache Miss), 원본 데이터에서 데이터를 가져온 후 캐시 저장소에 새롭게 가져온 데이터를 저장하고 해당 데이터를 제공한다.
  • 캐시 저장소 공간은 작기 때문에 가득 찬다면 LRU와 같은 알고리즘을 이용하여 사용하지 않는 데이터를 삭제한다.

캐시가 쓰이는 사례

CDN (Content Delivery Network)

youtebe를 예로 들어보겠다.

  • Youtebe의 메인서버는 미국에 있다.
  • 한국에서 미국을 오가는 국제 인터넷 회선은 비싸고 용량을 늘리기도 어렵다. (해저 케이블을 깔아야하기 때문에)
  • 이를 위해 Google Global Cache라는 것을 두어 인기 있는 youtube 동영상은 미국 서버에서 직접 가져오는 것이 아닌, 한국 통신사 서버에 저장하고, 한국 통신사 서버에서 빠르게 볼 수 있도록하여 사용하고 있다.

이처럼 세계 각지의 캐시 서버를 두어 전송속도를 높이고 부하를 분산하는 시스템을 CDN이라고 한다.

이 외에도 웹 캐시, 브라우저 캐시가 있다. 캐시가 사용되는 사례에 대해서는 다음 포스팅에서 자세하게 다루겠다.

profile
😀 신기술에 관심이 많고, 함께 성장하고 함께 개발하고 싶은 개발자가 되고 싶습니다. 😀

0개의 댓글