본문으로 건너뛰기

데코레이터 개요

데코레이터란 무엇인가요?​

express-cargo의 데코레이터는 클래스 필드에 추가하여 미들웨어에게 다음과 같은 정보를 알려줍니다.

  • 데이터를 어디에서 추출할지 (예: body, query 등)
  • 어떻게 유효성 검사를 할지
  • 어떻게 변환할지

클래스를 bindingCargo에 전달하면, 미들웨어는 이 데코레이터들을 읽어 getCargo로 가져올 수 있는 타입 안전한 객체를 생성·검증·변환합니다.

데코레이터 카테고리​

데코레이터는 바인딩 파이프라인에서 맡는 역할에 따라 그룹으로 나뉩니다.

카테고리목적예시참조
Source필드 값을 어디에서 가져올지 선택@Body, @Query, @Header, @Uri / @Params, @Session, @UploadedFile, @UploadedFiles소스 데코레이터, 파일 업로드 데코레이터
RequestExpress Request에서 값을 직접 읽음@Request가상 필드 데코레이터
Virtual객체의 다른 필드로부터 필드를 계산@Virtual가상 필드 데코레이터
Transform바인딩 전에 단일 필드 값을 변경@Transform변환 데코레이터
Type helper원본 값을 어떻게 해석하고 변환할지 결정@Type, @List, @Enum타입 헬퍼 데코레이터
Validation필드 값에 규칙을 적용@Min, @Max, @Email, @OneOf, …유효성 검사 데코레이터
Missing-value필드가 없을 때의 동작을 결정@Default, @Optional필드 누락 처리

Source, Request, Virtual은 "이 필드의 값이 어디에서 오는가"라는 같은 질문에 답합니다. 그래서 모든 필드는 이 중 정확히 하나만 가져야 하며, 서로 함께 쓸 수 없습니다. @UploadedFile과 @UploadedFiles는 multipart 파서의 결과를 읽는 소스 데코레이터입니다. 한 필드에 @UploadedFile과 @Body를 함께 쓰면 @Body와 @Query를 함께 쓴 것과 똑같이 거부됩니다.

@Type과 @List의 심화 시나리오(다형성, 순환 참조, 사용자 정의 클래스 배열)는 고급 사용법의 타입 변환과 다형성, List 데코레이터를 참고하세요.

데코레이터 조합​

하나의 필드는 여러 카테고리의 데코레이터를 함께 가질 수 있습니다. 이들은 함께 읽혀 해당 필드를 바인딩·변환·검증합니다.

import { Body, Transform, MinLength } from 'express-cargo'

class CreateUserRequest {
@Body('email') // Source: req.body.email에서 읽기
@Transform((value: string) => value.trim()) // Transform: 값 정규화
@MinLength(5) // Validation: 규칙 적용
email!: string
}

제한은 카테고리 사이가 아니라 카테고리 안에서 걸립니다. 한 필드는 소스 하나, 타입 헬퍼 하나, 값 누락 처리 하나를 가지며, 검증 데코레이터는 자유롭게 겹쳐 쓸 수 있습니다. bindingCargo()는 라우트를 등록할 때 이 규칙들을 검사하고, 서버가 요청을 처리하기 전에 CargoSchemaError를 던집니다.

각 카테고리는 위에 링크된 개별 페이지에서 문서화되어 있습니다.