커스텀 데코레이터는 인증 가드나 미들웨어가 채워 둔 컨텍스트를 읽고, 핸들러가 필요한 값만 좁혀 전달합니다.
req.user, 헤더, 쿠키처럼 매 요청마다 반복해서 꺼내는
값을 선언형 매개변수로 바꿀 때 효과가 큽니다.
HTTP 요청이 라우터에 도달하고 ExecutionContext가 현재 요청 범위를 보관합니다.
JWT 검증 후 req.user를 채워 컨트롤러가 인증 결과를
신뢰할 수 있게 합니다.
데코레이터가 ctx.switchToHttp()로 요청을 꺼내 필요한
속성만 반환합니다.
컨트롤러는 request 전체 대신 타입이 좁혀진 값으로 비즈니스 로직을 호출합니다.
파이프는 값 추출과 기본값 보정을 맡고, 인증 여부와 권한 판단은 가드에 남깁니다.
추출된 매개변수는 파이프로 검증하거나 타입 변환을 이어 붙일 수 있습니다.
@Roles()는 메타데이터를 남기고 RolesGuard가 Reflector로
읽어 판단합니다.