기본 콘텐츠로 건너뛰기

추천 가젯

리액트 + 비트(Vite)로 모바일 청첩장 만들기 — 2편

모바일 청첩장 시리즈 2편 · R2 갤러리 & Firebase 방명록 Cloudflare R2 · Functions Firebase Firestore 클라우드플레어 R2로 갤러리 저장하고, Firebase로 방명록 달기 안녕하세요, 병민입니다 🙌 1편에서 전체 흐름을 잡았고, 이번엔 사진 업로드/보관 과 방명록 을 연결합니다. 서버는 따로 없고 Cloudflare Pages 를 쓰고 있으니, Pages Functions (= 워커)로 R2에 사전서명 URL을 만들어주고, 프론트에서 그 URL로 바로 업로드하는 구조예요. 방명록은 Firebase DB로 간단·안전하게! 전체 그림 프론트(React) → /api/r2/upload 로 업로드용 URL 요청 → R2에 파일 PUT 프론트(React) → /api/r2/list 로 목록 요청 → 갤러리 렌더 프론트(React) → Firebase SDK로 방명록 작성/조회 1) R2 버킷 & Pages Functions 준비 Cloudflare 대시보드 > R2 > Create bucket (예: wedding-gallery ) 버킷 > Settings > CORS 에서 사이트 도메인 허용(예: https://*.pages.dev , 커스텀 도메인) Pages 프로젝트 > Settings > Functions 에서 R2 바인딩 추가: ...

🚀 파이썬 lru_cache로 함수 성능 최적화하기

파이썬 lru_cache로 함수 성능 최적화하기

🚀 파이썬 lru_cache로 함수 성능 최적화하기

요약:
functools.lru_cache는 함수 결과를 캐싱하여 반복 계산을 피할 수 있게 해주는 데코레이터입니다. 재귀 함수나 반복 호출되는 함수에 사용하면 성능이 비약적으로 향상됩니다.

🔍 lru_cache란?

functools 모듈의 lru_cache는 가장 최근에 사용된 결과를 저장해두었다가, 같은 입력이 들어오면 다시 계산하지 않고 저장된 결과를 반환하는 기능입니다. 특히 재귀 호출이 많은 함수에서 유용하게 사용됩니다.

🧭 lru_cache 작동 구조

🧪 예제: 피보나치 함수 최적화

from functools import lru_cache

@lru_cache(maxsize=None)
def fibonacci(n):
    if n < 2:
        return n
    return fibonacci(n-1) + fibonacci(n-2)

print(fibonacci(35))

위의 예제에서 fibonacci(35)를 호출하면 중복 계산 없이 빠르게 결과를 얻을 수 있습니다.

📈 성능 비교

import time

def slow_fib(n):
    if n < 2:
        return n
    return slow_fib(n-1) + slow_fib(n-2)

start = time.time()
slow_fib(35)
print("일반 함수 실행 시간:", time.time() - start)

start = time.time()
fibonacci(35)
print("캐시 함수 실행 시간:", time.time() - start)

⚠️ 주의할 점

  • lru_cache는 인자가 해시 가능한(immutable) 객체여야 합니다.
  • mutable 타입 (ex. 리스트, 딕셔너리)은 사용 불가입니다.
  • maxsize를 설정하여 캐시 저장 크기를 조절할 수 있습니다.

💡 실전 팁

  • API 응답 캐싱에 활용
  • 복잡한 계산을 여러 번 수행할 때
  • 데이터 분석에서 반복 쿼리 방지

🔗 관련 포스트

댓글

가장 많이 본 글

Icons by Flaticon