티스토리 뷰
728x90
📝 강의출처: 모든개발자를 위한 HTTP 웹 기본지식 / 김영한
개발주제 블로그 스터디 포스팅: 1회차
캐시와 조건부 요청헤더
캐시제어 헤더
- Cache-Control: 캐시제어
- Pragma: 캐시제어(하위호환)
- Expires: 캐시 유효기간(하위호환)
Cache-Control - 캐시제어 / 캐시 지시어(directives)
- Cache-Control max-age: 캐시 유효시간, 초 단위
- Cache-Control no-cache: 데이터는 캐시해도 되지만 항상 원(origin)서버에 검증하고 사용
- ETag와 Last-Modified 헤더를 이용하여 조건부 요청을 하여, 서버에 있는 데이터와 동일한지 서버한테 검증을한다. 서버 검증의 결과에서 304 NotModified 응답받으면, 로컬에 저장된 캐시데이터를 사용한다.
- 원서버(origin server): 캐시데이터를 검증할때, 중간서버(프록시서버)에 캐시데이터 검증을 하는게 아니라 데이터를 가지고 있는 서버에게 요청을 해야한다.
- Cache-Control no-store: 민감한 정보의 데이터라면 캐시에 저장하면 안됨. (메모리에서만 사용하고 최대한 빨리삭제)
- 캐시는 하드디스크에 저장되는 편이다.
Pragma - 캐시제어 (하위호환)
- Pragma: no-cache
- HTTP 1.0 하위호환
- 하위호환은 현재에서는 사용하지 않음 - 옛날 버젼의 브라우저에서만 하위호환이 필요한경우만 사용
Expires - 캐시만료일 지정(하위호환)
- 캐시 만료일을 정확한 날짜로 지정
- HTTP 1.0 부터 사용
- 더 유연한 Cache-Control: max-age 를 권장
- 초단위가 훨씬 유연함.
- Cache-Control: max-age 와 함께 사용하면 Expires는 무시
- 하위호환은 현재에서는 사용하지 않음 - 옛날 버젼의 브라우저에서만 하위호환이 필요한경우만 사용
프록시 캐시
현재 사용하고 있는 프록시캐시? ⇒ CDN(Content-Deliver-Network)과 aws cloudfront가 해당!
- 한국 사람들이 잘 안보는 외국 콘텐츠의 경우 빨리 못봄
- 한국 사람들이 자주보는 콘텐츠라면 빠르게 볼 수 있다.
- 글로벌 서비스에서 많이 활용된다.
프록시 캐시: 프록시 서버가 자주 요청되는 데이터의 사본을 저장하여 성능을 높이는 기술
- 웹콘텐츠에 대한 응답 속도를 빠르게 하여 원서버의 부하를 줄이는 역할
- 저장방식
- 메모리 캐시: 시스템 메모리에 저장하여 응답속도가 빠르지만 메모리 용량에 따라 크기 제한이 있다.
- 디스크 캐시: 디스크 스토리지에 저장하여 메모리 캐시보다 응답속도는 느리지만, 저장공간이 크기때문에 더 많은 데이터를 저장할 수 있다.
프록시 서버: 클라이언트와 서버 사이의 중개자 역할
- 보안 및 익명성: 사용자의 실제 IP주소를 숨겨 개인정보 보호에 기여한다.
- 접근제어: 특정 웹사이트 접근을 차단하거나 허용하는 정책을 적용할 수 있다.
- 로드밸런싱: 여러 서버로 요청을 분산시켜 부하를 줄인다. (리버스 프록시)
- 종류는 포워드프록시, 리버스 프록시가 존재한다.
포워드 프록시

