
NestJS에서가드(Guards)는 클라이언트로부터 넘어온요청(Request)이 처리되기 전에 실행되어, 요청의 권한을확인하고허용할지 여부를 결정하는 것을 수행한다.
가드(Guards) 의 특징인증 및 권한 부여 : 요청이 컨트롤러(Controller) 나 라우트 핸들러(Route Handler) 로 전달되기 전에 사용자의 인증 상태나 권한을 검사한다.흐름 제어 : 요청을 허용하거나 거부 할 수 있으며, 필요한 경우 특정 요청을 거부(차단) 할 수 있다.가드(Guards) 사용법가드(Guards) 정의하기→ CanActivate라는 인터페이스를 구현한 뒤 가드를 정의한다.
// 요청을 보낸 사용자가 존재(권한)하는지 판별
// nestjs의 데코레이터, 인터페이스 호출
import { Injectable, CanActivate, ExecutionContext } from '@nestjs/common';
// RxJS에서 제공하는 옵저버 호출
import { Observable } from 'rxjs';
@Injectable() // 해당 데코레이터를 통해 이 클래스를 주입 가능한 서비스로 지정 (DI)
export class AuthGuard implements CanActivate{
canActivate( // 요청이 처리되기 전 실행
context: ExecutionContext, // ExecutionContext는 현재 실행 중인 요청에 대한 정보 제공
): boolean | Promuse<boolean> | Observable<boolean>{ // canActivate는 셋 중 하나를 반환한다.
const request = context.switchToHttp().getRequest(); // 현재 실행중인 요청 객체를 가져온다.
const user = request.user; // 요청 객체에서 사용자 정보 호출
return !!user; // 사용자가 존재하면 true, 존재하지 않는다면 false 반환
}
가드(Guards) 적용하기→ 위에서 정의한 AuthGuard 를 특정 라우트에 적용한다.
import { Controller, Get, UseGuards } from '@nestjs/common';
@Controller('dogs')
export class DogsController{
@Get()
@UseGuards(AuthGuard) // @UseGuards 데코레이터는 NestJS에서 가드(Guards)를 설정한다.
findAll(): string{
return `모든 강아지들을 불러왔습니다!`;
}
}
가드(Guards) 를 적용하려면?→ 글로벌 가드(Global Guards) 를 적용하기 위해선 app.module.ts 에서 설정할 수 있다.
import { Module } from '@nestjs/common';
import { APP_GUARD } from '@nestjs/core'; // 가드 모듈 불러오기
@Module({
providers: [
{
provide: APP_GUARD,
useClass: AuthGuard, // 정의한 가드 적용
},
],
})
export class AppModule {}
→ NestJS 에서 가드(Guards) 는 요청이 처리되기 전에 실행되어 인증 및 권한 을 검사한다.
→ 가드(Guards) 는 인증 및 권한 부여 , 요청 흐름 제어 역할을 수행한다.
→ 사용법 : CanActivate 인터페이스를 구현하여 정의하고, 컨트롤러나 라우트에 useGuards 데코레이터로 적용하거나 글로벌 가드로 설정한다.