Skip to content

Latest commit

 

History

History
650 lines (427 loc) · 37.7 KB

File metadata and controls

650 lines (427 loc) · 37.7 KB

07장 🐙 캐시

7.1   불필요한 데이터 전송  junslee

  1. 캐시는 불필요한 데이터 전송을 줄여서, 네트워크 요금으로 인한 비용을 줄여준다. (O / X)
  2. 캐시를 이용하면, 첫번째 서버 응답은 캐시에 보관된다. (O / X)
📄 답지
  1. 불필요한 데이터 전송을 줄여서, 네트워크 요금으로 인한 비용을 줄여준다. (O)
  2. 캐시를 이용하면, 첫번째 서버 응답은 캐시에 보관된다. (O)

7.2_   대역폭 병목  junslee

  1. 많은 네트워크가 원격 서버보다 로컬 네트워크 클라이언트에 더 (넓은 / 좁은) 대역폭을 제공하기 때문에 ____을 이용하면 대역폭을 늘리지 않고도 페이지를 빨리 불러올 수 있다.
  2. 클라이언트들이 서버에 접근할 때의 속도는, 그 경로에 있는 가장 빠른 네트워크의 속도와 같다. (O / X)
  3. 클라이언트가 (LAN(근거리통신망) / WAN(광역통신망))에 있는 캐시로부터 사본을 가져온다면, 캐싱은 성능을 대폭 개선할 수 있다.
📄 답지
  1. 많은 네트워크가 원격 서버보다 로컬 네트워크 클라이언트에 더 '넓은' 대역폭을 제공하기 때문에 '캐싱'을 이용하면 대역폭을 늘리지 않고도 페이지를 빨리 불러올 수 있다.
  2. 클라이언트들이 서버에 접근할 때의 속도는, 그 경로에 있는 가장 빠른 네트워크의 속도와 같다. (X)
    -> 클라이언트들이 서버에 접근할 때의 속도는, 그 경로에 있는 가장 '느린' 네트워크의 속도와 같다.
  3. 클라이언트가 빠른 'LAN(근거리 통신망)'에 있는 캐시로부터 사본을 가져온다면, 캐싱은 성능을 대폭 개선할 수 있다.

7.3   갑작스런 요청 쇄도(Flash Crowds)  junslee

  1. 네트워크에 접속은 고르게 있을 때도 많지만, 갑작스런 사건으로 인해 트래픽이 급증하여 심각한 장애를 야기시키는데, 캐싱은 이러한 상황에 대처하기 위해 특히 중요하다. (O / X)
📄 답지
  1. 네트워크에 접속은 고르게 있을 때도 많지만, 갑작스런 사건으로 인해 트래픽이 급증하여 심각한 장애를 야기시키기도 하는데, 캐싱은 이러한 상황에 대처하기 위해 특히 중요하다. (O)

7.4   거리로 인한 지연  junslee

  1. 페이지를 먼 곳에서 불러오면 시간이 많이 걸리는데, 캐시는 ____로 인한 지연을 줄여준다.
  2. 모든 네트워크 라우터는 제각각 인터넷 트래픽을 지연시킨다. (O / X)
  3. 인터넷 트래픽을 지연시키는 요소는 클라이언트와 서버 사이에 존재하는 라우터 뿐이다. (O / X)
📄 답지
  1. 페이지를 먼 곳에서 불러오면 시간이 많이 걸리는데, 캐시는 거리로 인한 지연을 줄여준다.
  2. 모든 네트워크 라우터는 제각각 인터넷 트래픽을 지연시킨다. (O)
  3. 인터넷 트래픽을 지연시키는 요소는 클라이언트와 서버 사이에 존재하는 라우터 뿐이다. (X)
    -> 클라이언트와 서버 사이에 라우터가 그다지 많지 않더라고, 빛의 속도 그 자체가 유의미한 지연을 유발한다. 보스턴과 샌프란시스코 사이의 거리는 약 4,400km이다. 어떤 웹페이자가 20개의 작은 이미지를 포함하고 있는데, 모두가 샌프란시스코에 있는 한 서버에 들어있다고 가정해보자. 보스턴에 있는 클라가 서버로 동시에 4개의 커넥션을 열고, 그 커넥션을 유지한다면, 다운 받을 때의 빛의 속도로 인한 지연은 거의 1/4초가 된다.(240밀리초) 만약 서버가 보스턴에서 더 멀리 10,800km 떨어진 도쿄라면 600밀리초로 커진다.

