캐시 (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 |