요청 생명주기
- 들어온 요청이 어떤 컴포넌트를 거쳐서 처리되고, 생성된 응답은 어떤 컴포넌트를 거쳐 처리되는지에 대한 프로세스
- 요청 생명주기를 이해하면 개발, 디버깅시 애플리케이션의 동작을 쉽게 이해할 수 있기때문에 알아야함
미들웨어
- 미들웨어의 실행 순서는 정해져 있다. 전역으로 바인딩된 미들웨어를 실행 => 모듈에 바인딩 되는 순서대로 실행, 루트 모듈에 바인딩 되어있는 미들웨어를 실행하고 imports에 정의한 순서대로 실행
가드
- 전역으로 바인딩된 가드를 먼저 시작함
- 컨트롤러에 정의된 순서대로 실행
- 아래 가드는 Guard1 => Guard2 => Guard3의 순서로 실행됨
@UseGuards(Guard1, Guard2)
@Controller('users')
export class UsersController {
constructor(private readonly usersService: UsersService) {}
@UseGuards(Guard3)
@Post()
create(@Body() createUserDto: CreateUserDto) {
return this.usersService.create(createUserDto);
}
인터셉터
- 인터셉터의 실행 순서는 가드와 유사함
- 인터셉터는 RxJS의 Observable객체를 반환하는데 이는 요청의 실행 순서와 반대 순서로 동작함
- 요청 : 전역 => 컨트롤러 => 라우터
- 응답 : 라우터 => 컨트롤러 => 전역으로 동작
파이프
- 적용된 라우터의 매개변수가 여러 개 있을 대는 정의한 순서의 역순으로 적용됨
- GeneralValidtionPipe => RouteSpecific 순서로 적용됨
- 매개변수는 Query => Param => Body 순서대로 적용됨
//첫번째 파이프
@UserPipes(GeneralValidationPipe)
@Controller('users')
export class AppController {
두번째 파이프
@UsePipes(RouteSpecificPipe)
@Patch(':id')
findOne(
@Body() body: UpdateUserDTO,
@Param() params: UpdateUserParams,
@Query() () query: UpdateUserQuery) {
return `This action returns a cat with id ${id}`;
}
}
예외 필터
- 예외필터는 전역 필터가 먼저 적용되지 않음
- 라우터 => 컨트롤러 => 전역으로 바인딩된 순서대로 동작함
- 필터가 예외를 작으면 다른 필터가 동일한 예외를 잡을 수 없음
- 라우터에 적용된 예외 필터가 이미 예외를 잡아서 처리하면 상위 계층에 바인딩된 예외 필터가 다시 예외처리를 할 필요가 없기 때문
'개발일지' 카테고리의 다른 글
Nest.JS CQRS (0) | 2023.08.18 |
---|---|
Nest.JS 헬스 체크 (0) | 2023.08.18 |
Nest.js 예외처리 Exception filter (0) | 2023.08.16 |
Nest.JS MySQL 연결 (0) | 2023.08.16 |
Nest.js Pipe (0) | 2023.08.15 |