7.5   적중과 부적중  mihykim

  • 보기 중 알맞은 단어를 골라 빈 칸을 채워주세요
    • <보기> 캐시 부적중(cache miss), 캐시적중(cache hit), 바이트 적중률, 캐시 적중률
    • 캐시에 요청이 도착했을 때, 대응하는 사본이 있는 경우를 ______________________이라고 한다
    • 반대로 대응하는 사본이 없는 경우를 ______________________이라고 부른다.
    • ______________________은 캐시가 요청을 처리하는 비율을 뜻한다. 이 값이 40%이면 웹 캐시로 괜찮은 편이다.
    • ______________________은 용량이 큰 객체는 몇 번 덜 접근되어도 전체 트래픽에 더 크게 기여하는 것까지 반영한 지표다.
  • 빈 칸을 알맞은 문구로 채워주세요 (주관식, 5자 이내)
    • 원 서버 콘텐츠는 변경될 수 있기 때문에 캐시는 스스로 원한다면 언제든지 사본을 재검사할 수 있다. 그러나 캐시가 문서를 수백만 개씩 갖고있는 경우가 흔한데 비해, 네트워크 대역폭은 부족하기 때문에 ____________ 가 사본을 요청하였으며, 그 사본이 검사를 할 필요가 있을 정도로 충분히 _________ 경우에만 재검사를 한다.
  • 괄호 안의 두 개의 보기 중 적절한 항목을 선택해주세요
    • 캐시는 객체를 재검사하기 위해 ( GET / OPTIONS ) 요청에 ( If-Modified-Since / Since-Modified-If ) 헤더를 추가하여 서버에게 캐시된 시간 이후에 변경된 경우에만 사본을 보내달라고 요청할 수 있다.
  • 보기는 위 요청에 대하여 서버가 보낼 수 있는 응답메세지의 3가지 상태코드입니다. 각 상황에 알맞는 상태코드를 골라 짝지어주세요
    • <보기> 200 OK, 304 Not Modified, 404 Not Found
    • 재검사 적중(서버 컨텐츠가 그대로인 경우) : _________________
    • 재검사 부적중(서버 컨텐츠가 변경된 경우) : _________________
    • 객체 삭제(서버 컨텐츠가 삭제된 경우) : _________________
  • 아래는 주관식 문제입니다.
    • 만약 서버로부터 객체가 삭제되었다는 응답코드를 받았을 경우 캐시가 해야할 일은? ________________
    • 캐시 적중이었다면 클라이언트가 받는 응답코드는? ________________
    • 캐시 부적중으로 원 서버에 접근한다면 클라이언트가 받는 응답코드는? ________________
📄 답지
  • 보기 중 알맞은 단어를 골라 빈 칸을 채워주세요
    • 캐시에 요청이 도착했을 때, 대응하는 사본이 있는 경우를 캐시 적중(cache hit)이라고 한다
    • 반대로 대응하는 사본이 없는 경우를 캐시 부적중(cache miss)이라고 부른다.
    • 캐시 적중률은 캐시가 요청을 처리하는 비율을 뜻한다. 이 값이 40%이면 웹 캐시로 괜찮은 편이다.
    • 바이트 적중률은 용량이 큰 객체는 몇 번 덜 접근되어도 전체 트래픽에 더 크게 기여하는 것까지 반영한 지표다.
  • 빈 칸을 알맞은 문구로 채워주세요 (주관식, 5자 이내)
    • 원 서버 콘텐츠는 변경될 수 있기 때문에 캐시는 스스로 원한다면 언제든지 사본을 재검사할 수 있다. 그러나 캐시가 문서를 수백만 개씩 갖고있는 경우가 흔한데 비해, 네트워크 대역폭은 부족하기 때문에 클라이언트 가 사본을 요청하였으며, 그 사본이 검사를 할 필요가 있을 정도로 충분히 오래된 경우에만 재검사를 한다.
  • 괄호 안의 두 개의 보기 중 적절한 항목을 선택해주세요
    • 캐시는 객체를 재검사하기 위해 GET 요청에 ( If-Modified-Since)헤더를 추가하여 서버에게 캐시된 시간 이후에 변경된 경우에만 사본을 보내달라고 요청할 수 있다. (각 택1)
  • 보기는 위 요청에 대하여 서버가 보낼 수 있는 응답메세지의 3가지 상태코드입니다. 각 상황에 알맞는 상태코드를 골라 짝지어주세요
    • <보기> 200 OK 304 Not Modified 404 Not Found
    • 재검사 적중(서버 컨텐츠가 그대로인 경우) : 304 Not Modified
    • 재검사 부적중(서버 컨텐츠가 변경된 경우) : 200 OK
    • 객체 삭제(서버 컨텐츠가 삭제된 경우) : 404 Not Found
  • 아래는 주관식 문제입니다.
    • 만약 서버로부터 객체가 삭제되었다는 응답코드를 받았을 경우 캐시가 해야할 일은? 사본을 삭제한다
    • 캐시 적중이었다면 클라이언트가 받는 응답코드는? 200 OK
    • 캐시 부적중으로 원 서버에 접근한다면 클라이언트가 받는 응답코드는? 200 OK
      • 두 경우 모두 응답 코드는 응답이 본문을 갖고있음을 의미하는 200 OK이다.
      • 클라이언트가 적중과 부적중을 구별하는 한 가지 방법은 Date헤더를 이용하는 것이다. 응답의 Date 헤더 값이 현재 시각보다 오래되었다면 응답은 캐시된 것이다. 또다른 방법은 Age헤더를 이용하는 것이다.

