흰 스타렉스에서 내가 내리지

CF(3): CloudFront Caching (캐싱) 본문

AWS

CF(3): CloudFront Caching (캐싱)

주씨. 2024. 10. 25. 20:11
728x90

# CloudFront 캐싱 티어

  • CloudFront 의 캐싱은 2티어 
  • 요청 순서
    • Edge Location : 캐싱이 있는지 확인
    • Regional Edge Cache : Edge Location 에 캐싱이 없으면 여기에 요청. (Edge Location 들의 캐시)
    • Origin : Regional Edge Cache 에도 없으면 Origin 에 요청

 

 


# CloudFront 의 Cache key

  • 요청에 따라 어떤 캐시 내용을 보여줄지를 결정하는 정보의 조합
    • 각 오브젝트는 고유의 Cache Key 단위로 캐시됨
  • Cache Hit : 뷰어가 특정 Cache Key 로 오브젝트를 요청하였을 때, Edge Location 에서 해당 Cache 오브젝트를 가지고 있어 원본에 요청 과정 없이 제공할 수 있는 상황
    • Origin 의 부하 경감 가능
    • 더 빠르게 컨텐츠 제공 가능
    • 즉 CDN 이 Cache Hit이 많을수록 더 좋은 퍼포먼스 제공 가능
  • 주요 Cache Key 구성 요소
    • 경로(기본), query string, HTTP header, Cookie

 

위와 같이 쿼리스트링에 따라 반환되는 이미지 컨텐츠가 다른 애플리케이션을 가정해보자. 

 

cache key 에 아무런 설정을 하지 않으면, query string 을 무시하고 오로지 url path 로만 이미지를 요청하게 된다. 

이를 해결하기 위해, cache key 에 query string color 를 추가해준다. 

 

 

그러면 Edge Location 에서는 query string 에 따라서도 이미지를 따로 캐싱하게 된다. 

 

따라서 Cache key 를 설정하는 것은 매우 중요하고, 이를 어떻게 설정하냐에 따라 performance 도 달라지게 된다

쓸데없는 cache key 를 설정하지 않는 것도 매우 중요하다. 

cache key 의 query string 이 2개일 경우
Cache key 에 HTTP Header 를 추가한 경우

 


# HTTP Header based Cache

  • Cache Key 중 HTTP Header 를 활용
  • 활용 사례
    • 언어별 캐싱
    • Device Type 별 캐싱
      • CloudFront 에서 별도로 User-Agent 를 기반으로 전용 헤더 생성
      • CloudFront-Is-Desktop-Viewer / CloudFront-Is-Mobile-Viewer / CloudFront-Is-SmartTV-Viewer 등
    • 지역별 캐싱 
      • CloudFront 에서 전용 헤더 생성 (CloudFront-Viewer-Country)
  • 헤더 명은 대소문자를 구분하지 않지만, 값은 구분
    • key 로 Language, language 는 똑같은 거임

 


# Cookie based Cache

  • Cookie 를 기반으로 컨텐츠 내용을 캐시
    • Cookie 를 활용하지 않는 HTTP 서버 혹은 S3 에서 사용할 경우 퍼포먼스만 저하될 수 있음

 


# Cache 만료

  • 캐시된 Object 는 일정 기간 (TTL, Time To Live) 이후 만료
    • 그 다음 요청이 올 경우 CloudFront 는 Origin 에 Object 갱신 여부를 확인
    • Origin 이 304 Not Modified 를 줄 경우 갱신이 필요 없다고 판단, 갖고 있는 것 그대로 쓴다.
    • 만약 Origin 이 200 OK 와 함께 파일을 줄 경우, 파일을 갱신한다.

 


# Cache TTL

  • TTL (Time to Live) : Cache Object를 얼마나 오래 보관할지에 관한 설정
    • 기본 24시간
    • 모든 CloudFront 의 Object에 적용
    • 파일 단위에서는 Origin 에서 Cache-Control 헤더 혹은 Expires 헤더를 포함해서 조절 가능.
  • TTL의 종류
    • Minimum TTL : 최소 TTL, 즉 파일 단위 컨트롤에서 줄 수 있는 최소 TTL. Cache-Control 헤더에서 더 작은 값을 담아 주더라도 minimum TTL 값을 보장한다.
    • Maximum TTL : 최대 TTL, 즉 파일 단위 컨트롤에서 줄 수 있는 최대 TTL. Cache-Control 헤더에서 더 큰 값을 담아 주더라도 maximum TTL 값을 보장한다.
    • Default TTL : 별도의 설정이 없을 경우 부여되는 기본 TTL

 


# Cache TTL 컨트롤

  • 파일 단위에서는 Origin 에서 Cache-Contorl 헤더 혹은 Expires 헤더를 포함해서 조절 가능
  • Cache-Control : 얼마나 오래 Object 를 Cache 하는지 기간을 설정 
    • max-age : CloudFront 와 브라우저 둘 다 영향 
    • s-maxage : CloudFront 만 영향
    • no-cache, no-store : 캐싱하지 않음 (단, Min TTL 이 0 이상일 경우 Min TTL 로 최저 설정)
  • Expires: Cache 가 만료되는 정확한 시각을 설정 
    • CloudFront 와 브라우저 영향
  • CloudFront 의 Min/Max TTL 범위 안에서만 설정 가능

 

  • 서버에서 이미지 컨텐츠를 제공할 때, Cache-Control 헤더를 통해 max-age 를 지정해서 준다. 
  • 만약 서버에서 이 헤더를 제공하지 않으면, CloudFront 설정을 따른다.

 


# Cache Policy

  • 캐싱과 관련된 내용을 정책으로 정의하여 CloudFront 에 적용 가능
  • 주요 설정
    • 어떤 cache-key(HTTP Header, 쿠키, querystring 등) 로 컨텐츠를 캐시하는지
    • 얼마나 오래 캐시하는지 (TTL)
    • 컨텐츠 압축 저장 관련 설정
  • 2가지 종류
    • Managed : AWS 에서 직접 생성한 Policy로 다양한 상황을 위해 미리 준비된 Policy
    • Custom : 직접 설정