불필요한 데이터 전송
네트워크 비용은 크기 때문에 효율적으로 사용해야 한다. 같은 데이터를 또 받을 필요 없다.
대역폭 병목
네트워크 속도는 가장 느린 속도에 맞춰지기 때문에 병목 현상이 생기는데,
캐시를 사용하면 병목을 줄일 수 있다.
멀리있는 네트워크도 캐시를 사용하면 빠르게 응답을 받을 수 있다.
갑작스런 요청 쇄도
특정 상황에서 트래픽이 급증하면 장애를 야기할수있다.
거리로 인한 지연
거리가 멀수록 지연이 발생한다.
적중과 비적중
운영체제의 캐시 hit와 같은 개념이다. 클라이언트의 요청이 캐시에 있다면 서버까지 가지 않고 바로 주고
데이터가 없을때만 서버에 가서 캐시에 저장도 하고 클라이언트에 넘겨준다.
재검사
캐시서버에 데이터가 있더라도 이 데이터가 최신 데이터가 맞는지 확인을 해야 한다.
캐시 서버는 자신이 원할때 언제든지 재검사 할 수 있다.
여기서 데이터가 변경되지 않았다면 304 Not Modified 값을 받는다
캐시 서버는 if_Modified_Since 헤더 값을 통해 변경되었는지 검사하고,
만약 변경이 되었으면 200 OK 코드로 값을 받고 아니면 304 값을 받는다.
적중률
캐시 서버에서 바로 줄 수 있는 상태가 hit 인데, 이 적중 퍼센트를 뜻한다.
적중과 비적중의 구별
클라이언트에서 이 값이 캐시에서 온건지 서버에서 온건지 알아보려면
헤더에 Date 값을 확인해서 내가 요청한 값보다 더 과거의 날짜라면 캐시된 데이터인걸 알 수 있다.
캐시 연결 방식
- 개인 전용 캐시
보통 브라우저는 컴퓨터내 공간에 전용 캐시 공간을 만들어 사용한다.
- 공용 프록시 캐시
프록시 서버 종류 중 하나로 캐시 역할을 하는 서버가 공용 캐시라 할 수 있다.
프록시 캐시 레벨들
캐시를 더 효율적으로 사용하기 위해 여러 레벨의 캐시를 같이 사용한다 .
이건 CPU에서 사용하는 캐시 전략과 유사 하다.
캐시 처리 단계
1. 요청 받기
캐시는 네트워크 커넥션에서 활동을 감지하고 데이터를 읽어들인다.
고성능 캐시는 여러 커넥션에서 동시에 읽어 들일 수 있다.
2. 파싱
요청 메시지를 파싱해서 URL 과 헤더 등을 꺼내 조작하기 쉬운 자료구조로 만들어둔다.
3. 검색
캐시에 복사본이 있는지 검색하고 없으면 서버에서 가져온다
4. 신선도 검사
복사본이 있더라도 변경된게 없는지 확인한다.
5. 응답 생성
캐시 서버에서도 서버에서처럼 응답을 만든다.
다만 신선도 정보를 포함하거나 등 조금씩 다를 수 있다. 주의 할 것은 Date 헤더는 변경하면 안된다.
6. 전송
응답을 전송한다.
7. 로깅
캐시 서버에서 어떤 트랜잭션을 처리했는지 로깅한다.
사본을 신선하게 유지하기
HTTP에는 문서가 만들어진 시간 또는 만료 기간을 헤더에 넣는다.
문서 만료
만료 시간을 나타내는 것은 Expires 와 Cache-Control 두 종류가 있다.
유효기간과 나이
Expires: 언제 만료 할지에 대해 날짜가 써있다.
Cache-Control: Date를 비교하여 max-age 에 해당하는 초가 지나면 만료 시킨다.
서버 재검사
캐시된 문서가 만료되도 해당 데이터가 변경되었다는것은 아니다
다만, 이제 재검사를 할때라는 것을 의미한다.
조건부 메서드와의 재검사
캐시서버는 재검사를 위해 If-Modified-Since와 If-None-Match를 사용한다.
If-Modified-Since: 날짜 재검사
만약 문서가 주어진 날짜 이후로 수정되었다면 요청을 처리하고 그렇지 않으면 캐시에 있는 것을 가져온다.
If-None-Match: 엔티티 태그 재검사
문서에서 발행번호 같이 동작하는 ETag를 비교해서 다를 때만 요청을 처리한다.
ETag나 Expires 나 둘 중 하나만 있다면 그 값을 사용하고
둘 다 있다면 둘 다 사용해도 된다.
'프로그래밍 > HTTP' 카테고리의 다른 글
[HTTP 완벽 가이드] 인증 (0) | 2021.08.06 |
---|---|
[HTTP 완벽 가이드] 클라이언트 식별과 쿠키 (0) | 2021.08.06 |
[HTTP 완벽 가이드] 프록시 (0) | 2021.08.05 |
[HTTP 완벽 가이드] 웹 서버 (0) | 2021.08.05 |
[HTTP 완벽 가이드] HTTP 커넥션 관리 (0) | 2021.08.04 |