1. 캐시란?
- 자주 참조되는 데이터나 계산 결과를 미리 저장해두어, 반복적인 데이터 접근이나 연산 속도를 빠르게 하기 위해 사용되는 고속의 임시 저장소를 모두 일컫어 캐시라 한다.
- 주로 자주 접근하는 데이터에 대해서 연산 속도를 최소화하여 좋은 퍼포먼스를 내기 위해 사용한다
- 자주 접근해야하는 데이터에 대해 접근 시간을 줄이고 시스템 성능을 향상 시키기 위해 사용한다고 보면 됨!
+ 내 생각
* 쇼핑몰 같은 경우 상품상세페이지에 접근할 때 여러가지 데이터를 데이터베이스를 통해 가져오는데,
상품정보 뿐만 아니라 관련 광고데이터, 배너데이터, 상품리뷰, 상품문의, 그 외 상세페이지에 들어가는 정보들이 무수하게 많다.
그 중 자주 상품정보데이터는 계속 바뀔 수 있기 때문에 캐시를 하는 것은 좀 무리라고 생각이 들고,
광고데이터나 배너데이터 정도는 캐시로 바꿔서 상품상세에 접근할 수 있게 도와준다면 상품상세에 빠르게 접근하는데 도움을 줄 수 있을 것 같다
2. 캐시의 동작 원리
1) 캐시 적중
- 필요한 데이터가 캐시에 존재하여, 빠르게 데이터에 접근할 수 있는 경우 (= 걍 필요한 데이터가 캐시에 있는 경우)
2) 캐시 미스
- 필요한 데이터가 캐시에 존재하지 않아, 원본 데이터 저장소(주 메모리나 디스크)에서 데이터를 가져와야 하는 경우입니다. (=걍 필요한 데이터가 캐시에 없어서, DB에서 캐시로 가지고 와야하는 경우)
3) 캐시 갱신
- 캐시에 존재하는 데이터가 변경된 경우, 캐시를 업데이트하여 최신 상태를 유지 (=캐시를 원본 데이터가 변경됨으로서 변경해줘야 하기때문에, 새로고침해줘야함)
3. 캐시의 종류
1) CPU 캐시
- CPU 내부에 있는 고속 메모리로, 주 메모리(RAM)에 접근하는 시간을 줄여 CPU 성능을 향상
(L1, L2, L3캐시가 있다고 한다..)
2) 메모리 캐시
- 주 메모리와 디스크 간의 속도 차이를 줄이기 위해 사용됩니다. 운영 체제나 애플리케이션에서 자주 접근하는 데이터를 메모리에 캐싱한다.
(버퍼캐시(운영체제캐시), 페이지캐시가 있다고 한다..)
3) 디스크 캐시
- 하드 디스크나 SSD 내부에 있는 캐시로, 디스크의 읽기/쓰기 속도를 향상시킨다.
4) 웹 캐시
- 웹 브라우저나 프록시 서버에서 자주 방문하는 웹 페이지를 캐싱하여 네트워크 대역폭을 절약하고 페이지 로딩 시간을 줄인다.
5) 애플리케이션 캐시 ✨요것이 웹개발 하면 자주 사용하는 캐시 친구 (redis,mongoDB 등등?)
- 앱에서 자주 사용되는 데이터를 캐싱하여 성능을 최적화 한다.
- 메모리 캐시 : Redis나 Memcached와 같은 인메모리 데이터 저장소를 사용하여 캐싱
- 로컬 캐시 : 애플리케이션 내부에서 사용하는 캐시 > 모바일 앱에서 쓰는 느낌
4. 캐시의 장점
- 성능 향상: 캐시는 데이터 접근 시간을 줄여 시스템 성능을 향상시킨다.
- 응답 시간 단축: 자주 사용되는 데이터에 빠르게 접근할 수 있어 응답 시간이 단축된다.
- 리소스 절약: 네트워크 대역폭이나 디스크 I/O와 같은 리소스를 절약할 수 있다.
5. 캐시의 단점
- 일관성 문제: 캐시에 저장된 데이터가 원본 데이터와 일치하지 않는 경우 일관성 문제가 발생할 수 있다.
- 메모리 사용: 캐시는 추가적인 메모리를 사용하므로, 메모리 자원이 제한된 환경에서는 부담이 될 수 있다.
- 관리 복잡성: 캐시 무효화, 갱신, 교체 정책 등을 관리하는 것이 복잡할 수 있다.
6. 캐시 교체 정책
- LRU (Least Recently Used): 가장 최근에 사용되지 않은 데이터를 교체한다
- LFU (Least Frequently Used): 가장 적게 사용된 데이터를 교체한다
- FIFO (First In, First Out): 먼저 들어온 데이터를 먼저 교체한다
=> 사실 복잡한 것 같지만 그냥 캐시 데이터를 언제 교체할 지 정하는 정책 정도 인 것 같다..
7. 캐시 사용 시나리오 , 예제
- 웹 브라우저: 자주 방문하는 웹 페이지의 리소스를 캐싱하여 빠르게 로드한다
- 데이터베이스: 쿼리 결과를 캐싱하여 반복되는 쿼리 성능을 향상시킨다
- CDN (Content Delivery Network): 전 세계 여러 위치에 캐시 서버를 두어 사용자에게 더 빠르게 콘텐츠 제공할 수 있다.
캐시도... 무슨 데이터를 어떻게 저장하고 관리할거냐에 따라 개념이 약간씩은 달라지는 것 같으나
결국 자주 쓰는 데이터를 미리 저장해놓고 빨리빨리 보여줘서 쓰자! 할때 쓰는 데이터 인 것 같다.