7.6   캐시 토폴로지  daelee

  1. 대부분의 브라우저는 개인 전용 캐시를 내장하고 있어서, 자주 쓰이는 문서를 개인 컴퓨터의 __(a)____(b)__에 캐시해 놓고, 사용자가 캐시 사이즈와 설정을 수정할 수 있도록 허용한다.
  2. 공용 캐시는 프락시 캐시 혹은 더 흔한 프락시 캐시라고 불리는 특별한 종류의 공유된 프락시 서버다. (O/X)
  3. 캐시 계층이 깊어질수록 중간 프락시에는 현저한 성능 저하가 발생하기 때문에, 실제 네트워크 아키텍트들은 4개 혹은 5개의 프락시만 거치도록 스스로 제한한다. (O/X)
  4. 캐시망 안에서 설계된 캐시들은 서로 다른 조직들이 상호 이득을 위해 그들의 캐시를 연결하여 서로 찾아볼 수 있도록 허용한다. (O/X)
  5. 캐시망의 프락시 캐시는 동적인 콘텐츠 라우팅과 캐시를 통한 Internet transit(트래픽이 다른 네트워크로 건너가는 것)을 허용한다. (O/X)
  6. HTTP는 형제 캐시를 지원하지 않는다. (O/X)
📄 답지
  1. 대부분의 브라우저는 개인 전용 캐시를 내장하고 있어서, 자주 쓰이는 문서를 개인 컴퓨터의 __(a)____(b)__에 캐시해 놓고, 사용자가 캐시 사이즈와 설정을 수정할 수 있도록 허용한다.

    (a) : 디스크

    디스크 캐시는 하드디스크에 접근하는 시간을 개선하기 위해 RAM에 저장하는 기법이다. 하드디스크에 접근하는 것보다 RAM 에 접근하는 것이 더 빠르기 때문이다.

    (b) : 메모리

    캐시 메모리는 램에 접근하지 않고 더 빠른 시간으로 접근할 수 있는 CPU 칩 안에 있는 작지만 빠른 메모리이다. (L1, L2, L3)

  2. 공용 캐시는 프락시 캐시 혹은 더 흔한 프락시 캐시라고 불리는 특별한 종류의 공유된 프락시 서버다. (O)

  3. 캐시 계층이 깊어질수록 중간 프락시에는 현저한 성능 저하가 발생하기 때문에, 실제 네트워크 아키텍트들은 4개 혹은 5개의 프락시만 거치도록 스스로 제한한다. (X)

    2개 혹은 3개.

    그러나 새로운 세대의 고성능 프락시 서버들은 프락시 연쇄의 길이가 문제가 되지 않도록 할 것이다.

    캐시 계층 이란?

    클라이언트 주위에는 작고 저렴한 캐시를 사용하고, 계층 상단(원 서버와 가까운)에는 많은 사용자들에 의해 공유되는 문서를 유지할 수 있는 더 큰 캐시를 사용하자는 개념.

  4. 캐시망의 프락시 캐시는 동적인 콘텐츠 라우팅과 캐시를 통한 Internet transit(트래픽이 다른 네트워크로 건너가는 것)을 허용한다. (X)

    캐시망 이란?

    캐시 계층보다 복잡하게 설계된 캐시망의 프락시 캐시는 동적으로 콘텐츠 라우팅을 수행한다.

    • URL에 근거하여, 부모 캐시와 원서버 중 하나를 동적으로 선택한다.
    • URL에 근거하여, 특정 부모 캐시를 동적으로 선택한다.
    • 부모 캐시에게 가기 전에, 캐시된 사본을 로컬에서 찾아본다.
    • 다른 캐시들이 그들의 캐시된 콘텐츠에 부분으로 접근할 수 있도록 허용하되, 그들의 캐시를 통한 Internet transit(트래픽이 다른 네트워크로 건너가는 것)은 허용하지 않는다.
  5. 캐시망 안에서 설계된 캐시들은 서로 다른 조직들이 상호 이득을 위해 그들의 캐시를 연결하여 서로 찾아볼 수 있도록 허용한다. (O)

    이러한 선택적인 피어링을 지원하는 캐시는 형제 캐시라고 불린다.

  6. HTTP는 형제 캐시를 지원하지 않는다. (O)

    HTTP는 형제 캐시를 지원하지 않기 때문에, 사람들은 인터넷 캐시 프로토콜(ICP)나 하이터텍스트 캐시 프로토콜(HTCP) 같은 프로토콜을 이용해 HTTP를 확장했다.


7.7   캐시 처리 단계  daelee

  1. HTTP GET 메시지 하나를 처리하는 기본적인 캐시 처리 절차를 순서에 맞게 배치하세요. (총 7단계)

    로깅, 신선도검사, 요청받기, 발송, 검색, 파싱, 응답생성

  2. 만약 문서를 로컬에서 가져올 수 없다면, 캐시가 취할 수 있는 행동 3가지는?

  3. 캐시는 원서버 응답 헤더와 똑같이 응답 헤더를 생성한다. (O/X)

  4. 원서버 응답헤더와 캐시 응답헤더의 Date헤더는 서로 다르다. (O/X)

