새소식

반응형
Python/성능

[Python 성능] 🏎️ TTLCache vs DiskCache: 이미지 캐싱 속도 비교와 최적화 방법

  • -
반응형

python snake girl image generated by AI

이미지 또는 대용량 데이터를 빠르게 로드하려면 캐싱(Cache) 을 활용해야 합니다. 그런데 FastAPI에서 이미지를 캐싱할 때, TTLCache(메모리 캐시)와 DiskCache(디스크 캐시) 중 어떤 것이 더 나을까요?

TTLCache: RAM을 사용하여 가장 빠르지만, 메모리 제한이 있음.
DiskCache: 디스크를 활용하여 더 많은 데이터를 저장할 수 있지만, 속도가 조금 느림.

📌 이번 포스트에서는 두 방식의 성능을 비교하고, 언제 어떤 캐싱 방법을 써야 하는지 정리해보겠습니다.


반응형

🔥 캐싱 비교: TTLCache vs DiskCache

✅ 1. TTLCache (메모리 기반 캐시)

from cachetools import TTLCache
cache = TTLCache(maxsize=300, ttl=3600)

가장 빠름 (0.1ms 이하)
메모리(RAM)에서 데이터를 바로 가져옴
메모리가 제한됨 (큰 파일을 많이 캐싱하면 서버가 느려질 수 있음)
서버가 재시작되면 캐시가 사라짐


✅ 2. DiskCache (디스크 기반 캐시)

import diskcache as dc
cache = dc.Cache("./image_cache")

디스크 크기만큼 캐싱 가능 (RAM보다 저장 용량이 큼)
서버가 재시작되어도 캐시 유지
대량의 이미지 파일을 저장하는 데 적합
메모리 캐시보다 조금 느림 (읽기 속도 약 0.5ms~5ms)


🚀 성능 테스트: TTLCache vs DiskCache

3MB 크기의 이미지를 저장하고, 읽어오는 속도를 비교해봤습니다.

🛠 테스트 코드

import time
from cachetools import TTLCache
import diskcache as dc

# 캐시 설정
ttl_cache = TTLCache(maxsize=1000, ttl=3600)
disk_cache = dc.Cache("./image_cache")

# 3MB 더미 이미지 데이터
test_key = "large_image"
test_value = b"\x00" * (3 * 1024 * 1024)

# TTLCache 테스트
start = time.time()
ttl_cache[test_key] = test_value
mem_write_time = time.time() - start

start = time.time()
_ = ttl_cache[test_key]
mem_read_time = time.time() - start

# DiskCache 테스트
start = time.time()
disk_cache[test_key] = test_value
disk_write_time = time.time() - start

start = time.time()
_ = disk_cache[test_key]
disk_read_time = time.time() - start

print(f"TTLCache - 쓰기: {mem_write_time:.6f}s, 읽기: {mem_read_time:.6f}s")
print(f"DiskCache - 쓰기: {disk_write_time:.6f}s, 읽기: {disk_read_time:.6f}s")

📊 테스트 결과

캐시 방식 쓰기 속도 (3MB) 읽기 속도 (3MB)

TTLCache (메모리) 🚀 0.0001s 🔥 0.00005s
DiskCache (디스크) 🏎️ 0.003s 🔥 0.0005s

🔹 분석

  • TTLCache는 RAM에서 데이터를 즉시 가져와서 가장 빠름
  • DiskCache도 꽤 빠르지만, 메모리보다는 조금 느림
  • TTLCache는 저장 공간이 제한적이므로, 많은 이미지 캐싱에는 부적합
  • DiskCache는 서버가 재시작되어도 캐시가 유지됨

🎯 결론: 언제 어떤 캐싱을 써야 할까?

사용 사례 추천 캐시 방식

3MB 이하 작은 이미지 빠르게 로드 TTLCache (메모리 캐시)
수천 개의 이미지 캐싱 필요 DiskCache (디스크 캐시)
서버 재시작 후에도 캐시 유지 필요 DiskCache (디스크 캐시)
1GB 이상 대형 파일 캐싱 DiskCache (디스크 캐시)
극한의 빠른 응답 속도가 필요 TTLCache (메모리 캐시)

결론

  • 이미지가 적고 빠른 응답이 필요하면 TTLCache 사용
  • 이미지가 많거나 서버 재시작 후에도 캐시를 유지하려면 DiskCache 사용
  • 3MB 이상 큰 이미지를 다룰 경우, DiskCache가 RAM을 아낄 수 있어 더 유리함

📌 FastAPI에서 이미지 캐싱 속도를 최적화하려면, 서버 환경에 맞춰 캐시 방식을 선택하세요! 🚀

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.