@Request()
NestJS에서 제공하는 공식적인 데코레이터로, 플랫폼에 구애받지 않고 Express나 Fastify와 같은 서버 구현체에서 동작할 수 있도록 추상화된 요청 객체를 제공한다.
import { Controller, Get, Request } from '@nestjs/common';
@Controller('example')
export class ExampleController {
@Get()
getRequestInfo(@Request() req) {
console.log(req.method);
return req.user;
}
}
@Req()
Express 요청 객체를 가져오기 위한 데코레이터로, Express.js에서 제공하는 표준 요청 객체로, Express의 메서드와 속성에 직접 접근할 수 있다. NestJS에서 기본적으로는 Express 서버 위에서 동작하지만, Fastify로 전환할 경우에는 별도의 변경이 필요하다.
import { Controller, Get, Req } from '@nestjs/common';
import { Request } from 'express';
@Controller('example')
export class ExampleController {
@Get()
getRequestInfo(@Req() req: Request) {
console.log(req.method);
return req.user;
}
}
@Request()와 @Req()의 차이점은 플랫폼 독립성과 호환성이다.
Express 전용 애플리케이션: Express에 종속된 애플리케이션이라면 @Req()를 사용하는 것이 적합하다. Express의 모든 기능을 직접 활용할 수 있다.
다른 플랫폼 전환을 고려한 애플리케이션: Fastify 등 다른 HTTP 서버로 전환할 가능성이 있다면 @Request()를 사용하는 것이 좋다. NestJS의 추상화된 요청 객체를 사용하여 코드 수정 없이 다양한 플랫폼에서 재사용할 수 있다.