주제

OG 이미지 캐싱 방법

OG 이미지를 캐싱한다는 것은 공유될 때마다 다시 렌더링하는 대신, CDN에서 이전에 생성된 소셜 미리보지를 제공하는 것을 의미합니다. FastOG는 동일한 이미지를 에지(Edge)에서 1년 동안 캐싱합니다. 동일한 URL은 할당량(quota)을 소모하지 않고 약 0ms의 지연 시간으로 캐시된 PNG를 반환하므로, 사이트의 OG 트래픽 대부분은 렌더러에 도달하지 않습니다.

캐싱이 중요한 이유

소셜 공유는 플랫폼의 크롤러가 데이터를 가져오는(fetch) 트리거가 됩니다. 모든 공유마다 렌더링이 다시 진행된다면, 동일한 콘텐츠에 대해 할당량(quota)과 지연 시간(latency)을 낭비하게 됩니다. 이미지의 콘텐츠를 키로 사용하는 공격적인 캐싱(aggressive caching) 전략은 "모든 공유가 1회 렌더링으로 계산된다"는 것을 "첫 번째 공유만 1회 렌더링으로 계산되고, 나머지 모든 공유는 무료"로 바꿔줍니다.

이를 가능하게 하는 콘텐츠 기반 모델

FastOG는 콘텐츠 서명 URL을 사용합니다: URL은 매개변수의 순수 함수입니다. 동일한 제목 + 템플릿 → 동일한 URL. 이는 다음을 의미합니다:

  • FastOG의 엣지는 URL에 따라 이미지를 저장합니다.
  • 동일한 콘텐츠를 10,000번 공유 → 렌더링 1회, 할당량 1회 차감, 9,999회 캐시 히트
  • 콘텐츠를 변경 → 다른 URL → 새로운 렌더링 1회
GET /api/v1/og?title=Hello&template=default&key=...&s=...   → render (1 quota count), then
GET /api/v1/og?title=Hello&template=default&key=...&s=...   → cached (0 counts, instant)
GET /api/v1/og?title=Changed&template=default&key=...&s=... → render (1 quota count)

FastOG의 캐싱 헤더

FastOG는 렌더링된 이미지에 대해 Cache-Control: public, max-age=31536000, immutable(1년)을 반환합니다. 커버 이미지는 두 가지 계층으로 구성된 FastOG의 엣지(Edge)에서 제공됩니다: 앞쪽에는 fastog.com에 대한 렌더 캐시, 뒤쪽에는 내구성 있는 객체 저장소(Durable Object Store)가 있습니다. 반복적인 요청은 다시 렌더링하지 않고 응답하며, 응답의 X-FastOG-Worker-Cache는 어느 계층이 응답했는지(HIT, R2, MISS)를 나타냅니다.

내구성 있는 사본은 렌더러에 의존하지 않으므로, 한 번 이상 조회된 커버 이미지는 FastOG의 렌더링 서비스에서 잠시 중단이 발생해도 계속 제공됩니다. 즉, 이미 생성된 미리보기는 중단 시점에 공백으로 표시되지 않습니다. 단, 한 번도 렌더링되지 않은 커버 이미지는 렌더러가 필요한 유일한 경우이며, 이 경우 FastOG는 오류 대신 이미지를 반환합니다.

상황 크롤러가 받는 응답
이미 렌더링된 커버 엣지 또는 내구성 저장소에서 커버 이미지 제공
미렌더링, 렌더링 서비스 정상 요청 시점에 온디맨드로 렌더링된 커버 이미지 제공
미렌더링, 렌더링 서비스 일시 중단 URL에 포함된 페이지 자체의 이미지(제품 사진) 또는 중립적인 카드 이미지 제공 — 오류 페이지는 제공하지 않음

요청 자체가 유효하지 않은 경우(서명이 변조되었거나 title가 누락된 경우)에도 해당 4xx 상태 코드가 반환됩니다.

이미 게시한 이미지를 변경하는 방법

변경한 항목 조치 사항
콘텐츠 (제목, 가격, 사진) 아무것도 하지 않음: 콘텐츠는 URL에 포함되어 있으므로, 새로운 콘텐츠는 새로운 URL이 되며 새로 렌더링됨
템플릿 또는 렌더링 기본값 캐시 bust 버전을 증가시킴 (FASTOG_CACHE_BUST) — 모든 URL에 새로운 v 파라미터가 추가됨
동일한 URL로 다시 렌더링해야 하는 경우 해당 URL만 삭제해 달라고 지원팀에 요청 — 정확한 URL 삭제 기능은 공개 엔드포인트로 제공되지 않음

이미 공유된 링크는 해당 URL을 명시적으로 삭제하지 않는 한 계속 작동하며, 약속했던 이미지를 계속 표시합니다.

자체 og:image 캐싱 (셀프 호스팅)

이미지를 FastOG의 캐시 대신 직접 저장하는 경우 동일한 규칙을 적용하세요:

단계 세부 사항
캐시 키 = 콘텐츠 해시 변경 가능한 파일명이 아닌 데이터의 해시로 저장하세요
긴 TTL 안정적인 콘텐츠의 경우 max-age=31536000, immutable
버전 관리된 URL 콘텐츠가 변경될 때 해시나 버전을 추가하세요
CDN 사용 CDN이 반복적인 페치를 처리하도록 하세요

자주 묻는 질문

동일한 URL로 공유하면 렌더링 비용이 정말 0인가요?

네. 동일한 URL은 엣지 캐시에 의해 처리되며 렌더러에 도달하지 않으므로 할당량(quota)이 소모되지 않습니다.

FastOG는 이미지를 얼마나 오래 캐시하나요?

1년 동안 (immutable). 첫 렌더링이 완료된 후에도 공유된 카드는 캐시에서 제공됩니다.

이미지 업데이트가 필요하면 어떻게 하나요 (예: 실시간 가격)?

파라미터(예: 가격)를 변경하면 → 새로운 URL이 생성되고 → 새로운 렌더링이 실행됩니다. 안정적인 콘텐츠는 캐시된 상태로 유지되며, 동적 콘텐츠는 원하는 시점에 업데이트됩니다.

무료로 체험해 보세요 — 가입 불필요

몇 초 만에 동적 OG 이미지를 미리 보고 테스트하세요.

무료 OG 이미지 테스터 열기

A BeCaSimulations site