기록하는 습관

[북스터디] HTTP 완벽 가이드 7장 본문

스터디/HTTP 완벽 가이드

[북스터디] HTTP 완벽 가이드 7장

로그뉴 2021. 5. 28. 13:57

HTTP 완벽 가이드 7장 캐시 

 

7.2 대역폭 병목 

네트워크 속도는 가장 느린 속도에 맞춰지기 때문에 병목 현상이 일어난다. 캐시는 이러한 네트워크 병목을 줄여준다. 국내에서는 지역 간 거리가 그렇게 멀지 않지만, 천조국의 경우는 다르다. 근처에 캐시 서버가 있다면 응답을 빨리 할 수 있다. 

 

7.5 적중과 비적중 

운영체제에서 배운 캐시 hit랑 같은 개념이다. 클라이언트에 요청한 데이터가 캐시에 있다면 원서버에 가지 않고 내려주고, 요청한 데이터가 없다면 원서버에 가져와서 캐시 서버 자체로 저장도 하고 클라이언트에게 넘긴다. 

 

 

 

 

7.5.1 재검사 

캐시 서버가 hit 하더라도 정말 최신이 맞는지 검증해야 한다. 캐시 서버는 사진이 원할 때 언제든지 재검사 할 수 있다.  

 

304 Not Modified : 데이터가 변하지 않으면 받는 값 

 

캐시 서버는 If-Modigied-Since 헤더를 통해 값이 변경되었는지 검사한다. 변경 되었다면 200 OK 코드로 값이 넘어 오고 변경되지 않으면 304 Not Modified를 보낸다. 

 

 

 

7.5.2 적중률 

일반적으로 40% 정도의 hit율이 나오면 나쁘지 않은 수치이다. 

 

7.5.4 적중과 비적중의 구별 

클라이언트는 캐시에서 받은 데이터인지, 원서버에서 받은 데이터인지 알 수 없다. 이를 알 수 있는 방법은 헤더에 Date값을 통해서 볼 수 있다. 만약 캐싱된 데이터의 경우 내가 요청한 날짜보다 예전 날짜가 된다. (전제: 캐시가 Date 값을 변경하지 않는다는 것) 

 

7.6 캐시 토폴로지 

7.6.1 개인 전용 캐시 

웹브라우저는 컴퓨터 내에 전용 캐시 공간을 만들어서 사용한다. 

 

7.6.2 공용 프락시 캐시 

프락시 서버 종류 중 하나로 캐시 역할을 하는 서버가 공용 캐시라고 할 수 있다. 

 

 

 

** 모든 프록시 서버는 캐싱이 가능하다. 

 

 

7.7 캐시 처리 단계 

 

7.7.1 단계 1: 요청 받기 

  

캐시는 네트워크 커넥션에서의 활동을 감지하고 데이터를 읽어 들인다. 고성능 캐시는 여러 커넥션에서 동시에 읽어 들인다. 

  

7.7.2 단계 2: 파싱 

  

요청 메시지를 파싱하여 URL과 헤더등을 꺼내 조작하기 쉬운 자료구조로 만든다. 

  

7.7.3 단계 3: 검색 

  

캐시에 복사본이 있는지 검사하고 없다면 원서버에서 가져온다. 

  

7.7.4 단계 4: 신선도 검사 

  

캐시에 복사본이 있어도 원서버와 같은 데이터인지를 검사한다. 

  

7.7.5 단계 5: 응답 생성 

  

캐시 서버는 원 서버에서 온 것과 다름 없게 응답을 만든다. 다만 캐시 신선도 정보를 추가 하거나 Via 헤더를 포함시킬 수 있다. 주의할 것은 Date 헤더는 변경하면 안된다. 

  

7.7.6 단계 6: 전송 

  

응답을 전송한다. 

  

7.7.7 단계 7: 로깅 

  

캐시 서버에서 어떤 트랜잭션을 처리했는지 로깅한다. 로깅하는 포맷은 스키드 로그 포맷, 넷스케이프 확장 공용 로그 포맷 등이 있다고 한다. 그리고 커스텀 로그 파일도 허용한다. 

 

  • If-Modified-Since 
    • 날짜 재검사 
    • 만약, 문서가 주어진 날짜 이후로 수정되었으면 요청을 처리함 
    • 그렇지 않으면 캐시에 있는 것을 가져온다. 

 

 

  • If-None-Match: 엔티티 태그 재검사 

 

 

  • ETag 
    • HTTP 컨텐츠가 바뀌었는지 검사할  있는 태그 
    • Last-Modified의 단위가 초(s)까지만 보이기 때문에 ETag로 함께 변경 여부 검사 
    • Request Headers의 If-Modified-Since와 If-None-Match의 값 중 하나라도 Response Headers의 Last-Modified, ETag 가 다르면 파일을 전송한다. 

 

 

Http 캐시는 아니지만, 대표적인 캐시로 Redis에 대한 좋은 블로그 링크도 남겨둡니다. 

https://brunch.co.kr/@jehovah/20  

Comments