피드로 돌아가기
Stop Pre-Generating Image Thumbnails in Laravel — Do It On-The-Fly Instead
Dev.toDev.to
Backend

On-The-Fly 렌더링과 캐싱을 통한 스토리지 비용 및 큐 부하 제거

Stop Pre-Generating Image Thumbnails in Laravel — Do It On-The-Fly Instead

Fomin Vasyl2026년 5월 7일6intermediate

Context

Pre-generation 방식의 이미지 썸네일 생성으로 인한 스토리지 비용 증가 및 디자인 변경 시 대규모 재처리가 필요한 운영 리스크 발생. 업로드 시점에 모든 변체를 생성하는 구조로 인해 불필요한 Queue 처리 시간과 복잡한 마이그레이션 로직이 강제되는 한계 존재.

Technical Solution

  • League/Glide 기반의 On-the-fly 프로세싱을 도입하여 최초 요청 시에만 이미지 변환을 수행하는 지연 생성 구조 설계
  • 생성된 결과물을 S3 등 설정된 Filesystem Disk에 영구 캐싱하여 두 번째 요청부터는 애플리케이션 레이어를 거치지 않는 Pure Cache 응답 구현
  • Redis 기반의 Cache::lock()을 활용하여 동일 이미지에 대한 동시 요청 시 발생하는 중복 처리 Race Condition 방지
  • SSRF protection 및 Allowlist 기반의 파라미터 검증을 통해 임의의 리소스 요청 및 Image Bomb 공격 차단
  • HMAC-signed URL 적용을 통한 파라미터 변조 방지 및 보안성 확보
  • Cache-Control(max-age=31536000) 헤더 설정을 통한 CDN 및 Nginx Edge 캐싱 최적화

1. 이미지 사이즈 변경이 빈번한 프로젝트인지 확인

2. Redis를 통한 분산 락(Distributed Lock) 적용 가능 여부 검토

3. SSRF 및 Image Bomb 방지를 위한 Allowlist 정의

4. CDN Edge 캐싱 설정을 통한 L7 레이어 응답 최적화 적용

원문 읽기