📄 답지
  1. HTTP GET 메시지 하나를 처리하는 기본적인 캐시 처리 절차를 순서에 맞게 배치하세요. (총 7단계)
  1. 요청 받기 - 캐시는 네트워크로부터 도착한 요청 메시지를 읽는다.
  2. 파싱 - 캐시는 메시지를 파싱하여 URL과 헤더들을 추출한다.
  3. 검색 - 캐시는 로컬 복사본이 있는지 검사하고, 사본이 없다면 사본을 받아온다.
  4. 신선도 검사 - 신선하지 않다면 변경사항이 있는지 서버에게 물어본다.
  5. 응답 생성 - 캐시는 새로운 헤더와 캐시된 본문으로 응답 메시지를 만든다.
  6. 발송 - 네트워크를 통해 응답을 클라이언트에게 돌려준다.
  7. 로깅 - 선택적으로, 캐시는 로그파일에 트랜잭션에 대해 서술한 로그 하나를 남긴다.
  1. 만약 문서를 로컬에서 가져올 수 없다면, 캐시가 취할 수 있는 행동 3가지는?

    만약 문서를 로컬에서 가져올 수 없다면, 캐시는 그것을 원 서버나 부모 프락시에서 가져오거나 혹은 실패를 반환한다.

  2. 캐시는 원서버 응답 헤더와 똑같이 응답 헤더를 생성한다. (X)

    원서버 응답헤더를 토대로 생성하지만, 캐시에 의해 신선도 정보, 요청이 프락시 캐시를 거쳐갔음을 알려주는 Via헤더 등이 포함되어 수정되고 늘어날 수 있다.

    캐시된 객체에는 객체가 얼마나 오랬동안 캐시에 머무르고 있었는지, 얼마나 자주 사용되었는지에 대한 메타데이터가 포함되어 있다.

  3. 원서버 응답헤더와 캐시 응답헤더의 Date헤더는 서로 다르다. (X)

    캐시는 Date헤더를 조정해서는 안된다. Date 헤더는 그 객체가 원 서버에서 최초로 생겨난 일시를 표현하는 것이다.


7.8   사본을 신선하게 유지하기  secho

    1. 온라인 신문처럼 매일 바뀌는 문서들을 위해 캐시된 데이터는 서버의 데이터와 일치하도록 관리되어야한다. (O / X)
    1. HTTP는 cache-controlExpires라는 특별한 헤더로 원 서버가 각 문서에 유효기간을 붙일 수 있게 해준다. 다음에 빈칸을 채우세요.
HTTP/1.0 200 OK
Date: Mon, 10 Aug 2020, 13:00 GMT
Content-type : text/plain
Content-length : 67
(빈칸) : Fri, 15 Aug 2020, 05:00 GMT
...
HTTP/1.0 200 OK
Date: Mon, 10 Aug 2020, 13:00 GMT
Content-type : text/plain
Content-length : 67
(빈칸) : max-age = 484200
...
    1. 캐시된 문서가 만료되면 캐시는 서버와 문서에 변경된 것이 있는지 검사하고 그렇다면 신선한 사본새 유효기간과 함께 얻어온다. (O / X)
    1. 캐시된 문서가 만료되었으면 해당 문서는 원서버의 문서와 다르므로 원서버에 문서를 요청해 갱신해야한다. ( O / X )
    1. 캐시된 문서가 만료되었을 때 재검사를 수행해야한다. 재검사 결과 콘텐츠가 변경되지 않았으면 캐시는 새로운 사본과 새 만료일을 포함한 새 헤더들을 가져와서 갱신해야한다 (O / X )
    1. 다음은 HTTP 응답헤더의 일부이다. ETag를 제공할 수 있는 조건부 요청헤더는? (주관식)
    • 조건부 메서드는 재검사를 효율적으로 만들어주며 요청에 특별한 조건부 헤더를 추가함으로써 조건이 참인 경우에만 웹 서버는 객체를 반환한다.
200 OK
Access-Control-Allow-Origin: *
Connection: Keep-Alive
Content-Encoding: gzip
Content-Type: text/html; charset=utf-8
Date: Mon, 18 Jul 2016 16:06:00 GMT
Etag: "c561c68d0ba92bbeb8b0f612a9199f722e3a621a"
https://gmlwjd9405.github.io/2019/01/28/http-header-types.html
    1. 다음은 조건부 요청과 응답에 대한 내용이다. 문서가 변경되었는지에 대한 여부를 판단하고, 그에 대한 이유를 작성하시오
조건부 요청
GET /announce.html HTTP/1.0
If-Modified-Since: Mon, 10 Aug 2020, 14:30:00
응답
HTTP/1.0 200 OK
Date: Fri, 05 Sep 2020, 18:33:33
Content-type: text/plain
Content-length: 100
Expires: Mon, 09 Sep 2020, 05:00:00

I am a seasoned wedding planner.
It occured to me that I hardly get any updates on your work progress these days
📄 답지
  • 온라인 신문처럼 매일 바뀌는 문서들을 위해 캐시된 데이터는 서버의 데이터와 일치하도록 관리되어야한다. (O / X) - ( O )
  • HTTP는 cache-controlExpires라는 특별한 헤더로 원 서버가 각 문서에 유효기간을 붙일 수 있게 해준다. 다음에 빈칸을 채우세요.
HTTP/1.0 200 OK
Date: Mon, 10 Aug 2020, 13:00 GMT
Content-type : text/plain
Content-length : 67
(빈칸) : Fri, 15 Aug 2020, 05:00 GMT
...
HTTP/1.0 200 OK
Date: Mon, 10 Aug 2020, 13:00 GMT
Content-type : text/plain
Content-length : 67
(빈칸) : max-age = 484200
...

