이론 공부

캐시 (Cache) / 캐싱 (Caching)

Yuco 2023. 3. 28. 22:51

캐시 (Cache)

 

1) 캐시 메모리

속도가 빠른 장치와 느린 장치 간의 속도 차에 따른 병목 현상을 줄이기 위한 범용 메모리 (컴퓨터의 성능 향상) (CPU와 주기억장치의 속도 차이) 
메인 메모리와 CPU 사이에 위치하며, CPU의 속도에 버금갈 만큼 메모리 계층에서 가장 속도가 빠르지만, 용량이 적고 비쌈
메인 메모리에서 자주 사용하는 프로그램과 데이터를 저장해두어 속도를 빠르게 함
 

 

2) 지역성

CPU가 어떤 데이터를 원하는지 어느 정도 예측할 수 있어야 함 (작은 크기의 캐시 메모리에 CPU가 이후에 참조할 정보가 어느 정도 들어있는지에 따라 캐시의 성능이 결정되기 때문에)

- 공간 지역성 : 최근에 사용했던 데이터와 인접한 데이터가 참조될 가능성이 높다는 특성

- 시간 지역성 : 최근에 사용했던 데이터가 재참조될 가능성이 높은 특성

 

3) 캐시 작동 방식

- 원본 데이터와는 별개로 자주 쓰이는 데이터 (Hot Data) 들을 복사해둘 캐시 공간을 마련. 캐시 공간은 상수 시간 등 낮은 시간 복잡도로 접근 가능한 곳 (접근 시간이 원본 데이터에 접근 하는 속도보다 훨씬 빠르게 접근 가능한 곳)을 주로 사용

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

- 캐시에 원하는 데이터가 없거나, 너무 오래되어 최신성을 잃었으면(Expiration) 그 때, 원본 데이터가 있는 곳에 접근하여 데이터를 가져옴, 이 때 데이터를 가져오면서 캐시에도 해당 데이터를 복사하거나 갱신

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

- 캐시 공간은 작으므로, 공간이 모자라게 되면 안쓰는 데이터부터 삭제하여 공간을 확보 (Eviction) 

 

캐싱 (Caching) 

- 캐시 영역으로 데이터를 가져와서 접근하는 방식, 예를 들면 속도가 느린 디스크의 데이터를 속도가 빠른 메모리로 가져와 메모리상에서 읽고 쓰는 작업을 수행 (자주 사용하는 데이터를 RAM과 같이 빠르게 엑세스 할 수 있는 곳에 저장하는 작업)

- 캐싱의 목적은 데이터 검색 성능을 높이는 것


1) 웹 캐시

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

- 웹 브라우저는 웹 페이지에 접속할 때, 자원을 하드디스크나 메모리에 캐싱해 뒀다가 다음 번에 다시 접속할 때 이를 재활용 (브라우저 캐시)

- 웹 서버 또한 동적 웹 페이지라 할지라도 매번 내용이 바뀌지 않는 경우가 더 많으므로, 서버에서 생성한 HTML을 캐싱해 뒀다가 다음 번 요청에 이를 재활용 (응답 캐시)

- 이와 유사하게, 클라이언트에서 자주 요청받는 내용은 웹 서버로 전달하지 않고 웹 서버 앞단의 프록시 서버에서 캐싱해둔 데이터를 바로 제공하기도 한다. 

 

2) 브라우저 캐싱 : 웹 캐시(HTTP 캐시)의 일종


- 서버 지연을 줄이기 위해 웹 페이지, 이미지, 기타 유형의 웹 멀티 미디어 등의 웹 문서를 임시 저장하기 위한 정보 기술(동일한 서버에 다시 접근할 때는 근처에 있는 프록시 서버의 웹 캐시에 저장된 정보를 불러오므로 더 빠른 열람이 가능

* 서버의 웹 캐시 메모리에 저장되어 있는 정보를 불러옴으로써 더 빠르게 웹 페이지를 띄울 수 있게 하는 게 브라우저 캐싱

 

3) Redis (Remote Dictionary Server)

- 여기서 Dictionary는 Java 기준 HashMap, HashTable 을 말함

- Redis는 메모리 기반 오픈소스 NoSql DBMS의 일종으로, 웹 서비스에서 캐싱을 위해 많이 사용, 모든 데이터를 메모리에 다 올려 처리하여 속도가 빠르며, 서버 재부팅 시 메모리의 데이터가 휘발되지 않게끔 데이터를 하드디스크에 기록하는 게 가능

- DBMS의 일종으로 명시적으로 삭제하지 않는 한 메모리에서 데이터를 삭제하지 않으며, 자체적으로 여러  자료형을 지원

 

* NoSQL : SQL만을 사용하지 않는 데이터베이스로, 표 형식이 아니며 관계형 데이터베이스와는 다른 방식으로 데이터를 저장, 스키마 없이 사용 가능 

 

'이론 공부' 카테고리의 다른 글

기타 개념 정리  (0) 2023.03.29
Java의 Call By Value, Call By Reference  (0) 2023.03.28
AWS, Docker 개념  (0) 2023.03.28
RESTful API  (0) 2023.03.28
스크럼 (Scrum)  (0) 2023.03.28