본문 바로가기

CS/CS 정리

[네트워크] 캐시(Cache)

캐시(Chache)

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

 

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

 

파레토의 법칙과 지역성의 원리

보통 개발을 할 때, "캐시로 처리하겠다"는 "나중에 요청할 결과를 미리 저장해둔 후 요청이 오면 빠르게 처리해 주겠다"는 것을 의미한다.

즉, 미리 결과를 저장하고 나중에 요청이 오면 그 요청에 대해서 DB 또는 API를 참조하지 않고 Cache를 참조하여 요청을 처리하도록 만들겠다는 것이다.

앞서 작성한 것 처럼, 캐시는 자주 사용하는 데이터나 값을 미리 복사해 놓은 임시 장소이기 때문이다.

캐시의 이런 동작 배경에는 파레토 법칙지역성 원리가 있다.

 

파레토의 법칙

파레토 법칙은 "80%의 결과는 20퍼센트의 원인으로 인해 발생한다"는 것이다.

예를 들면, 어떤 가게의 80% 매출이 20%의 단골들에게서 나온다고 생각할 수 있다.

 

그럼 많고 많은 데이터 중, 그 20%의 핵심 데이터를 어떻게 선별할 수 있을까??

그 의문에 답은 지역성 원리를 이용한다는 것이다.

 

지역성 원리는 컴퓨터 과학 분야 이곳저곳에서 심심치 않게 접할 수 있는 개념으로,

데이터 접근 패턴이 특정한 위치에 집중되는 경향이 있다는 것을 의미한다.

좀 더 간단하게 생각해보면, 컴퓨터가 데이터를 사용할 때, 자주 사용하는 데이터는 특정한 위치나 시간에 집중되어 있다는 것이다.

 

위 사진에서 확인할 수 있듯이, 지역성 원리는 크게 3가지로 세분된다.

하지만, 우리가 캐시의 개념을 이해하기위해서는 시간적 지역성(Temporal Locality), 공간적 지역성(Spatial Locality) 두 가지 개념만 알면 된다.

 

시간적 지역성

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

화가가 그림에 색을 칠할 때, 한번 사용한 색은 나중에 또 사용할 가능성이 높다고 생각하면 이해가 쉽다.

 

공간적 지역성

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

CPU 캐시나 디스크 캐시의 경우 한 메모리 주소에 접근할 때, 그 주소뿐 아니라 해당 블록을 전부 캐시에 가져오게 된다. 이때, 메모리 주소를 오름차순이나 내림차순으로 접근한다면, 캐시에 이미 저장된 같은 블록의 데이터를 접근하게 되므로 캐시의 효율성이 크게 향상된다.

 

우리가 요리를 할 때, 소금 후추 간장 같은 양념들을 한 곳에 모아놓는 것과 같다. 소금을 쓰면 보통 후추나 간장도 사용할 가능성이 높기 때문에 같이 두듯이..


캐시의 사용 구조

  1. Client로 부터 요청을 받는다.
  1. Cache와 작업을 한다.
  1. 실제 DB와 작업한다.
  1. 다시 Cache와 작업한다.

 

Cache는 일반적으로 위와 같은 흐름으로 사용된다.

그런데 여기서도 동일한 흐름 내에서 어떻게 사용하느냐에 따라 다시 look aside cache(Lazy Loading)write back으로 나뉜다.

Look aside cache(Lazy Loading)

  1. Cache에 Data존재 유무 확인
  1. Data가 있다면, cache의 Data를 사용
  1. Data가 없다면, cache의 실제 DB Data 사용
  1. DB에서 가져온 Data를 Cache에 저장

Look aside cache는 캐시를 한번 접근하여 데이터가 있는지 판단한 후, 있다면 cache의 데이터를 사용하며 없다면 실제 DB또는 API를 호출하는 로직으로 구현된다. 대부분의 cache를 사용한 개발이 해당 프로세스를 따르고 있다.

 

Write back

  1. Data를 Cache에 저장
  1. Cache에 있는 Data를 일정 기간동안 Check
  1. 모여있는 Data를 DB에 저장
  1. Cache에 있는 Data를 삭제

Write back은 cache를 다르게 이용하는 방법이다.

DB는 접근 횟수가 적을수록 전체 시스템의 퍼포먼스는 좋아진다. 데이터를 쓰거나 많은 데이터를 읽게되면, DB에서 Disk를 접근하게 된다. 이렇게 되면 Application의 속도 저하가 일어날 수 있다. 따라서 Write back은 데이터를 cache에 모으고 일정한 주기 또는 일정한 크기가 되면 한번에 처리하는 것이다.

 


캐시(Cache)를 많이 쓸 수 없는 이유

컴퓨터를 구성하는 메모리 저장공간은 속도가 빠를 수록 용량이 작고 가격이 높다.

그래서 가격 때문에 캐시에 저장할 적은 양의 정보를 잘 선택하는 것이 비용도 절약하고 효율도 높이는 방법이다.


 

'CS > CS 정리' 카테고리의 다른 글

[가볍게 읽는 CS] TCP vs UDP  (1) 2024.07.22
[영상처리] NV21과 YV12의 차이점  (0) 2024.06.24
Bitmap과 YUV의 차이점  (0) 2024.06.24