NestJS 환경에 맞는 Custom Decorator 만들기
송현지 토스 · 토스 기술 블로그
AI 핵심 요약
메서드 데코레이터 안에서 NestJS Provider에 접근하기 어렵고, 메서드를 덮어쓰는 일반 데코레이터가 NestJS 메타데이터를 끊을 수 있다는 문제가 출발점입니다. 글에서는 SetMetadata로 클래스와 메서드에 표식을 남긴 뒤 DiscoveryService와 MetadataScanner로 대상을 찾아 모듈 초기화 시점에 처리하는 방식을 설명하고, 이를 반복 가능한 AOP 구조로 정리한 @toss/nestjs-aop의 설계를 소개합니다. 또한 데코레이터 실행 순서 때문에 Cron 같은 메타데이터 기반 기능이 깨질 수 있음을 보이고, 래퍼 함수의 프로토타입을 원본 메서드에 연결해 메타데이터를 유지하는 방법을 제시합니다. NestJS에서는 DI와 메타데이터 수명·프로토타입을 함께 고려해 데코레이터를 설계해야 한다는 점이 핵심입니다.
- 데코레이터에서 NestJS Provider를 사용해야 한다면 메서드 실행 시점에 직접 주입을 기대하기보다, 메타데이터로 대상을 표시하고 모듈 초기화 단계에서 인스턴스를 찾아 처리할 수 있습니다.
- DiscoveryService로 Provider를 조회하고 MetadataScanner로 메서드를 순회하면 특정 메타데이터가 붙은 메서드만 골라낼 수 있습니다.
- 메서드 데코레이터는 아래에서 위 순서로 실행되므로, 메서드를 교체하는 데코레이터가 NestJS의 메타데이터를 잃게 만들 수 있습니다.
- 래퍼 함수의 프로토타입을 원본 메서드에 연결하면 원본 메서드에 등록된 메타데이터를 조회할 수 있습니다.
소개
NestJS에서 데코레이터를 만들기 위해서는 NestJS의 DI와 메타 프로그래밍 환경 등을 고려해야 합니다. 어떻게 하면 이러한 NestJS 환경에 맞는 데코레이터를 만들 수 있을지 고민해보았습니다.
비슷한 학습 자료
컨퍼런스 SLASH
비대면으로 더 똑똑하게 대출 서류를 발급할 수 없을까요? 웹뷰에서 Nest.js 서버를 띄워 토스뱅크의 대출 서비스에 적용한 사례를 나눕니다. 박진수 / Node.js Platform Team Leader 토스 개발자 컨퍼런스 SLASH에 대한 자세한 정보는 👉🏻 https://toss.im/slash-24 컨퍼런스 및 세션에 대한 문의는 👉🏻 slash@toss.im 토스에 합류하고 싶다면 👉🏻 https://toss.im/career/jobs #토스 #개발자컨퍼런스 #SLASH #SLASH24 #nodejs #nestjs #토스뱅크 유의 사항 *본 발표자료의 저작권은 연사에 있으며, 저작권자의 사전 서면 동의 없이 자료의 일부 또는 전부를 이용하거나 배포할 수 없습니다. *또한 해당 자료를 복제하여 SLASH 행사 홈페이지를 제외한 온라인상에 게재하는 행위는 연사가 동의한 저작권 및 배포전송권에 위배됩니다. *토스가 다루는 모든 개인정보는 고객에게 동의를...
백엔드 모바일 앱 개발
문서 이주함
쓰기 쉬운 Toss Front SDK
문서 토스 프론트엔드 챕터
Next.js 그만 쓰세요! 면접관이 진짜 원하는 것!? | EP.8 모닥불
문서 김동현
환경 고민없이 개발하기
문서 박서진