반응형

서버 성능을 높여주는 캐시(Cache)란?

컴퓨터 과학에서 데이터나 값을 미리 복사해 놓는 임시 장소를 가리킨다. 만약 짧은 시간 동안 동일한 요청이 여러 번 발생할 경우, 해당 요청의 결과를 캐시에 저장한다면 서버의 처리 속도를 높일 수 있다. N건의 처리를 해야했었는데, 1건만 처리 후에 캐시에 저장해두면 이후 결과는 캐시 메모리에 접근하여 얻을 수 있다!

캐시는 각 레이어별로 적용이 가능하다. (DB, WAS, Web server에서 각각 가능하다는 뜻)

 

  • 캐시에 저장하는 방식

- 사용할 결과를 그대로 저장 (빠르지만 많은 메모리 소요)

- 구조화하여 저장 (조금 느리지만 보다 효율적인 메모리 사용 가능)

 

  • 지역성을 고려한 설계

- 시간적 지역성 (Temporal Locality) : 특정 데이터가 한번 접근되었을 경우, 가까운 미래에 또 한번 데이터에 접근할 가능성이 높은 것을 시간적 지역성이라고 한다. 메모리 상의 같은 주소에 여러 차례 읽기 쓰기를 수행할 경우 상대적으로 작은 크기의 캐시를 사용해도 효율성을 꾀할 수 있다.

보통 LRU, MRU, FIFO, LIFO 알고리즘을 많이 적용한다 :) 

- 공간적 지역성 (Spatial Locality) : 읽은 곳 근처의 데이터를 접근하는 경우 사용. 프리페치(prefetch). 보통 OS 만들 때 사용된다. 


내 업무에 적용해보기

1. 한번 캐싱된 데이터는 어느정도 보관하는 것이 적당할까?

업무마다 다르겠지만...

일단 추론을 하기 위해서 객관적인 자료를 알아야 한다.

얼마나 많은 사용자가 함께 접속하는 지, 어떤 유형의 요청이 많은 지 등...

고객을 알고 나의 서버를 알아야 한다.

참고LINE 메시징 서버가 새해 트래픽을 대비하는 과정 : https://engineering.linecorp.com/ko/blog/how-line-messaging-servers-prepare-for-new-year-traffic/

2. 캐싱된 데이터는 어느 시점에 업데이트를 할까?

내 업무에서 업데이트하는 서버와 캐싱된 데이터를 제공하는 서버가 다르다.

DB 업데이트가 있을 때 캐싱된 데이터를 업데이트하는 것도 좋지만,

내 업무에서는 캐시 주기를 짧게 해(1분~5분) 캐시를 업데이트하는 것으로도 충분해 보인다.

하지만 내 업무 서버는 동접수를 알 수 없다.. 체크하지 않고 있기 때문이다..

캐시를..감각적으로..해야할..것..같..다 

 

[참고자료]

python LRU cache 적용 : https://medium.com/better-programming/every-python-programmer-should-know-lru-cache-from-the-standard-library-8e6c20c6bc49

반응형