ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [IT] 캐시란? Cache is Cash
    IT knowledge 2021. 7. 22. 23:53

     

    캐시(cache)


     

     

    캐시(cache)
    데이터나 값을 미리 복사해 놓는 임시 장소

    사전적 정의


     

    웹 브라우저에 캐시, CPU의 캐시, 데이터베이스의 캐시 등 많은 곳에서 캐시라는 개념이 사용되고 있습니다. 정확하게 캐시가 무엇인지 정리해 보겠습니다!

     

     

    캐시는 어떻게 등장 했을까


    이탈리아의 경제학자 빌프레도 파레토는 아주 명백한 사실을 하나 발견합니다.

     

     

    이탈리아의 상위 20%의 인구가 80%의 부를 소유하고 있잖아?

     

    빌프레도 파레토가 관찰해낸 이 사실은 매우 다양한 분야에서도 통용되는 통계적인 법칙이 되었습니다.

     

    바로 파레토의 법칙입니다.

    파레토의 법칙

    예를들어,

    백화점의 20%의 VIP 고객의 지출이 백화점에서 나오는 전체 매출 80%를 차지한다.

    상위소득 20%의 국민이 전체 국가 세금의 80% 차지한다.

    많이 쓰이는 단어 20%가 언어 사용빈도의 80%를 차지한다.

     

    위와 같이 많은 곳에서 파레토의 법칙이 관찰됩니다.

     

    마찬가지로 프로그래밍에서도 자주 그리고 반복해서 사용하게 되는 데이터들이 있습니다. 이러한 데이터를 빠르게 접근하여 사용할 수 있으면 프로그램의 성능도 향상될 것입니다! 이렇게 탄생한 것이 캐시(cache) 입니다!

     

     

     

    어떤 정보를 캐시에 담아야 할까


    모든 데이터를 캐시에 담기에는 캐시라는 저장 공간은 작다. 그렇기 때문에 파레토의 법칙에 해당하는 소수의 선택받은(?) 데이터를 선별해야한다. 이때 사용되는 것이 지역성이다.

     

     

    시간적 지역성

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

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

     

    공간적 지역성

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

     

    순차 지역성

    공간 지역성과 함꼐 설명되기도 한다. 데이터가 순차적으로 엑세스되는 경향을 보인다. 프로그램 내의 명령어가 순차적으로 구성된다.

     

     

     

    캐시 더 많이 쓰면 좋은 것 아니야?


    그렇다면 한가지 의문이 들 수 있습니다. 캐시를 사용하면 저장된 데이터에 접근하는 속도가 더 빠르니 '모든 데이터를 캐시에 담아두면 되지 않을까?' 하고 말입니다. 물론 그렇게 하면 좋겠지만 문제는 돈입니다. 

     

    컴퓨터를 구성하는 메모리 저장공간은 속도가 빠를 수록 용량이 작고 가격이 높습니다. 지금 당장 쇼핑몰에 HDD와 RAM을 검색해보면 GB당 가격차이는 HDD는 약 52~ 56원 RAM은 6900~7000원정도 입니다.

     

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

     

    메모리 계층 구조

     

    캐시의 동작 방식


    #1 데이터를 달라는 요청이 오면 먼저 캐시에서 데이터를 찾는다.

    #2 캐시가 없거나(cache miss) 너무 오래되면(expiration) 원본 데이터가 저장된 곳에서 데이터를 조회한다.

    이때 캐시에도 데이터를 복사하거나 갱신한다.

    #3 캐시에 데이터가 있으면(cache hit) 캐시의 저장된 데이터를 제공한다.

    #4 캐시는 용량이 작은 공간으로 사용하지 않거나 오래된 데이터는 삭제한다.(eviction)

     

     

     

     

    Post


    •  

    References


     


     

    잘못된 코드나 내용이 있다면 댓글을 남겨주세요. 즉시 수정하도록 하겠습니다! :)

     

     

    댓글