[NestJS] @Request()와 @Req()의 차이점

혜진·2024년 10월 16일
2

NestJS

목록 보기
7/12
post-thumbnail

NestJS에서 @Request()와 @Req()의 차이점

@Request()

NestJS에서 제공하는 공식적인 데코레이터로, 플랫폼에 구애받지 않고 Express나 Fastify와 같은 서버 구현체에서 동작할 수 있도록 추상화된 요청 객체를 제공한다.

@Request 특징

  • 플랫폼 독립적: Express나 Fastify 같은 다양한 서버 플랫폼에서 사용 가능하다.
  • 코드 호환성: 프레임워크 전환 시 코드 수정을 최소화할 수 있어, 유지보수가 쉽고 코드의 재사용성이 높다.
  • 용도: 서버 구현체에 대한 의존성을 줄이고 NestJS의 표준 방식으로 요청을 처리하고자 할 때 사용한다.

📑 @Request 예제

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로 전환할 경우에는 별도의 변경이 필요하다.

@Req 특징

  • Express에 종속적: Express의 모든 메서드와 속성을 사용할 수 있으나, Fastify 등 다른 플랫폼에서는 제대로 동작하지 않는다.
  • 직접 접근: Express의 요청 객체를 그대로 사용할 때 적합하다.

📑 @Req 예제

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()의 차이점은 플랫폼 독립성과 호환성이다.

@Request() @Req() 사용

  • Express 전용 애플리케이션: Express에 종속된 애플리케이션이라면 @Req()를 사용하는 것이 적합하다. Express의 모든 기능을 직접 활용할 수 있다.

  • 다른 플랫폼 전환을 고려한 애플리케이션: Fastify 등 다른 HTTP 서버로 전환할 가능성이 있다면 @Request()를 사용하는 것이 좋다. NestJS의 추상화된 요청 객체를 사용하여 코드 수정 없이 다양한 플랫폼에서 재사용할 수 있다.

0개의 댓글