피드로 돌아가기
Python functools: lru_cache, partial, reduce, and wraps
Dev.toDev.to
Backend

functools 기반 고차 함수 활용을 통한 Boilerplate 제거 및 I/O 성능 최적화

Python functools: lru_cache, partial, reduce, and wraps

German Yamil2026년 5월 19일8intermediate

Context

반복적인 HTTP 요청 및 중복 계산으로 인한 시스템 리소스 낭비와 런타임 지연 발생. 데코레이터 구현 시 메타데이터 손실로 인한 디버깅 효율 저하 및 함수 인자 중복 정의에 따른 코드 유지보수성 하락.

Technical Solution

  • @lru_cache 도입을 통한 동일 인자 호출 시 결과값 메모리 캐싱으로 네트워크 Round-trip 제거
  • functools.partial 활용으로 공통 인자를 사전 바인딩하여 특정 컨텍스트에 최적화된 가벼운 Factory 함수 설계
  • @wraps 적용으로 데코레이터 내부 wrapper 함수에 원본 함수의 name, doc 등 메타데이터를 전이시켜 introspection 유지
  • @cached_property 사용으로 인스턴스별 Lazy Loading 기반의 결과값 캐싱 및 dict 직접 접근을 통한 Descriptor 오버헤드 제거
  • functools.reduce를 통한 다중 함수 체이닝으로 동적 데이터 처리 파이프라인의 추상화 구현

1. I/O 비용이 높은 함수에 @lru_cache 적용 검토 (단, 인자는 반드시 Hashable해야 함)

2. 모든 커스텀 데코레이터 정의 시 @wraps를 사용하여 원본 메타데이터 보존

3. 동일한 키워드 인자가 반복되는 API 호출부는 partial로 캡슐화

4. 인스턴스 생성 후 1회만 계산되는 무거운 속성은 cached_property로 최적화

원문 읽기