Julian Ju

캐시 TTL 설정할때 기준이 뭘까요

Blog Post created by Julian Ju Employee on Jun 24, 2015

아카마이의 CDN을 쓰다보니 늘 궁금한게 하나 있는데요.

 

바로 '지금 설정한 캐시 TTL이 잘 설정한걸까?' 혹은 '어떻게 하면 가장 효과적인 캐시 TTL을 설정하는걸까?' 하는 의문입니다.

 

캐시 TTL이 짧으면 오리진에 너무 자주 request가 날아갈테고 그렇다고 무슨 컨텐츠건 다 365일로 캐시 TTL 설정해 놓는것도 좀 이상하고...

 

그리고 캐시 주기를 길게 설정한다고 해도 사용자의 request가 적으면 캐시 이빅션(cache eviction; 컨텐츠의 순위가 낮아져 캐시에서 밀려남)이 발생해서 지워질텐데 주기만 늘리면 되나?

주기가 길면 또 변경이 있을때 purge를 일일히 해줘야하는데 번거롭고 오리진 부하도 늘고 시간도 걸리고...

 

머리를 긁다가 인터넷을 뒤져봤는데 사실 TTL 설정에 역시 정해진 답은 없더군요. 대략 다음과 같은 rule을 기준으로 잡는데...

 

1. 바뀔일이 없는 컨텐츠 (특히 버전별로 다르게 저장되는 - /js/main-v10.js 뭐 이렇게)라면 3 month정도로 길게 잡고

2. 1시간 이상 내용이 유지되는 변화가 많지 않은 컨텐츠 - 검색결과, 광고, 검색엔진에 노출 대상 페이지, 이전 버전에 호환되는 (backward compatible) js나 css - 퍼징 안하면 1h에서 1d. 매번 퍼징을 한다면 변경주기보다 2배정도로 캐시 TTL (하루에 한번꼴로 바뀐다면 TTL을 2일)

3. 15분~1시간 마다 갱신될 가능성 있는 컨텐츠 - 스케줄 정보, 제품 카테고리 리스트 등 - 15분정도의 캐시, 혹은 갱신주기의 2배로 하고 자주 퍼징

4. 15분 이내로 자주 바뀔 컨텐츠 - 뉴스 속보나 실시간 정보등 - 30초에서 15분 정도로 하는데, 퍼지를 매번하는건 비추천이므로 충분히 짧은 TTL로 설정

 

그외에도 정설로 받아들여지고 있는것은

 

1. 브라우저 캐시를 가능한한 많이 활용하라

2. 아무리 짧은 TTL이라도 no cache보다 낫다

3. 잦은 purge는 오리진 부하, 퍼지 실행 시간등이 있어 짧은 TTL의 캐시로 대체하는게 나을수 있다

 

등입니다.

 

실질적인 관점에서 TTL의 설정을 생각하면 결국은 컨텐츠를 어떻게 categorize할것인지가 가장 중요한 포인트라고 볼수 있겠네요.

 

 

참고:

https://blogs.akamai.com/2014/12/dynamic-content-a-short-ttl-as-an-alternative-to-purge.html

 

https://blogs.akamai.com/2013/11/part-2-a-practical-guide-to-web-resource-caching.html

Outcomes