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에서 이미지 캐싱 속도를 최적화하려면, 서버 환경에 맞춰 캐시 방식을 선택하세요! 🚀