(Expires, Cache-Control) = 둘이 같은 일을 하지만, expires은 절대 유효기간을 cache-control은 초단위로 명시한다.

cache-control은 처음 생성된 이후부터 명시된 시간까지 신선함을 의미함.

  • 캐시된 문서가 만료되면 캐시는 서버와 문서에 변경된 것이 있는지 검사하고 그렇다면 신선한 사본새 유효기간과 함께 얻어온다. (O / X) - ( O )

  • 캐시된 문서가 만료되었으면 해당 문서는 원서버의 문서와 다르므로 원서버에 문서를 요청해 갱신해야한다. ( O / X ) = ( X ) 캐시만료는 해당 문서와 서버의 문서가 다르다는 것을 의미하지 않음. 검사할 시간이 되었다는 의미.

  • 캐시된 문서가 만료되었을 때 재검사를 수행해야한다. 재검사 결과 콘텐츠가 변경되지 않았으면 캐시는 새로운 사본과 새 만료일을 포함한 새 헤더들을 가져와서 갱신해야한다 (O / X ) = X 콘텐츠변경이 없었으면 헤더들만 가져와서 갱신하면 됨.

  • 다음은 HTTP 응답헤더의 일부이다. ETag를 제공할 수 있는 조건부 요청헤더는? (주관식) => If-None-Match. 문서에 대한 일련번호와 같이 동작하는 특별태그 (ETag)를 제공할 수 있음. Http컨텐츠가 바뀌었는지 검사할 수 있는 태그

  • 다음은 조건부 요청과 응답에 대한 내용이다. 문서가 변경되었는지에 대한 여부를 판단하고, 그에 대한 이유를 작성하시오

    • 변경이 없는 경우 304를 반환하고 변경시 본문과 함께 200을 반환함.

7.9   캐시 제어  jehong

  1. 다음 보기에서 no-storeno-cahe 헤더의 특징들을 골라 빈칸을 채우세요. (중복 가능)

    a. Cache-Control: no-store - ___, ___

    b. Cache-Control: no-cache - ___, ___

    보기

    ​ ㄱ. 이 헤더는 캐시가 검증되지 않은 캐시된 객체로 응답하는 것을 막는다.

    ​ ㄴ. 이 헤더는 캐시가 그 응답의 사본을 만드는 것을 금지한다.

    ​ ㄷ. 이 헤더가 포함된 응답은 로컬 캐시 저장소에 저장될 수 있다.

  2. Pragma: no-cache는 하위버전인 HTTP/1.0+와의 호환성을 위해 사용되는데 Pragma: no-cache만 이해하는 HTTP/1.0 애플리케이션에 대응해야하는 경우가 아니더라도 HTTP/1.1에 사용될 수 있다. ( O / X )

  3. Cache-Control: max-age 헤더는 신선하다고 간주되었던 문서가 서버로부터 온 이후로 흐른 시간이고 분으로 나타내는데, 초로 나타내고 싶은 경우 Cache-Control: s-maxage 헤더를 사용한다. ( O / X )

  4. Expires 응답 헤더는 실제 만료 날짜를 명시하는데 몇몇 서버는 문서를 항상 만료되도록 하기 위해 Expires: 0 이라는 응답 헤더를 돌려보내지만 이는 잘못된 문법으로 절대 받아들이거나 생성해서는 안된다. ( O / X )

  5. 다음 빈칸들을 채우세요.

    캐시가 해당 객체의 신선하지 않은(만료된) 사본을 원 서버와의 최초의 재검사 없이 제공해서는 안 됨을 의미하기 위해 _______a_______ 헤더를 사용할 수 있으며 이 경우 원 서버가 사용할 수 없는 상태라면 캐시는 반드시 __b__ Gateway Timeout error를 반환해야 한다.

  6. 응답이 Cache-Control: max-age 헤더나 Expires 헤더 중 어느 것도 포함하지 않고 있다면 캐시는 경험적인 방법으로 최대 나이를 계산하며 이 값이 24시간보다 크다면 ___________________ 경고 헤더가 응답 헤더가 추가되어야 한다.

  7. LM 알고리즘 로직에 따르면 캐시된 문서가 마지막으로 변경된 것이 상당히 예전이라면 만료 가능성이 커서 더이상 보관하기 위험하므로 재검사 후 결과에 따라 폐기한다. ( O / X )

  8. 마지막 수정 이후로 경과한 시간이 20시간이고 LM 인자가 0.3이라면 캐시가 서버와 대화했을 때 이후로 얼마동안 캐시된 사본이 신선한지 구하세요. (민트색 구간)

  1. 다음 보기 중에서 골라 빈칸을 채우세요

    보기

    Cache-control: max-stale

    Cache-Control: min-fresh

    Cache-Control: max-age

    Cache-Control: no-cache, Pragma: no-cache

    Cache-Control: no-store

    Cache-Control: only-if-cached

    a. _____________: 클라이언트는 지금으로부터 적어도 지정된 시간 후까지 신선한 문서만을 받아들인다.

    b. _____________: 클라이언트는 캐시된 리소스를 재검사하기 전에는 받아들이지 않을 것이다.

    c. _____________: 저장소의 문서에는 민감한 정보가 포함되어 있어 이 캐시는 문서의 흔적을 최대한 빨리 삭제해야 한다.

    d. _____________: 캐시는 신선하지 않은 문서라도 자유롭게 제공할 수 있으며 매개변수가 지정되면 만료시간이 해당 변수만큼 지난 문서도 받아들인다.

