cloudflare3분 읽기

큐레이션 요약

캐시 응답 규칙 소개

원문 읽기(새 탭에서 열림)

Cloudflare의 Cache Response Rules는 원본 서버 응답이 도착한 뒤, 캐시에 저장되기 전에 응답 헤더와 캐시 지시사항을 수정하는 기능이다. Set-Cookie, 잘못된 Cache-Control, 과도한 ETag 등으로 캐시되지 않던 콘텐츠를 원본 코드 변경 없이 캐시 가능하게 만들 수 있다. 다만 캐시 키처럼 요청 단계에서 이미 결정된 사항은 변경할 수 없으므로 기존 Cache Rules를 대체하지 않고 보완한다.

캐싱 판단이 이루어지는 시점

  • CDN은 가능한 한 캐시에서 응답하고, 캐시에서 처리할 수 없을 때만 원본 서버에 요청한다.
  • 캐시 적중률이 낮으면 원본 서버의 대역폭과 인프라 비용이 증가하고 응답 속도도 느려진다.
  • 원본 서버의 응답 헤더는 다음과 같은 캐싱 정책을 결정한다.
    • 얼마나 오래 캐시할지
    • 언제 재검증할지
    • 애초에 캐시할 수 있는지
  • 많은 캐싱 문제는 요청 시점이 아니라 원본 응답이 도착한 뒤에 드러난다.
    • 정적 파일에 실수로 Set-Cookie가 포함됨
    • 캐시해도 안전한 리소스에 Cache-Control: no-cache가 설정됨
    • 브라우저용 지시사항이 Cloudflare 캐싱에도 적용됨
    • 지나치게 공격적인 ETag로 조건부 요청마다 재검증이 발생함

기존 방식의 한계

  • 요청 단계에서는 원본 서버가 반환할 응답 헤더를 알 수 없다.
  • 따라서 요청 시점에 동작하는 Cache Rules만으로는 Set-Cookie, ETag, Last-Modified, 원본의 Cache-Control 문제를 해결할 수 없다.
  • 기존 선택지는 다음과 같았다.
    • 원본 서버 코드나 설정 변경
    • Worker로 응답을 다시 가져와 헤더 수정
    • 낮은 캐시 적중률을 감수
  • 특히 원본 서버 담당 팀과 CDN 담당 팀이 다르면 단순한 헤더 하나를 바꾸는 데도 긴 조율이 필요했다.

Cache Response Rules의 동작 방식

  • 실행 시점은 다음과 같다.
    1. Cloudflare가 캐시 미스 후 원본 서버에 요청
    2. 원본 응답 수신
    3. Cache Response Rules 적용
    4. 수정된 응답을 Cloudflare 캐시에 저장
  • 다음과 같은 응답 변경이 가능하다.
    • Set-Cookie 제거
    • ETag 및 Last-Modified 제거
    • Cache-Control 지시사항 수정
    • 캐시 태그 설정 및 관리
  • 모든 변경은 Cloudflare에서 처리되므로 원본 애플리케이션이나 서버 설정을 수정할 필요가 없다.

Cache Rules와 Cache Response Rules의 역할 차이

  • Cache Rules는 요청 단계에서 동작한다.
    • 응답을 캐시할지 여부
    • 어떤 캐시 키로 저장할지
    • Edge TTL, 브라우저 TTL, stale 응답 제공 여부
  • Cache Response Rules는 응답 단계에서 동작한다.
    • 원본 응답이 캐시에 적합한지 조정
    • 캐시를 막는 헤더 제거
    • 원본의 Cache-Control 수정
    • 캐시 태그 설정
  • 두 규칙이 충돌하면 Cache Response Rules가 우선한다.
  • 하지만 응답 단계에서는 캐시 키를 변경할 수 없다. 캐시 키는 원본 요청 전에 이미 결정되기 때문이다.

응답 단계에서 가능한 것과 불가능한 것

  • 가능한 작업:
    • Set-Cookie를 제거해 캐시 가능하게 만들기
    • 캐시 가능한 응답에 no-store를 설정해 저장하지 않기
    • 원본의 캐시 TTL이나 캐시 지시사항 변경
    • 캐시 무효화를 위한 태그 지정
  • 불가능한 작업:
    • 이미 정해진 캐시 키 변경
    • 요청 단계에서 캐시 대상에서 제외된 요청을 뒤늦게 캐시 대상으로 전환
  • 따라서 Cache Response Rules는 Cache Rules의 대체재가 아니라, 원본 응답 헤더를 보정하는 보완 기능이다.

실용적인 결론

정적 리소스가 불필요한 Set-Cookie나 잘못된 Cache-Control 때문에 캐시되지 않는다면, 원본 서버를 수정하기 전에 Cache Response Rules를 활용하는 것이 효율적이다. 다만 캐시 여부의 기본 정책과 캐시 키는 Cache Rules에서 먼저 설계하고, 응답 단계에서는 헤더와 TTL 등 원본 응답의 캐시 관련 정보를 보정하는 방식으로 함께 사용하는 것이 적절하다.

큐레이션 요약을 이어서 읽어보세요.