NestJS Custom Caching Decorator 만들기
백엔드
NestJS Custom Caching Decorator 만들기
두줄요약
NestJS 서비스 메소드에 캐시와 cron 로직을 반복 작성하는 문제를 줄이기 위해 커스텀 `@ZumCache` 데코레이터를 설계했습니다.\nDiscoveryService와 MetadataScanner를 활용해 Provider 인스턴스를 탐색하고, 메타데이터 기반으로 캐시와 주기 갱신을 자동화했습니다.
문제 상황
- NestJS 환경에서 서비스 메소드마다 캐시 로직과 cron 갱신 로직을 반복 작성해야 하는 불편함
- 메소드가 많아질수록 유지보수 비용과 장애 위험이 커지는 구조
- NestJS 기본 Cache, Schedule 기능은 컨트롤러 중심이라 Provider 단 캐싱에 바로 쓰기 어려움
원인 분석
- 데코레이터는 클래스 선언 시점에 실행되어, 단순히 메소드 바깥에서만으로는 인스턴스 로직을 바꾸기 어려움
- 공식 문서에는 Provider의 싱글톤 컨테이너에 접근해 메타데이터를 읽는 흐름이 충분히 드러나 있지 않음
- 서비스별 캐싱과 주기 갱신을 수동 구현하면 코드 중복이 급격히 증가
해결 방법
DiscoveryModule,DiscoveryService,MetadataScanner,Reflector를 활용해 Provider 인스턴스와 데코레이터 메타데이터를 탐색@ZumCache메타데이터를 기준으로 메소드에 캐시 래퍼를 주입하고, 필요 시 cron 작업까지 등록- 캐시 키 자동 생성, ttl, validate, logger 옵션을 제공해 반복 코드를 줄임
적용해볼 점
- NestJS에서 컨테이너 탐색과 메타데이터 기반 확장 패턴을 활용한 공통 기능 추상화
- 캐시와 스케줄링을 하나의 데코레이터로 묶어 서비스 레이어의 중복 제거
