Nest.js Cycle

ClassBinu·2024년 4월 17일

F-lab

목록 보기
6/65

https://www.youtube.com/watch?v=Z0d7ZrxY-i0

Middleware

요청과 응답 사이에 특정 작업을 실행하는 함수

Guard & Pipe

가드 (Guards)

가드는 NestJS에서 인증과 권한 부여와 같은 보안 관련 작업을 수행하기 위해 사용

파이프 (Pipes)

파이프는 요청 데이터의 변환과 유효성 검사에 사용

가드는 요청이 컨트롤러가 가기 전에 권한을 체크하고, 권한이 없으면 차단한다. 아예 컨트롤러에 가지 않는다. 가드의 반환 값은 불리언이다.
파이프는 우선 요청이 컨트롤러 매개변수 까지는 들어오고 유효성을 검증하고 유효하면 컨트롤러 내부로 들어가고 유효하지 않으면 에러를 발생시킨다. 파이프의 반환값은 변환된 데이터 또는 예외 발생이다.

파이프와 컨트롤러는 한 몸이라고 생각하기!

interceptor

AOP를 구현(Aspect-Oriented Programming): 관점 지향 프로그래밍
OOP를 보완하는 프로그래밍
핵심 비즈니스 로직에서 공통적으로 사용되는 기능(예: 로깅, 트랜잭션, 보안 등)을 주요 로직에서 분리하여 재사용
이를 통해 유지보수성 향상

메소드 실행 전후에 추가적인 로직을 수행
요청 처리 후 응답을 변형하거나, 추가적인 로직 실행
예를 들어 응답의 형식을 변경하거나, 실행시간을 측정하고 로깅하는 기능 구현
intercept() 메소드를 통해 구현하여, 이 메소드 내에서 요청/응답을 가로챈다.

Filter

예외 처리를 담당.
Nest에서 발생하는 모든 예외는 필터를 통해 처리할 수 있음.
클라이언트에 보낼 응답 형식을 커스텀할 수 있음.
catch() 메소드를 구현하며, 이 메소드에서 예외 처리하고 사용자 정의 응답을 반환.

인증 로직 정리

요청 -> 가드(strategy 찾아서 요청 처리) -> True or False return -> controller

전략에 포함된 validate가 동작

명명된 전략

전략을 구현할 때 함수에 두 번째 인수를 전달하여 전략에 대한 이름을 제공할 수 있습니다 PassportStrategy. 이렇게 하지 않으면 각 전략에 기본 이름이 지정됩니다(예: jwt-strategy의 경우 'jwt')

다음 코드에서 'jwt' 명시하지 않아도 전략을 자동으로 찾는 이유


@Injectable()
export class JwtStrategy extends PassportStrategy(Strategy) {
  constructor(private config: ConfigService) {
    const secretOrKey = config.get<string>('accessSecret');
    super({
      jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
      ignoreExpiration: false,
      secretOrKey,
    });
  }

  async validate(payload: any) {
    return { userId: payload.sub, username: payload.username };
  }
}

0개의 댓글