DevOps BootCamp/네트워크 기초

캐시

cloudmaster 2023. 4. 7. 20:33

캐시

 > 데이터나 값을 미리 복사해 놓는 임시 장소

 > 캐시의 접근 시간에 비해 원래 데이터를 접근하는 시간이 오래 걸리는 경우나 값을 다시 계산하는 시간을 절약하고 싶은 경우에 사용

 > 브라우저에 캐시를 저장할 땐 헤더에 cache-control 속성을 통해 캐시가 유효한 시간을 지정할 수 있음

 

캐시 검증 헤더와 조건부 요청

 > 캐시의 유효시간이 초과하면 다시 서버에 요청을 보내 새로운 데이터로 캐시를 업데이트

 > 하지만 캐시의 유효기간이 지났지만, 데이터의 변경이 없는 경우?

 > 검증 헤더 사용

 

★ 검증 헤더

● If-Modified-Since: ${data}(요청) -> Last Modified: ${data}(응답)

 > 데이터가 마지막으로 수정된 시간 정보를 헤더에 포함

 

1. 데이터가 수정되었는지 검증

2. 304 Not Modified +수정되지 않았다면 HTTP 헤더만 전송

3. 브라우저 캐시에서 응답 결과를 재사용, 헤더 메타데이터 또한 갱신

4. 브라우저는 캐시에서 조회한 데이터를 렌더링

 

★ 단점:

 - 1초 미만 단위로 캐시 조정 불가능

 - 날짜 기반 로직 사용

 - 데이터를 수정해서 날짜가 다르지만, 같은 데이터를 수정해서 데이터 결과가 똑같은 경우

 - 서버에서 별도의 캐시 로직을 관리하고 싶은 경우

 

● 1. ETag: "${data}"(요청) -> 서버에서 ETag 저장(응답) -> 다시 ETag 보냄, 캐시에서 저장 

2. if-None-Match: "${data}"(요청) -> ETag(Entity Tag): "${data}"(응답) 

> 캐시의 데이터에 임의의 고유한 버전 이름을 달아둠

  - ETag: "v1.3", ETag: "3aewq5eqweq684eqwe486"

> 데이터가 변경되면 이 이름을 바꾸어서 저장(Hash를 다시 생성"

> ETag를 보내서 같으면 유지, 다르면 다시 받는 방식 

 

장점 > 단순하게 ETag만 보내서 같으면 유지, 다르면 다시 받는 방식 > 캐시 제어 로직을 서버에서 완전히 관리 > 클라이언트는 단순히 이 값을 서버에 제공 > 서버는 베타 오픈 기간인 3일 동안 파일이 변경되어도 ETag를 동일 유지 > 애플리케이션 배포 주기에 맞춰 ETag 갱신

 

 

● Cache-Control: max-age (캐시 유효 기간)

 

● Cache-Control: no-cache (데이터는 캐시해도 되지만, 항상 원 서버에서 검증)

 

● Cache-Control: no-store ( 민감한 정보이므로 캐시 저장하면 안됨)

 

Expires

 > 정확한 날짜를 캐시 만료일로 지정

 > HTTP 1.0부터 사용

 > 지금은 max-age 권장

 > max-age 사용하면 Expires는 무시

 

 

'DevOps BootCamp > 네트워크 기초' 카테고리의 다른 글

CDN  (0) 2023.04.08
프록시 캐시  (0) 2023.04.08
로드밸런서(Load Balancer)  (0) 2023.04.07
프록시  (0) 2023.04.07
두 번째 발표  (0) 2023.04.07