📄 답지
  1. 다음 보기에서 no-storeno-cahe 헤더의 특징들을 골라 빈칸을 채우세요. (중복 가능)

    a. Cache-Control: no-store - ,

    b. Cache-Control: no-cache - ,

    ㄱㄴ, ㄱㄷ

    두 헤더 모두 캐시가 검증되지 않은 캐시된 객체로 응답하는 것을 막는다. no-store는 응답의 사본을 만드는 것을 금지하고 no-cache로 표시된 응답은 로컬 캐시 저장소에 저장될 수 있다. p.209

  2. Pragma: no-cache는 하위버전인 HTTP/1.0+와의 호환성을 위해 사용되는데 Pragma: no-cache만 이해하는 HTTP/1.0 애플리케이션에 대응해야하는 경우가 아니더라도 HTTP/1.1에 사용될 수 있다. ( O / X )

    X

    HTTP/1.0 애플리케이션에 대응해야 하는 경우가 아니라면 Cache-Control: no-cache를 사용해야 한다. p.210

  3. Cache-Control: max-age 헤더는 신선하다고 간주되었던 문서가 서버로부터 온 이후로 흐른 시간이고 분으로 나타내는데, 초로 나타내고 싶은 경우 Cache-Control: s-maxage 헤더를 사용한다. ( O / X )

    X

    max-age 헤더는 초로 나타내지며 s-maxage는 max-age처럼 행동하지만 공유된(공용) 캐시에만 적용된다. p.210

  4. Expires 응답 헤더는 실제 만료 날짜를 명시하는데 몇몇 서버는 문서를 항상 만료되도록 하기 위해 Expires: 0 이라는 응답 헤더를 돌려보내지만 이는 잘못된 문법으로 절대 받아들이거나 생성해서는 안된다. ( O / X )

    X

    이런 값들은 몇몇 소프트웨어와 문제를 일으킬 수 있어 가급적 받아들일 수는 있어야 하나 생성해서는 안된다. p.210

  5. 다음 빈칸들을 채우세요.

    캐시가 해당 객체의 신선하지 않은(만료된) 사본을 원 서버와의 최초의 재검사 없이 제공해서는 안 됨을 의미하기 위해 _______a_______ 헤더를 사용할 수 있으며 이 경우 원 서버가 사용할 수 없는 상태라면 캐시는 반드시 __b__ Gateway Timeout error를 반환해야 한다.

    Must-Revalidate, 504 p.211

  6. 응답이 Cache-Control: max-age 헤더나 Expires 헤더 중 어느 것도 포함하지 않고 있다면 캐시는 경험적인 방법으로 최대 나이를 계산하며 이 값이 24시간보다 크다면 Heuristic Expiration 경고 헤더가 응답에 추가되어야 한다.

    Heuristic Expiration p.211

  7. LM 알고리즘 로직에 따르면 캐시된 문서가 마지막으로 변경된 것이 상당히 예전이라면 만료 가능성이 커서 더이상 보관하기 위험하므로 재검사 후 결과에 따라 폐기한다. ( O / X )

    X

    마지막으로 변경된 것이 상당히 예전이라면 아마 안정적인 문서일 것이고 갑자기 바뀔 가능성이 별로 크지 않을 것이므로 캐시에 더 오래 보관하고 있어도 안전하다. p.211

  8. 마지막 수정 이후로 경과한 시간이 20시간이고 LM 인자가 0.3이라면 캐시가 서버와 대화했을 때 이후로 얼마동안 캐시된 사본이 신선한지 구하세요. (민트색 구간)

    6시간

    마지막 수정 이후로 경과한 시간 x LM인자만큼 신선하다. p.212

  9. 다음 보기 중에서 골라 빈칸을 채우세요

    a. Cache-Control: min-fresh : 클라이언트는 지금으로부터 적어도 지정된 시간 후까지 신선한 문서만을 받아들인다.

    b. Cache-Control: no-cache, Pragma: no-cache: 클라이언트는 캐시된 리소스를 재검사하기 전에는 받아들이지 않을 것이다.

    c. Cache-Control: no-store : 저장소의 문서에는 민감한 정보가 포함되어 있어 이 캐시는 문서의 흔적을 최대한 빨리 삭제해야 한다.

    d. Cache-control: max-stale: 캐시는 신선하지 않은 문서라도 자유롭게 제공할 수 있으며 매개변수가 지정되면 만료시간이 해당 변수만큼 지난 문서도 받아들인다.

    p. 213


7.10   캐시 제어 설정  taelee

1. 다음 보기 중 알맞은 아파치 모듈을 골라 빈칸을 채워주세요

보기) mod_headers, mod_expires, mod_cern_meta

