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

다음 읽기

#NestJS 주제를 이어서 읽기

Zum Portal Core JS 소개

줌인터넷 프론트엔드 파트의 표준화 코어 패키지 도입과 분리 과정을 소개했습니다.\nSSR, 캐시, 설정 표준화로 유지보수와 배포 시간을 개선한 내용을 정리했습니다.

ZUM
ZUM
프론트엔드

댓글 0

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

댓글을 불러오는 중...