- 클라이언트와 인터넷 사이에 위치하여 클라이언트의 요청을 대신 서버에 전달한다.
- 사용용도
- 캐싱: 자주사용되는 콘텐츠를 캐시하여 네트워크 성능을 향상시킨다.캐싱된 데이터에 대한 요청이 발생하면 원서버에 대한 부하가 감소하고 네트워크 병목현상도 감소할 것이다.
- 클라이언트 입장에서 원서버에 비해 프록시 서버가 물리적으로 더 가까운 위치에 있다면 전송시간이 단축된다.
자주사용되는 HTML, JS, CSS, 이미지와 같은 정적파일들을 원서버로부터 캐싱하고, 클라이언트가 요청할때 원서버로 요청하는대신 가지고 있는 캐시로 응답할 수 있다.
- 클라이언트 입장에서 원서버에 비해 프록시 서버가 물리적으로 더 가까운 위치에 있다면 전송시간이 단축된다.
- 특정 콘텐츠 액세스 제한: 조직이나 기업 네트워크에서 특정 웹사이트로의 접근을 제한하거나 차단할 수 있다.
- 사내망에서도 보안을 위해서 특정 웹사이트 접속을 차단할 수 있다.
또한 아동이나 청소년에게 유해한 웹사이트를 프록시서버를 통해서 차단할 수 있다. - 내부망에 프록시서버를 두어 특정 컨텐츠에 대한 액세스를 제한할 수 있다.
- 사내망에서도 보안을 위해서 특정 웹사이트 접속을 차단할 수 있다.
- 익명성 및 보안: 실제 클라이언트의 IP주소를 숨기고 프록시 서버의 IP로 요청하므로 서버는 클라이언트의 실제 정보를 알 수 없다.
- 클라이언트의 요청은 포워드 프록시 서버를 통과할때 암호화된다.
- 암호화된 요청은 다른서버를 통과할때 필요한 최소한의 정보를 갖게되는데 이는 클라이언트 IP를 감춰주는 보안효과가 있다.
- 모든요청이 프록시 서버를 통해 발생하므로 클라이언트의 IP가 노출되는 것을 원치 않을 경우에 사용된다.
- 캐싱: 자주사용되는 콘텐츠를 캐시하여 네트워크 성능을 향상시킨다.캐싱된 데이터에 대한 요청이 발생하면 원서버에 대한 부하가 감소하고 네트워크 병목현상도 감소할 것이다.
리버스 프록시


- 원서버 직접 접근 - 거리가 멀수록 통신속도가 느리다. (원서버: 실제 데이터를 갖고있는 서버)
프록시 캐시(프록시 서버)가 중간에 있다면 - 원서버보다 가까우므로 프록시 캐시에서 불러온다. 만일 프록시캐시에도 없는 데이터를 요청해야된다면 그때는 프록시가 원서버에게 요청을 해야한다.


- 프라이빗 캐시: 웹브라우저나 로컬에 저장
- 퍼블릭 캐시: 공용으로 사용되는 캐시서버
캐시 무효화
캐시무효화 전략은 캐시된 데이터의 최신성(일관성)을 보장하고 오래된 데이터로 인한 문제를 방지하는 것을 목표로한다.
확실한 캐시 무효화 응답할 때 필요한 헤더들 (Pragma는 과거 브라우저에도 반영을 하기위해서)은 다음과 같다.
- Cache-Control: no-cache, no-store, must-revalidate
- Pragma: no-cache (HTTP 1.0 하위호환)
캐시지시어
- Cache-Control: no-cache
- 데이터는 캐시해도 되지만, 항상 원서버에서 검증하고 사용
- Cache-Control: no-store
- 데이터에 민감한 정보는 디스크 캐시에 저장하면 안됨. 메모리에서 사용하고 최대한 빨리 삭제
- Cache-Control: must-revalidate
- 캐시 만료후 최초 조회시 원서버에 검증해야함
- 원서버 접근 실패시 반드시 오류가 발생해야함 504(Gateway Timeout)
- must-revalidate는 캐시 유효시간이라면 캐시를 사용함
Cache-Control: no-cache 기본동작
- 캐시데이터가 만료됐을때 다시 요청하려면캐시서버도 원서버에게도 데이터를 검증을 요청 해야한다.
- 즉 원서버가 검증을 해야한다.
- 클라이언트는 캐시서버에 요청하지만, 캐시서버가 바로 응답하는게 아니라 캐시서버도 원서버에게 데이터 검증을 요청해야한다. 반드시 원서버한테서 데이터 검증을 요청해야한다.


Cache-Control: no-cache VS Cache-Control: must-revalidate
그런데 만일 원서버로 접근이 불가능할때 no-cache와 must-revalidate의 차이점이 두드러진다.
no-cache의 경우는 원서버로 접근이 불가능하여 데이터검증을 할 수 없다면 프록시 캐시에서 저장된 데이터로 응답하도록 한다.

반면 must-revalidate는 반드시 원서버에서 검증을 거쳐야하므로 504(Gateway Timeout) 에러를 발생한다.

728x90
반응형
'Backend > 꾸준히 TIL' 카테고리의 다른 글
| SPA (Single Page Application) (4) | 2025.12.08 |
|---|---|
| DLQ 이론 (0) | 2025.12.05 |
| [WIL-01 주차] 1주차 회고 (2) | 2024.12.22 |
| 웹소켓(Web Socket) (0) | 2024.07.10 |
| path.join(__dirname) 학습 (0) | 2023.11.08 |
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday