요약

  • 기본 요금제에서 MISS와 STALE은 이미지 변환과 캐시 쓰기 사용량을 발생시킨다. HIT가 전역 공유 캐시에서 파일을 가져오면 읽기 사용량이 생기지만, 최근 같은 지역에서 사용한 지역 캐시에는 이 읽기 비용이 붙지 않는다.
  • 필요한 너비·품질·포맷을 정리하면 불필요한 변형을 줄일 수 있다. 긴 캐시 유효기간과 최적화 생략은 각각 이미지 최신성과 전송량까지 함께 따져야 하는 선택이다.

사진 촬영은 끝났고 파일도 올라갔다. 그런데 그 한 장이 휴대전화 화면과 큰 모니터에 맞춰 서로 다른 파일로 배달된다. 편집자는 사진 한 장을 관리하고 개발자는 여러 크기를 허용한다. 비용 담당자가 관리 화면의 사진 개수만 받아 가면, 청구서를 설명할 사람은 어느새 사라진다.

Vercel 이미지 최적화의 기본 과금 방식은 이 틈을 드러낸다. 변환, 캐시 쓰기, 캐시 읽기를 구분하고, 이용자에게 보내는 Fast Data Transfer와 CDN Requests도 별도로 센다. 한 번 변환한 사진을 다시 쓴다는 사실은 반복 변환을 줄여 준다. 파일을 꺼내고 보내는 모든 작업까지 끝내 주지는 않는다.

HIT라는 결과 안에도 두 경로가 있다

공식 과금 문서는 캐시 읽기를 전역 공유 캐시에서 이미지를 가져오는 작업으로 설명한다. 읽기 단위는 8KB다. 모든 HIT에 이 사용량이 붙는 구조는 아니다. 같은 지역에서 몇 시간 전처럼 최근에 접근한 이미지는 지역 캐시에 남아 있어 해당 읽기 비용이 발생하지 않는다.

따라서 캐시 적중률 하나로 읽기 비용을 역산할 수 없다. 똑같이 HIT라고 표시돼도 가까운 지역 캐시에서 받았는지, 전역 공유 캐시에서 가져왔는지에 차이가 있다. 특히 이용자가 어디에 모여 있고 어떤 파일을 반복해서 요청하는지가 중요해진다. 단순히 해외 이용자가 늘었다는 사실만으로 비용 증가율을 정할 수는 없다. 실제 지역별 요청과 파일 크기, 캐시 사용 내역이 필요하다.

MISS는 필요한 이미지가 없어 가져오고 변환한 뒤 저장해 보내는 경우다. STALE은 이미 있는 파일을 먼저 보내고 뒤에서 다시 검증하는 경우다. 문서는 두 상태 모두 변환과 쓰기 사용량을 발생시킨다고 명시한다. 쓰기도 8KB 단위로 측정한다. 페이지에서 사진이 잘 보인다고 해서 뒤에서 일하는 과정까지 멈춘 것은 아니다. 화면의 평온과 청구 항목의 평온은 별개의 문제다.

사진 개수보다 허용한 선택지가 중요하다

작동 방식 문서를 보면 변형본을 구별하는 입력에 요청 너비와 품질, 프로젝트, 정규화한 Accept 헤더가 들어간다. 로컬 이미지는 내용 해시를, 원격 이미지는 절대 URL을 키에 반영한다. 같은 사진처럼 보여도 요청 조건에 따라 다른 결과물을 사용할 수 있다.

다양한 화면에 맞는 이미지를 만드는 일은 서비스의 장점이다. 작은 화면에 필요 이상의 큰 파일을 보내지 않을 수 있기 때문이다. 비용 관리가 할 일은 이 기능을 무조건 없애는 것이 아니라 실제로 필요한 선택지를 정하는 것이다. 허용 너비를 늘린다고 가능한 모든 조합이 곧바로 생성되는 것은 아니다. 그중 어떤 변형본을 요청하고 다시 쓰느냐가 실제 작업을 만든다.