a) ________ 모듈은 개별 헤더들을 설정할 수 있게 해준다. 이를 통해 어떤 디렉터리의 모든 HTML 파일을 캐시하지 않도록 설정 할 수도 있다.

b) ________ 모듈은 HTTP 헤더들의 파일을 특정 객체와 연결시켜준다. 이 모듈을 켜면 제어하고자 하는 파일에 각각 대응되는 메타파일을 생성하므로 원하는 헤더를 추가하면 된다.

c) ________ 모듈은 적절한 만료 날짜가 담긴 Expires 헤더를 자동으로 생성하는 프로그램 로직을 제공한다.

2. META HTTP-EQUIV태그는 HTML 최상단 HEAD태그 안에 위치하여 HTTP 헤더들을 정의한다. (O/X)
3. META HTTP-EQUIV 태그는 HTTP 헤더를 직접 수정하지 않고도 HTML파일내에서 직접 헤더를 조작할 수 있어서 널리 사용되고 있다.(O/X)
📄 답지
1. 다음 보기 중 알맞은 아파치 모듈을 골라 빈칸을 채워주세요

보기) mod_headers, mod_expires, mod_cern_meta

a) mod_headers 모듈은 개별 헤더들을 설정할 수 있게 해준다. 이를 통해 어떤 디렉터리의 모든 HTML 파일을 캐시하지 않도록 설정 할 수도 있다.

b)mod_cern_meta 모듈은 HTTP 헤더들의 파일을 특정 객체와 연결시켜준다. 이 모듈을 켜면 제어하고자 하는 파일에 각각 대응되는 메타파일을 생성하므로 원하는 헤더를 추가하면 된다.

c) mod_expires 모듈은 적절한 만료 날짜가 담긴 Expires 헤더를 자동으로 생성하는 프로그램 로직을 제공한다.

2. META HTTP-EQUIV태그는 HTML 최상단 HEAD태그 안에 위치하여 HTTP 헤더들을 정의한다. (O)
3. META HTTP-EQUIV 태그는 HTTP 헤더를 직접 수정하지 않고도 HTML파일내에서 직접 헤더를 조작할 수 있어서 널리 사용되고 있다.(X)

설명) 이 기능은 서버의 부하를 가중시키고, 설정값이 정적이고, HTML을 제외한 다른 타입의 파일은 지원하지 않기 때문이다.


7.11   자세한 알고리즘  yeosong

  1. 캐시 신선도 계산 알고리즘에 대한 설명이 되도록 빈칸을 채워보세요. (주관식)
  • ____________________보다 작으면 이 문서를 '신선하다'고 한다.

7.11.1 나이와 신선도 수명

  1. 신선도 수명의 계산은 클라이언트에 따라 달라지는 것이 아니며, 서버에 설정된 알고리즘에 따라 동일하게 계산됨을 규칙으로 한다. (O/X)

7.11.2 나이 계산

  1. 응답의 나이는 서버에서 생성 혹은 재검사 되었을 때부터 지금까지의 총 시간으로, 게이트웨이에 머무른 시간을 제외한 값으로 이루어져있다.(O/X)

  2. 겉보기 나이는 ______에 기반한다. 겉보기 나이 = (응답을 받은 시각 - ______ 값) 인데, 이는 객체가 원서버에서 최초로 생겨난 일시를 표현한 것이다.

  3. 두 컴퓨터의 시계 설정 차이로 인한 문제를 _________ 라고 하며, 이로 인해 음수 값이 나올 경우 바로 __으로 수정한다.

  4. 현재, 클록 스큐로 인한 정확도 손실을 보정하는 완전한 보정법이 없다. (O/X)

  5. 다음 보기 중 옳은 것을 골라 빈 칸을 채우세요. ( )

a. $응답을_받은_시각 - $요청을_보낸_시각
b. $Date_헤더값 - $응답을_받은_시각
c. $보정된_겉보기_나이 + $응답_지연_추정값
d. $응답을_받은_시각 - $Date_헤더값
e. $겉보기_나이, $Age_헤더값

$겉보기_나이 = max(0, ____________);
$보정된_겉보기_나이 = max(______________);
$응답_지연_추정값 = (_________________);
$문서가_우리의_캐시에_도착했을_때의_나이 = ___________________

7.11.3 완전한 나이 계산 알고리즘

  1. 앞서 계산한 $문서가_우리의_캐시에_도착했을_때의_나이에 무엇을 더해야 완전한 나이 계산 알고리즘이 되는가? (주관식)

7.11.4 신선도 수명 계산 (문항 없음. 요약.)

클라이언트에 따라 원하는 신선도가 다를 수 있고, (정기간행물이라면 다음 출판일 이전이라면 무조건 신선한 것이 되지만, 속도만 빠르다면 약간 오래된 콘텐츠를 받고 싶은 클라이언트도 있을 것) 캐시는 이 조건들에 충실해야한다.

7.11.5 완전한 서버 신선도 알고리즘 (문항 없음. 요약.)

  1. $문서의_나이 계산
  2. $서버_신선도_한계를 계산
  3. 주어진 $서버_신선도_한계와 클라이언트의 조건을 기반으로 $클라이언트가_수정한_신선도_한계 계산
  4. $최종_신선도_한계 > $문서의_나이 ? 신선 : 신선하지않음;
