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

요청과 응답 사이에 특정 작업을 실행하는 함수
가드는 NestJS에서 인증과 권한 부여와 같은 보안 관련 작업을 수행하기 위해 사용
파이프는 요청 데이터의 변환과 유효성 검사에 사용
가드는 요청이 컨트롤러가 가기 전에 권한을 체크하고, 권한이 없으면 차단한다. 아예 컨트롤러에 가지 않는다. 가드의 반환 값은 불리언이다.
파이프는 우선 요청이 컨트롤러 매개변수 까지는 들어오고 유효성을 검증하고 유효하면 컨트롤러 내부로 들어가고 유효하지 않으면 에러를 발생시킨다. 파이프의 반환값은 변환된 데이터 또는 예외 발생이다.
파이프와 컨트롤러는 한 몸이라고 생각하기!
AOP를 구현(Aspect-Oriented Programming): 관점 지향 프로그래밍
OOP를 보완하는 프로그래밍
핵심 비즈니스 로직에서 공통적으로 사용되는 기능(예: 로깅, 트랜잭션, 보안 등)을 주요 로직에서 분리하여 재사용
이를 통해 유지보수성 향상
메소드 실행 전후에 추가적인 로직을 수행
요청 처리 후 응답을 변형하거나, 추가적인 로직 실행
예를 들어 응답의 형식을 변경하거나, 실행시간을 측정하고 로깅하는 기능 구현
intercept() 메소드를 통해 구현하여, 이 메소드 내에서 요청/응답을 가로챈다.
예외 처리를 담당.
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 };
}
}
