상세 컨텐츠

본문 제목

[nestJS] @GetUser 의 의미

카테고리 없음

by esoesmio 2024. 5. 9. 21:59

본문

`@GetUser()` 데코레이터는 NestJS에서 사용자 정의 데코레이터의 좋은 예입니다. 이 데코레이터는 HTTP 요청에서 인증된 사용자 정보를 쉽게 추출할 수 있도록 도와줍니다. 여기서 설명된 코드는 어떻게 이 데코레이터가 생성되고 사용되는지에 대한 자세한 설명을 포함합니다.

### 사용자 정의 데코레이터 생성

NestJS에서는 `createParamDecorator` 함수를 사용하여 사용자 정의 파라미터 데코레이터를 생성할 수 있습니다. 이 함수는 두 개의 매개변수를 받습니다:
1. **data**: 데코레이터를 적용할 때 전달할 수 있는 데이터입니다. 이 경우 특별히 사용되지 않았습니다 (`data` 변수가 사용되지 않음).
2. **ctx (ExecutionContext)**: 실행 컨텍스트로, 요청의 모든 세부 정보를 포함하고 있으며, HTTP 요청을 다룰 수 있게 도와줍니다.

### `ExecutionContext` 활용

`ExecutionContext`는 NestJS가 현재 실행 중인 컨텍스트의 세부 정보를 제공합니다. 여기서는 `ctx.switchToHttp().getRequest()`를 사용하여 HTTP 요청 객체를 얻습니다. 이 객체는 Express 또는 Fastify 기반의 요청 객체일 수 있습니다.

### 사용자 정보 추출

요청 객체에서 `.user` 속성을 사용하여 사용자 정보를 추출합니다. 이는 일반적으로 Passport.js 등의 인증 미들웨어에 의해 설정됩니다. Passport는 인증 과정에서 사용자 정보를 요청 객체의 `user` 속성에 저장하므로, 이 속성을 사용하여 현재 인증된 사용자의 정보를 얻을 수 있습니다.

### `@GetUser()` 데코레이터의 사용

`@GetUser()` 데코레이터는 컨트롤러의 메서드에서 사용자 정보를 직접 주입받을 수 있게 합니다. 예를 들어, `@Post('/test')` 데코레이터가 적용된 `test()` 메서드는 다음과 같이 작성할 수 있습니다:

 

 

@Post('/test')
@UseGuards(AuthGuard())
test(@GetUser() user: User) {
    console.log('user', user);
}

 

 


이 메서드는 `AuthGuard()`에 의해 보호되며, `@GetUser()` 데코레이터를 통해 현재 인증된 사용자의 정보를 `user` 매개변수로 받습니다. 이 정보는 `User` 엔티티의 인스턴스입니다.

### 결론

`@GetUser()` 데코레이터는 NestJS에서 HTTP 요청과 관련된 코드의 재사용성을 높이고, 컨트롤러의 메서드에서 인증된 사용자의 정보를 쉽게 접근하고 사용할 수 있도록 하는 강력한 도구입니다. 이런 방식으로 데코레이터를 사용하는 것은 코드를 깔끔하고 관리하기 쉽게 만들어 줍니다.

댓글 영역