본문으로 이동
NestJS 환경에 맞는 Custom Decorator 만들기
문서

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

문서 이주함

SDK의 품질은 어떤 기능들을 제공하는가보다, 사용자가 그 기능을 어떤 형태로 쓰게 되느냐에 따라 갈립니다. 사용 형태를 고민하기 위해, 퍼사드(Facade) 패턴에 기반하여 쓰기 쉽게 SDK 메서드와 인터페이스를 구성하는 것이 중요한 방법론이 됩니다.

백엔드

문서 박건영

왜 토스증권 PC의 그리드 레이아웃을 왜 직접 구현하게 되었는지, 그리고 어떻게 만들어져 있는지를 이제부터 소개해 드릴게요.

프론트엔드 알고리즘 · 자료구조

문서 토스 프론트엔드 챕터

토스 채용 꿀팁, 면접관들이 직접 말합니다! 토스의 문동욱 님과 이성준 님이 채용 과정에 대한 솔직한 이야기부터 실질적인 꿀팁까지, 지원한다면 꼭 알아야 할 정보를 모두 모았습니다. 절대 놓치지 마세요!

문서 김동현

환경 고민없이 개발하기

문서 김동현

서버 사이드 렌더링 작동 방식과 Isomorphic에 대해 소개드려요.

웹 개발 프론트엔드

문서 박서진

토스에서 프론트엔드 개발자가 일하는 방법과 맡고 있는 역할에 대해 소개드립니다.

프론트엔드