HTTP

[HTTP 완전 정복 시리즈] 9편 - HTTP 헤더2: 캐시와 조건부 요청

dev-nadan 2025. 7. 23. 14:02

이번에는 HTTP 성능 최적화에 필수적인 '캐시'와 '조건부 요청'에 대해 다룬다. 캐시를 잘 활용하면 페이지 속도가 훨씬 빨라지고 서버 부하도 줄어든다.


1. 캐시의 기본 개념

  • 같은 요청이라도 네트워크를 다시 타면 느림
  • Cache-Control: max-age=60을 설정하면, 60초 동안은 네트워크 없이 캐시된 응답 사용 가능
  • 캐시는 메모리/디스크 등에서 빠르게 꺼내 쓸 수 있어 성능 향상

2. 검증 헤더와 조건부 요청

  • 캐시 유효 시간이 지난 경우, 변경 여부만 확인하고 본문은 다운로드하지 않음
  • 주요 검증 헤더:
    • Last-Modified: 마지막 수정 시각
    • ETag: 리소스 고유 식별자 (해시처럼)
  • 주요 조건부 요청 헤더:
    • If-Modified-Since: 마지막 수정 시간이 변하지 않았으면 304 응답
    • If-None-Match: ETag 값이 같으면 304 응답

3. 304 Not Modified

  • 조건부 요청 결과, 변경된 게 없으면 304 Not Modified 응답
  • 이 경우 본문은 전달하지 않고 헤더만 응답함
  • 기존 캐시 데이터를 재사용해 네트워크 트래픽 감소

4. 캐시 제어 방식

  • Cache-Control 주요 값:
    • max-age: 캐시 유효 시간(초 단위)
    • no-cache: 저장은 가능하나, 원 서버 검증 후 사용
    • no-store: 아예 저장 금지. 민감한 정보에 사용
    • must-revalidate: 만료 후 원 서버 검증이 반드시 필요
  • Expires도 있지만 유연성 떨어져서 max-age 사용 권장

5. 프록시 캐시와 개인 캐시

  • public: 프록시 서버(CDN 등)에 저장 가능
  • private: 사용자 전용 캐시. 프록시에는 저장 금지

6. 캐시 무효화

  • 민감한 데이터나 실시간성이 중요한 데이터에는 다음 설정 사용:
    • no-store
    • no-cache
    • must-revalidate
  • 예외적으로 네트워크가 끊겨도 프록시 서버가 이전 데이터를 줄 수 있게 할 수 있지만, must-revalidate가 있다면 무조건 504 오류 발생

7. 정리 퀴즈

  1. Q: 웹 브라우저에서 캐시를 사용하는 주된 이유는?
    A: 네트워크 사용을 줄이고, 빠른 응답으로 사용자 경험을 높이기 위해서
  2. Q: 조건부 요청에서 304 응답은?
    A: 데이터가 변경되지 않았으니, 캐시된 데이터를 재사용하라는 의미
  3. Q: ETag의 장점은?
    A: 1초 미만 변화도 감지 가능하며, 더 정밀한 유효성 검사 가능
  4. Q: 민감한 정보가 있는 응답의 Cache-Control 값은?
    A: no-store
  5. Q: 프록시 캐시(CDN)의 목적은?
    A: 원 서버의 부담을 줄이고 응답 시간을 단축하기 위함