📄 답지

7.11   자세한 알고리즘

  1. 캐시된 사본의 나이신선도 수명보다 작으면 이 문서를 '신선하다'고 한다.
  • 문서의 나이 / 신선도 한계 라고 말할 수도 있다.

7.11.1 나이와 신선도 수명

  1. 신선도 수명의 계산은 클라이언트에 따라 달라지는 것이 아니며, 서버에 설정된 알고리즘에 따라 동일하게 계산됨을 규칙으로 한다. (X)
  • 신선도 수명의 계산 = (서버 만료 정보 + 클라이언트의 요구 사항)의 조합에 따라 다르다.
  • max-stale 헤더를 다음과 같이 사용하면 Cache-Control: max-stale=600 만료된 컨텐츠라도 만료 후 10분이 지나기 전이라면 재사용 할 수 있다.
  • min-fresh 헤더를 다음과 같이 사용하면 Cache-Control: min-fresh=60 지금부터 1분 후까지도 신선할 문서라면 받아들인다.

7.11.2 나이 계산

  1. 응답의 나이는 서버에서 생성 혹은 재검사 되었을 때부터 지금까지의 총 시간으로, 게이트웨이에 머무른 시간을 제외한 값으로 이루어져있다. (X)
  • 중개 캐시에 기록되어있는 '라우터들과 게이트웨이들 사이를 떠돌아다닌 시간, 응답이 캐시에 머물렀던 시간'이 모두 포함되어있다.
  1. 겉보기 나이는 Date 헤더에 기반한다. 겉보기 나이 = 응답을 받은 시각 - Date 헤더 값 인데, 이는 객체가 원서버에서 최초로 생겨난 일시를 표현한 것이다.
  • 참고) Date 헤더는 원 서버의 날짜 기록이기 때문에 프락시와 캐시에서 절대 수정되어선 안된다.
  1. 두 컴퓨터의 시계 설정 차이로 인한 문제를 클록 스큐 clock skew 라고 하며, 이로 인해 음수 값이 나올 경우 바로 0으로 수정한다.

  2. 현재, 클록 스큐로 인한 정확도 손실을 보정하는 완전한 보정법은 없다. (O) 219p [점층적 나이 계산] 참고

  • HTTP/1.1에서 우회책으로 서버간 비교, 종단간 비교를 안하고 상대적인 나이를 누적하도록 하긴 하지만, 1.1이 아닌 경우와 소통할 때는 불완전한 추정값으로 계산한다.
  1. 다음 보기 중 옳은 것을 골라 빈 칸을 채우세요. (d, e, a, c)

a. $응답을_받은_시각 - $요청을_보낸_시각
b. $Date_헤더값 - $응답을_받은_시각
c. $보정된_겉보기_나이 + $응답_지연_추정값
d. $응답을_받은_시각 - $Date_헤더값
e. $겉보기_나이, $Age_헤더값

$겉보기_나이 = max(0, $응답을_받은_시각 - $Date_헤더값);
$보정된_겉보기_나이 = max($겉보기_나이, $Age_헤더값);
$응답_지연_추정값 = ($응답을_받은_시각 - $요청을_보낸_시각);
$문서가_우리의_캐시에_도착했을_때의_나이 = $보정된_겉보기_나이 + $응답_지연_추정값

7.11.3 완전한 나이 계산 알고리즘

  1. 앞서 계산한 $문서가_우리의_캐시에_도착했을_때의_나이에 무엇을 더해야 완전한 나이 계산 알고리즘이 되는가? (주관식)
  • $사본이_얼마나_오래_우리의_캐시에_있었는지 를 더해야 한다. (캐시에 체류한 시간 등 같은 뜻으로 적으면 모두 정답)

7.12   캐시와 광고  hylee

  1. 광고회사의 딜레마에서 캐시를 쓰면 안 좋은 점은 캐시가 원 서버로 갈 접근들을 모두 흡수하기 때문에 광고 횟수만큼 돈 벌기가 힘들기 때문이다. (O/X)
  2. 콘텐츠 제공자가 이상적인 경우는 캐시가 트래픽을 흡수하도록 내버려두고 캐시가 그들에게 적중이 얼마나 많이 일어났는지 알려주지 않게 하는 것이다. (O/X)
  3. RFC 2227 프로토콜은 HTTP에 때때로 특정 URL에 대한 캐시 적중 횟수를 정기적으로 서버에게 돌려주는 _________ 라고 하는 새 헤더를 추가했다. (주관식)
  4. 서버는 __________ 을 통해 캐시가 원 서버에게 보고하기 전, 캐시된 리소스가 얼마나 많이 사용될 수 있는지 서버가 제어할 수 있게 해준다. (주관식)
📄 답지
  1. (O) 반대로 캐시가 좋은 점은 광고회사가 대용량 멀티프로세서 웹 서버를 살 필요 없이 캐시를 통해 광고를 통해 사용자들에게 더 빠르게 잘 보여줄 수 있기 때문이다.
  2. (X) 캐시는 그들에게 적중이 얼마나 많이 일어났는지 알려주어야 한다.
  3. Meter 헤더
  4. 사용량 제한