헬린코린이

Cache 본문

Programming/알고리즘 & 자료구조

Cache

HCD 2022. 12. 29. 18:51

 

캐시를 한마디로 정의하자면 데이터나 값을 미리 복사해 놓는 임시 저장소입니다.

캐시는 원본 데이터에 접근하는 시간이 오래 걸리는 경우,

값을 다시 계산하는 시간을 절약하고 싶을 경우에 사용하는데

즉 캐시에 데이터를 미리 복사해 놓으므로서 계산이나 접근 시간 없이 더 빠른 속도로 데이터에 접근하기 위해 사용합니다.

 

작동 방식

- 원본 데이터와는 별개로 자주 쓰이는 데이터들을 복사해둘 캐시 공간을 마련한다. 캐시 공간은 상수 시간 등 낮은 시간 복잡도로 접근 가능한 곳을 주로 사용한다.

- 데이터를 달라는 요청이 들어오면, 원본 데이터가 담긴 곳에 접근하기 전에 먼저 캐시 내부부터 찾는다.

- 캐시에 원하는 데이터가 없거나 너무 오래되어 최신성을 잃었으면 그때서야 원본 테이터가 있는 곳에 접근하여 데이터를 가져온다. 이때 데이터를 가져오면서 캐시에도 해당 데이터를 복사하거나 혹은 갱신한다.

- 캐시에 원하는 데이터가 있으면 원본 데이터가 있는 공간에 접근하지 않고 캐시에서 바로 해당 데이터를 제공한다.

- 캐시 공간은 작으므로 공간이 모자라게 되면 안 쓰는 데이터부터 삭제하여 공간을 확보합니다.

 

캐시는 여러군데에서 쓰인다.

사례 1)CPU의 캐시 메모리를 보면

- 현대 CPU는 1초에 최고 수십억 번 작동 가능합니다.

      - 아무리 빠른 주기억장치라도 CPU를 따라가기 어려움

      - 그래서 SRAM이라는 특수한 메모리를 CPU에 넣어 캐시 메모리로 사용

- 최근 출시된 AMD의 3세대 RYZEN CPU는 1.3 캐시 메모리의 용량을

   기존의 2배로 늘려 게이밍 성능을 인텔 제품과 동등한 수준으로 끌어올림

      - 이름 자체를 게임캐시라 지음

      - 캐시가 효율 향상에 중요함을 보여주는 한 사례

 

사례 2) 하드디스크, 데이터베이스

- 하드디스크는 주기억장치에 비해 10만 배 이상 느린 장치

- 처리 효율을 올리려면 자주 쓰이는 데이터를 캐싱해두는 것이 좋다.

- 데이터베이스 또한 쿼리를 실행하여 하드디스크에서 데이터를 읽고 쓰는 것은 시간이 오래 걸리는 작업

- 대게 데이터베이스는 쓰기보다는 읽기가 많으므로 자주 요청받는 쿼리의 결과를 캐싱해두면 효율이 오른다.

- 따라서 데이터베이스 자체에서 별도의 캐시를 운영한다.

       - JPA의 영속성 컨텍스트도 싫은 캐시의 일종이다.

 

사례 3) CDN (Content Delivery Network)

- YouTube의 메인 서버는 미국에 있다.

- 한국과 미국을 잇는 국제 인터넷 회선은 비싸고 용량을 늘리기도 어렵다.

- 구글은 각 통신사마다 Google Global Cache를 두어 인기 있는 YouTube동영상은 미국 서버까지

   접속할 필요 없이 국내 서버에서 처리하도록 하였다.

- 비싼 국제 회선 비용이 절감되고, 버퍼링이 줄어 고화질 서비스의 이용 경험이 개선되었다.

- 이처럼 세계 각지에 캐시 서버를 두어 전송속도를 높이고 부하를 분산하는 시스템이 바로 CDN이다.

 

사례 4) 웹 캐시

- 네트워크를 통해 데이터를 가져오는 것은 하드디스크보다도 느릴 때가 많습니다.

- 그래서 웹 브라우저는 웹 페이지에 접속할 때 HTML, CSS, 자바스크립트, 이미지 등을

   하드디스크나 메모리에 캐싱해 뒀다가 다음번에 다시 접속할 때 이를 재활용합니다.(브라우저 캐시)

- 웹 서버 또한 상당수의 경우 동적 웹 페이지라 할지라도 매번 내용이 바뀌지 않는 경우가 더 많으므로

   서버에서 생성한 HTML을 캐싱해 뒀다가 다음 번 요청에 이를 재활용합니다.(응답 캐시)

- 이와 유사하게 클라이언트에서 자주 요청받는 내용은 웹 서버로 전달하지 않고 웹 서버 앞단의 프록시 서버에서

   캐싱해둔 데이터를 바로 제공하기도 한다. (프록시 캐시)

Comments