오늘 뭐했냐/개발에 대한 주저리
23.09.05 캐시(cache)
스스로에게
2023. 9. 11. 22:04
캐시
간단히 말하면 빠른 데이터 저장소를 의미하는데, 이전에 계산한 값을 다시 사용하기 위해 일시적으로 저장하는 공간이다. 캐시는 메인 메모리나 디스크보다 빠르지만, 용량은 작은 특별한 저장 영역이다. 데이터나 결과를 캐시에 저장함으로써, 같은 연산이나 데이터 요청이 다시 발생했을 때 빠르게 응답할 수 있다.
캐시의 필요성
- 속도 향상: 캐시는 데이터 처리 속도를 높일 수 있다. 예를 들어, 웹 브라우저는 자주 방문하는 웹 페이지의 데이터를 캐시에 저장할 수 있으며, 이는 페이지 로딩 시간을 줄여준다.
- 네트워크 트래픽 감소: 캐싱은 네트워크의 부하를 줄일 수 있다. 많은 사용자가 동일한 데이터에 접근할 경우, 한 번만 원본 데이터를 읽어 캐시에 저장하면 이후의 요청은 캐시에서 처리할 수 있기 때문이다.
캐시의 대표적인 형태
- CPU 캐시: 컴퓨터의 중앙 처리 장치(CPU) 내부에 있는 빠르고 작은 메모리이다. 자주 사용되는 데이터나 명령어를 빠르게 접근할 수 있도록 저장한다.
- 웹 캐시: 웹 브라우저나 웹 서버에서 사용한다. 자주 접근되는 웹 페이지나 이미지, 스크립트 등을 임시로 저장해 빠르게 로딩한다.
- 디스크 캐시: 하드 디스크에 있는 데이터를 빠르게 접근하기 위해 일시적으로 RAM에 저장하는 캐시이다.
- 데이터베이스 캐시: 데이터베이스의 쿼리 결과를 일시적으로 저장하여 동일한 쿼리에 대한 빠른 응답을 가능하게 한다.
- 네트워크 캐시 (CDN): 네트워크 데이터 전송을 최적화하기 위해 지리적으로 분산된 서버에 데이터를 캐시한다.
원리
- 지역성 원칙(Locality of Reference): 캐시는 시스템에서 자주 사용되는 데이터나 명령어를 빠르게 접근 가능한 메모리에 저장한다. 시스템은 먼저 캐시를 조회하여 필요한 데이터가 캐시에 있는지 확인하고, 없을 경우에만 느린 메모리나 디스크에 접근한다.
- 캐시 미스와 캐시 히트: 캐시에 원하는 데이터가 있을 경우를 '캐시 히트(cache hit)', 없을 경우를 '캐시 미스(cache miss)'라고 한다. 캐시 미스가 발생하면 데이터는 느린 메모리에서 가져와 캐시에 저장되며, 이후 동일한 요청이 있을 때는 캐시 히트로 빠르게 처리된다.
- 캐시 정책(Cache Policy): 캐시는 유한한 크기를 가지므로, 어느 시점에서는 새로운 데이터를 위해 기존 데이터를 제거해야 한다. 이를 결정하는 알고리즘을 '캐시 교체 정책'이라고 하며 아래와 같은 예시가 있다.
- LRU (Least Recently Used): 가장 오래전에 사용된 데이터를 제거합니다.
- FIFO (First In, First Out): 가장 먼저 캐시에 들어온 데이터를 제거합니다.
- LFU (Least Frequently Used): 가장 적게 사용된 데이터를 제거합니다.
캐시의 문제점:
- 일관성(Coherency): 캐시와 원본 데이터 사이의 일관성을 유지해야 한다.
- 캐시 스탬프(Cache Stampede): 여러 클라이언트가 동시에 같은 데이터에 접근을 시도하여 캐시 서버에 과부하가 생길 수 있다.
어떻게 보면 몰랐을 뿐이지 정말 많이 사용을 했다. 브라우저로 웹사이트에 접속할 때라던지, 스마트폰 용량이 적을 때 앱을 사용하면서 용량 부족으로 캐시 데이터를 지운 적도 많았다. 하지만 익숙할 뿐이지 내용은 어렵다.