Chapter 07 - 캐시

📌 읽으면서 밑줄친 내용 그대로 옮겨 적음. *이 붙은 문장은 생각.
  • 웹 캐시는 자주 쓰이는 문서의 사본을 자동으로 보관하는 HTTP 장치다.
  • 캐시는 다음과 같은 혜택을 준다.
    • 불필요한 데이터 전송을 줄여서, 네트워크 요금으로 인한 비용을 줄여준다.
    • 네트워크 병목을 줄여준다. 대역폭을늘리지 않고도 페이지를 빨리 불러올 수 있게 된다.
    • 원 서버에 대한 요청을 줄여준다. 서버는 부하를 줄일 수 있으며 더 빨리 응답할 수 있게 된다.
    • 페이지를 먼 곳에서 불러올수록 시간이 많이 걸리는데, 캐시는거리로 인한 지연을 줄여준다.
  • 클라이언트와 서버 사이에 라우터가 그다지 많지 않더라도, 빛의 속도 그 자체가 유의미한 지연을 유발한다.
  • 캐시 적중cache hit: 캐시에 요청이 도착했을 때, 만약 그에 대응하는 사본이 있다면 그를 이용해 요청이 처리되는 것
  • 캐시 부적중cache miss: 대응하는 사본이 없어서 원 서버로 전달되는 것
  • 신선도 검사(HTTP 재검사): 원 서버 콘텐츠는 변경될 수 있기 때문에, 캐시는 반드시 그들이 갖고 있는 사본이 여전히 최신인지 서버를 통해 때때로 점검해야 한다.
  • 재검사 적중(혹은 느린 적중): 캐시는 캐시된 사본의 재검사가 필요할 때, 원 서버에 작은 재검사 요청을 보낸다. 콘텐츠가 변경되지 않았다면, 서버는 아주 작은 304 Not Modified 응답을 보낸다. 그 사본이 여전히 유효함을 알게 된 캐시는 즉각 사본이 신선하다고 임시로 다시 표시한 뒤 그 사본을 클라이언트에 제공한다.
    • 속도: 순수 캐시 적중 > 재검사 적중 > 캐시 부적중
  • 문서 적중률: 0%는 모든 요청이 캐시 부적중(네트워크 너머로 문서를 가져와야 했던 경우), 100%는 모든 요청이 캐시 적중(캐시에서 사본을 가져온 경우)을 의미
  • 바이트 단위 적중률: 캐시를 통해 제공된 모든 바이트의 비율을 표현한다. 이 측정값은 트래픽이 절감된 정도를 포착해낸다.
  • 캐시 성능의 대한 유용한 지표
    • 문서 적중률: 얼마나 많은 웹 트랜잭션을 외부로 내보내지 않았는지
      • 개선하면 전체 대기시간(지연)이 줄어든다.
    • 바이트 단위 적중률: 얼마나 많은 바이트가 인터넷으로 나가지 않았는지
      • 개선하면 대역폭 절약을 최적화한다.
  • 불행히도, HTTP는 클라이언트에게 응답이 캐시 적중이었는지 아니면 원 서버 접근인지 말해줄 수 있는 방법을 제공하지 않는다.
    • 굳이 알 필요가 있을까?
  • 작은 캐시에서 캐시 부적중이 발생했을 때 더 큰 부모 캐시가 그 '걸러 남겨진' 트래픽을 처리하도록 하는 계층을 만드는 방식이 합리적인 경우가 많다.
  • 캐시 처리 단계
    1. 요청 받기
    2. 파싱
    3. 검색
    4. 신선도 검사
    5. 응답 생성
    6. 발송
    7. 로깅
  • 캐시된 사본 모두가 서버의 문서와 항상 일치하는 것은 아니다.
  • 캐시 재검사를 할 때 유용한 조건부 요청 헤더
    • If-Modified-Since: 만약 문서가 주어진 날짜 이후로 수정되었다면 요청 메서드를 처리한다.
    • If-None-Match: 마지막 변경된 날짜를 맞춰보는 대신, 서버는문서에 대한 일련번호와 같이 동작하는 특별한 태그를 제공할 수 있다. 캐시된 태그가 서버에 있는 문서의 태그와 다를 때만 요청을 처리한다.
  • 캐시에서 온 응답의 나이를 알아내는 것은 더 어려운데, 왜냐하면 모든 서버가 동기화된 시계를 갖고 있지는 않으며 우리는 응답이 어디에서 왔는지도 모르기 때문이다.
  • 웹 애플리케이션, 특히 캐시 프락시는 시계 값이 극단적으로 차이 나는 서버와 상호작용 하는 경우를 대비해야 한다.
  • 캐시는 사용자를 위해 봉사한다. 우리는 반드시 그들의 요구에 충실히 따라야 한다.

알게된 점

  • 캐시 처리 단계
  • 캐시된 문서의 신선도 계산하기

관련해서 같이 이야기 나누고 싶은 점

  • 우리 서비스는 어떻게 문서의 신선도를 관리하고 있나요?