회사의 사진 보유량은 이 구조의 일부만 보여 준다. 사진을 추가하지 않은 개편이라도 이미지 구성 요소가 더 많은 너비나 품질을 요청하면 작업 내용이 달라질 수 있다. 반대로 사진이 많아도 요청하지 않는 원본의 개수만으로 변환 사용량을 설명할 수 없다.

Vercel의 사용량 관리 안내는 포맷, 품질, 화면별 이미지 크기와 허용 원본 패턴을 조정하는 방법을 제시한다. 선택지 수와 결과 파일의 크기는 구별해서 볼 필요가 있다. 선택지를 줄이면 만들 수 있는 변형본의 범위를 좁힌다. 품질을 내려 파일이 작아지면 읽기·쓰기·전송에 필요한 데이터양을 줄일 수 있다. 마지막 판단은 방문자가 받는 사진으로 해야 한다. 용량 보고서가 좋아져도 제품의 질감을 알아보기 힘들어졌다면 판매 화면의 목적을 놓친 셈이다.

오래 보관할수록 교체 절차가 중요해진다

잘 바뀌지 않는 이미지의 캐시 유효기간을 늘리면 재변환과 쓰기를 줄일 수 있다. 비용 절감 방안으로는 자연스럽다. 다만 사진을 고쳐야 하는 날에도 같은 설정이 작동한다.

원격 원본을 같은 주소에서 바꿔도 이미 캐시한 결과물은 즉시 새 사진으로 바뀌지 않는다. 만료되거나 무효화할 때까지 기존 파일을 보여 줄 수 있다. 원격 캐시의 TTL은 원본의 max-age와 minimumCacheTTL 중 더 큰 값을 따른다. 애플리케이션을 다시 배포하는 것만으로 이미지 캐시가 무효화되지 않는다는 설명도 있다. 로컬 파일은 내용을 바꾸고 재배포해 내용 해시가 달라지도록 할 수 있으며, 명시적인 캐시 제거 방법도 제공된다.

여기서 긴 TTL을 곧바로 지역 캐시의 장기 체류 보장으로 읽으면 계산이 틀어진다. 변형본의 유효기간과 가까운 지역에 최근 사용한 복사본이 남는 조건은 다른 규칙이다. 긴 유효기간만으로 전역 캐시 읽기가 그동안 전부 사라진다고 약속할 수 없다.

운영자가 정할 것은 교체를 맡은 사람과 방문자에게 새 이미지가 도달했는지 확인할 방법이다. 제품 설명과 맞지 않는 사진을 수정했다면 업로드 완료 표시보다 실제 페이지가 중요하다. 빨리 고치겠다는 약속은 파일을 교체하는 절차까지 포함해야 한다.

꺼 버리면 다음 항목으로 이동할 수도 있다

아주 작은 이미지나 벡터처럼 최적화의 실익이 작은 파일은 최적화를 생략할 수 있다. 그렇게 처리한 파일의 변환과 이미지 캐시 읽기·쓰기는 피할 수 있다. 그러나 공식 안내는 전체 이미지에 이를 적용하면 Fast Data Transfer 비용이 커질 수 있다고 경고한다. 원본을 직접 보내는 양이 늘 수 있기 때문이다. 비용 항목 하나를 없앤 것과 전체 비용을 낮춘 것은 다른 성과다.

계산 전에는 실제 과금 기준도 확인해야 한다. 기존 과금 문서는 2025년 2월 18일 이전에 만들어진 일부 Enterprise 팀이 계약 만료까지 기존 원본 이미지 수 기준을 유지하거나 기본 방식으로 전환할 수 있다고 설명한다. 모든 팀이 원본 개수 기준을 선택할 수 있는 것은 아니다.

구체적인 절감액을 내려면 해당 팀의 계약 기준, 변형본별 크기, 지역별 사용과 실제 측정값이 더 필요하다. 지금 문서에서 분명한 것은 구매 대상이 여러 작업으로 나뉜다는 점이다. 사진을 작게 만드는 작업, 재사용할 파일을 보관하고 꺼내는 작업, 이용자에게 보내는 작업을 구분해야 한다. 사진은 한 장이어도 회계는 단체사진이다.