캐시란?
자주 사용하는 데이터나 값을 미리 복사해놓는 임시 장소를 말한다.
주로 원래의 데이터를 접근하는 시간이 오래 걸리거나 계산을 절약하고 싶은 경우에 사용한다.
캐시에 데이터를 미리 복사해놓으면 계산이나 접근 시간 없이 더 빠른 속도로 데이터에 접근이 가능하다.
캐시는 모든 데이터를 담기엔 저장공간이 많지 않아서 힘들다. 그래서 보통 캐시는 지역성을 나누어 분류한다.
1)시간적 지역성
데이터가 한번 접근 되고나서 금방 데이터에 다시 접근할 가능성이 높은 것을 말한다.
이럴 때 캐시에 저장해놓으면 데이터접근하는 횟수를 줄일 수 있어서 높은 효율성을 나타낼 수 있다.
2)공간적 지역성
특정 데이터와 가까운 주소가 순서대로 접근이 되어 있는 경우를 말한다.
앞으로 사용할 데이터들이 가져올 블록들안에 모여있으면 한번만 메모리에 접근하면 되기때문이다.
만약 모여있지 않다면 여러번 접근을 해야하므로 효율성이 떨어지게 된다.
캐시는 그럼 어디에 사용이 되는가?
캐시는 불필요한 네트워크 요청을 줄일 수 있기 때문에 로드 성능을 향상시키는데 사용된다.
장단점)
- 장점
캐시에 데이터를 미리 복사해놓은 더 빠른 속도로 데이터에 접근 할 수 있다. 그래서 성능향상 또는 페이지로드 시간을 줄일 수 있다.
- 단점
오래된 데이터를 제공할 수 있어 부정확할 수 있다. 또 메모리공간이 작고 비용이 비쌉니다.
동작 방식 + 원리)
1.데이터 요청이 들어오면 먼저 캐시에서 데이터 탐색
2-1.캐시가 없거나 오래됬을 경우 원본데이터가 저장된 곳에서 데이터를 조회 후 캐시에도 데이터를 복사/갱신
** '오래됬다'라는것은 어떻게 알까?
데이터의 최종 수정일을 확인해서 알 수 있다.
서버응답 헤더 Last-Modified에 마지막 수정 시간을 넣어서 캐시에 저장을 한다.
그럼 나중에 캐시의 만료시간이 다 되고 다시 요청을 할때 이 마지막 수정시간을 비교해서 304 Not Modified (변화가 없다)라는 코드를 전송하고 저장된 캐시를 사용하라고 전송한다.
2-2.캐시에 데이터가 있으면 캐시에 저장된 데이터를 제공
4.오래된 데이터는 삭제
여기서 만약,
데이터를 수정해서 마지막 수정 날짜가 다르지만 같은 데이터를 수정해서 데이터 결과가 똑같은 경우는 어떻게 해야할까?
E-Tag, If-None-Match가 있다
- E-Tag : 캐시 데이에 임의의 고유한 이름을 달아놓는다. 만약 데이터 변경이 있다면 이름을 바꾸어서 변경
ETag만 보내서 같으면 유지, 다르면 다시 받는다. - If-None-Match : E-Tag를 서버로 If-None-Match에 해당 값을 실어서 보낸다.
그럼 서버에서 값을 확인해서 E-Tag가 같다면 304, 아니라면 새로운 값을 보낸다.
참고 블로그)
'CS지식💪' 카테고리의 다른 글
position은 어떻게 사용할까 (0) | 2023.03.30 |
---|---|
HTTP란? HTTP의 메세지 구조 (0) | 2023.03.30 |
프레임 워크 vs 라이브러리 (0) | 2023.03.29 |
Parameter & Argument (0) | 2023.03.28 |
Hoisting & TDZ (0) | 2023.03.28 |