목록 보기
NestJS Custom Caching Decorator 만들기
백엔드

NestJS Custom Caching Decorator 만들기

ZUM
ZUM
2021년 11월 11일

두줄요약

NestJS 서비스 메소드에 캐시와 cron 로직을 반복 작성하는 문제를 줄이기 위해 커스텀 `@ZumCache` 데코레이터를 설계했습니다.\nDiscoveryService와 MetadataScanner를 활용해 Provider 인스턴스를 탐색하고, 메타데이터 기반으로 캐시와 주기 갱신을 자동화했습니다.

문제 상황

  • NestJS 환경에서 서비스 메소드마다 캐시 로직과 cron 갱신 로직을 반복 작성해야 하는 불편함
  • 메소드가 많아질수록 유지보수 비용과 장애 위험이 커지는 구조
  • NestJS 기본 Cache, Schedule 기능은 컨트롤러 중심이라 Provider 단 캐싱에 바로 쓰기 어려움

원인 분석

  • 데코레이터는 클래스 선언 시점에 실행되어, 단순히 메소드 바깥에서만으로는 인스턴스 로직을 바꾸기 어려움
  • 공식 문서에는 Provider의 싱글톤 컨테이너에 접근해 메타데이터를 읽는 흐름이 충분히 드러나 있지 않음
  • 서비스별 캐싱과 주기 갱신을 수동 구현하면 코드 중복이 급격히 증가

해결 방법

  • DiscoveryModule, DiscoveryService, MetadataScanner, Reflector를 활용해 Provider 인스턴스와 데코레이터 메타데이터를 탐색
  • @ZumCache 메타데이터를 기준으로 메소드에 캐시 래퍼를 주입하고, 필요 시 cron 작업까지 등록
  • 캐시 키 자동 생성, ttl, validate, logger 옵션을 제공해 반복 코드를 줄임

적용해볼 점

  • NestJS에서 컨테이너 탐색과 메타데이터 기반 확장 패턴을 활용한 공통 기능 추상화
  • 캐시와 스케줄링을 하나의 데코레이터로 묶어 서비스 레이어의 중복 제거

댓글 0

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...