캐시란 무엇인가?

0

CS 지식

목록 보기
1/7

1. 캐시(Cache)란?

  • 책: 프로세서에서 캐시용량이 작고 속도가 빠른 메모리이다.
    주기억장치는 용량이 더 크지만, 훨씬 느리다. 프로세서가 매번 여기에 접근하는 것을 피하기 위해서, 캐시메모리에 최근에 사용된 정보를 저장하는데 사용된다.

  • 데이터나 값을 미리 복사해 놓는 데이터 임시 기억 장소를 가리킨다. 캐시를 이용하지 않았을 때의 데이터 접근 시간이 오래 걸리는 경우나 값을 다시 연산하는 시간을 단축하기 위해 사용된다. 캐시에 데이터를 미리 복사해 놓으면 계산이나 접근 시간 없이 더 빠른 속도로 데이터에 접근할 수 있다. 아래와 같은 저장공간 계층 구조에서 확인할 수 있듯이, 캐시는 저장 공간이 작고 비용이 비싼 대신 빠른 성능을 제공한다. 

2. 캐시 레벨, 종류

  • 일반적인 프로세서에는 캐시가 2~3개 존재한다. 보통, L1, L2, L3 레벨이라고 부른다. 숫자가 뒤로 갈수록 속도는 느리고 용량은 크다.
    가장 큰 캐시가 데이터를 몇 MB단위로 데이터를 담을 수 있다.

  • CPU 내부 캐시
    대용량의 메인 메모리 접근을 빠르게 하기 위해 CPU 칩 내부나 바로 옆에 탑재하는 작은 메모리이다. 1980년대 이후 대부분의 CPU는 하나, 많게는 5-6개까지의 서로 다른 기능을 가진 CPU 캐시를 장착하고 있다. 메모리 접근 속도가 늘어나는 것에 비해 CPU의 처리 속도가 훨씬 빠르게 늘어나고 있기 때문에, 용량은 작지만 속도가 빠른 CPU 캐시는 현재 마이크로프로세서의 성능에 직접적인 영향을 미친다.

  • 그래픽 카드 GPU의 내부 캐시

  • Local Cache
    Local 장비 내에서만 사용되는 캐시로, Local 장비의 Resource를 이용한다.
    Local 에서만 작동하기 때문에 속도가 빠르다.
    Local 에서만 작동하기 때문에 다른 서버와 데이터 공유가 어렵다.

  • Global Cache
    여러 서버에서 Cache Server에 접근하여 사용하는 캐시로 분산된 서버에서 데이터를 저장하고 조회할 수 있다.
    네트워크를 통해 데이터를 가져오므로, Local Cache에 비해 상대적으로 느리다.
    별도의 Cache서버를 이용하기 때문에 서버 간의 데이터 공유가 쉽다.

3. 캐시의 효과 및 특성

  • 캐싱이 효과적인 이유: 최근에 사용된 데이터가 곧 다시 사용될 가능성이 높기 때문이다. (시간적 지역성, 공간적 지역성) 캐시에 데이터를 갖고 있다는 것은 메모리 작업을 기다리는데 시간을 덜 쓴다는 것을 뜻한다.

  • Cache는 아래와 같은 경우에 사용을 고려하면 좋다.
    1) 접근 시간에 비히 원래 데이터를 접근하는 시간이 오래 걸리는 경우(서버의 균일한 API 데이터)
    2) 반복적으로 동일한 결과를 돌려주는 경우(이미지나 썸네일 등)

  • 시간적 지역성
    특정 데이터가 한번 접근되었을 경우, 가까운 미래에 또 한번 데이터에 접근할 가능성이 높은 것을 시간적 지역성이라고 한다.

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

  • 메모리 상의 같은 주소에 여러 차례 읽기 쓰기를 수행할 경우 상대적으로 작은 크기의 캐시를 사용해도 효율성을 꾀할 수 있다.

  • 캐싱과정에서 정보를 블록단위로 동시에 불러온다. 그 이유는 인접한 정보라면 곧 사용될 가능성이 높으므로 미리 불어와 두면 필요시, 캐시에서 바로 꺼내 쓰기 좋기 때문이다.

4. 캐시 사용 확인

  • 예시1) 웹브라우저에서 캐시 삭제화면
    웹브라우저는 특정 웹페이지에 포함된 이미지가 용량이 크거나, 용량이 큰 다른 데이터를 불러와야할 경우, 서버에서 처음부터 다시 다운받는 것보다 이미 갖고 있는 로컬 사본을 사용하면 웹페이지를 더 빠르게 불러올 수 있다.

    그렇다고, 캐시 용량이 무한정 커질 수는 없다. 그래서 오래된 항목부터 제거되고 새로받은 최근 데이터가 캐시에 일부분으로 대체된다.

  • 예시2)캐시로 인한 속도개선 효과를 직접 바로 경험해볼 수 있다.
    예를들어, 워드, 파이어폭스 같은 프로그램을 실행한 뒤, 해당 프로그램을 종료하고, 바로 재시작 해본다. 그러면 보통은 두 번째로 실행했을 때, 로딩시간이 더 짧다. 그 이유는, 해당 프로그램의 명령어아직 메모리에 남아있다. 메모리가 디스크에 대한 캐시로 사용되었기 때문이다.
    시간이 더 흐른다면, 다른 프로그램들을 사용하면서 메모리에는 다른 명령어와 다른 데이터로 채워지고(캐시는 오래된 데이터를 지우고 최근데이터를 우선 담기때문에) 원래 처음에 사용한 프로그램은 더이상 캐싱되지 않을 것이다.

  • 예시3) 워드나 엑셀같은 Office프로그램에서 최근에 사용된 파일 목록을 확인할 수 있다. 이 경우도, 일종의 캐싱이다. 가장 최근에 사용한 파일을 기억하고 있다가 메뉴에 표시되게 하여, 사용자가 처음부터 검색하고 찾아볼 필요가 없게한다. 이경우도, 캐시의 특성에 따라, 오래동안 접근안했던 파일의 이름은 최근에 사용한 파일 목록으로 대체된다.

출처: https://mangkyu.tistory.com/69 [MangKyu's Diary:티스토리]

profile
안녕하세요😄 비전공자의 웹개발자 도전기를 쓰는 중입니다! 수정/보완할 부분이 있다면 피드백 언제든 환영입니다!

0개의 댓글