Files
2nd/10_Wiki/Topics/Frontend/Decorators.md
T

3.8 KiB

category, tags, title, description, last_updated
category tags title description last_updated
Other
auto-wikified
technical-documentation
other
Decorators 데코레이터(Decorators)는 클래스, 메서드, 프로퍼티 등에 메타데이터를 추가하여 동작을 정의하거나 의존성을 주입하는 설계 패턴 및 문법적 기능입니다 [1-3]. 2026-05-04

Decorators

📌 Brief Summary

데코레이터(Decorators)는 클래스, 메서드, 프로퍼티 등에 메타데이터를 추가하여 동작을 정의하거나 의존성을 주입하는 설계 패턴 및 문법적 기능입니다 [1-3]. 특히 NestJS와 같은 프레임워크에서 모듈, 컨트롤러, 서비스를 구성하는 핵심 아키텍처 요소로 활용되며 [3], 애플리케이션의 횡단 관심사(Cross-Cutting Concerns)를 비즈니스 로직과 분리하여 제어하는 데 유용하게 쓰입니다 [4, 5].

📖 Core Content

  • NestJS의 핵심 아키텍처 요소: NestJS는 타입스크립트 데코레이터(@Module(), @Controller, @Get, @Injectable 등)를 적극적으로 사용하여 애플리케이션의 의존성 주입(DI) 컨테이너를 구성합니다 [2, 3, 6, 7]. 모듈은 @Module()로 주석이 달린 클래스이며, 프레임워크는 이를 통해 애플리케이션의 구조와 관계를 파악합니다 [2].
  • 데이터 모델링 및 문서 자동화: DTO(Data Transfer Object)나 엔티티(Entity) 클래스에 데코레이터를 적용하여 TypeORM, Prisma, Drizzle 등의 ORM과 연동할 수 있습니다 [1]. 또한, 데코레이터와 DTO를 기반으로 Swagger/OpenAPI 문서를 실제 코드와 동기화하여 자동 생성하는 기능도 제공합니다 [8, 9].
  • GraphQL 스키마 생성: NestJS의 @nestjs/graphql 모듈에서는 데코레이터를 활용한 코드 우선(Code-first) 접근 방식을 지원합니다 [10]. 클래스에 데코레이터를 추가하는 것만으로 GraphQL 타입과 스키마를 자동으로 생성할 수 있습니다 [11].
  • 횡단 관심사(Cross-Cutting Concerns)의 분리: 도메인 로직과 무관한 인프라 측면의 기능(로깅, 인증, 캐싱 등)을 분리할 때 데코레이터가 활용됩니다 [4]. 예를 들어, Django 프로젝트에서는 커스텀 권한(permissions)을 처리하거나 미들웨어와 함께 횡단 관심사의 흐름을 제어하기 위해 데코레이터를 설계 패턴으로 적용합니다 [5, 12].

⚖️ Trade-offs & Caveats

  • 학습 곡선의 증가: Express와 같이 제약이 적고 단순한 미니멀리즘 프레임워크에 익숙한 개발자에게는 데코레이터, 의존성 주입(DI), 모듈 시스템 등의 개념이 낯설 수 있으며 이를 익히기 위한 초기 학습 곡선이 가파릅니다 [6, 9].
  • 프레임워크 오버헤드: NestJS의 경우 데코레이터와 의존성 주입(DI) 계층으로 인해 순수한 Express에 비해 약 10~15% 정도의 처리량(Throughput) 감소라는 성능 오버헤드가 발생합니다 [13]. 다만, 프로덕션 환경의 데이터베이스 쿼리나 네트워크 지연 시간에 비하면 이는 대부분 무시할 수 있는 수준입니다 [13].
  • 과도한 보일러플레이트 작성: 소규모 팀이나 간단한 프로젝트에서는 모듈을 선언하고, DTO를 만들고, 엔티티에 데코레이터를 부착하는 구조화 작업 자체가 실제 비즈니스 로직 작성보다 더 많은 시간과 비용을 요구하는 기술 부채(Technical Debt)나 과잉 엔지니어링이 될 수 있습니다 [14, 15].
  • 전역 남용의 위험: NestJS에서 교차 절단 관심사에 @Global() 데코레이터를 사용할 수 있지만, 이를 과도하게 남용할 경우 모듈 시스템이 해결하고자 했던 "모든 것이 어디서나 접근 가능해지는 문제"를 다시 발생시킬 수 있으므로 주의해서 사용해야 합니다 [16].

Last updated: 2026-05-03