포시코딩

4월6일 - Nest.js의 Request lifecycle 본문

TIL

4월6일 - Nest.js의 Request lifecycle

포시 2023. 4. 6. 13:51
728x90

Nest.js에서 request 요청에 대해 어떤 흐름을 갖는지 파악해보자.

내 나름대로 한글 설명도 덧붙여봤다.

 

  1. Incoming request
    요청 들어옴
  2. Globally bound middleware
    앱 전체에서 공통으로 사용될 미들웨어가 등록되어 있는 경우, 이 단계에서 실행
  3. Module bound middleware
    해당 모듈에서만 사용될 미들웨어가 등록되어 있는 경우, 이 단계에서 실행
  4. Global guards
    앱 전체에서 사용될 가드(guard)가 등록되어 있는 경우, 이 단계에서 실행
  5. Controller guards
    해당 컨트롤러에서만 사용될 가드가 등록되어 있는 경우, 이 단계에서 실행
  6. Route guards
    해당 라우트(route)에서만 사용될 가드가 등록되어 있는 경우, 이 단계에서 실행
  7. Global interceptors (pre-controller)
    앱 전체에서 사용될 인터셉터가 등록되어 있는 경우, 이 단계에서 컨트롤러 호출 전 실행
  8. Controller interceptors (pre-controller)
    해당 컨트롤러에서만 사용될 인터셉터가 등록되어 있는 경우, 이 단계에서 컨트롤러 호출 전 실행
  9. Route interceptors (pre-controller)
    해당 라우트에서만 사용될 인터셉터가 등록되어 있는 경우, 이 단계에서 컨트롤러 호출 전 실행
  10. Global pipes
    앱 전체에서 사용될 파이프가 등록되어 있는 경우, 이 단계에서 실행
  11. Controller pipes
    해당 컨트롤러에서만 사용될 파이프가 등록되어 있는 경우, 이 단계에서 실행
  12. Route pipes
    해당 라우트에서만 사용될 파이프가 등록되어 있는 경우, 이 단계에서 실행
  13. Route parameter pipes
    라우트 파라미터에서 사용될 파이프가 등록되어 있는 경우, 이 단계에서 실행
  14. Controller (method handler)
    해당 컨트롤러에서 요청에 대한 처리를 하는 핸들러 실행
  15. Service (if exists)
    컨트롤러에서 서비스를 사용하는 경우, 이 단계에서 해당 서비스의 메서드가 실행
  16. Route interceptors (post-request)
    해당 라우트에서만 사용될 인터셉터가 등록되어 있는 경우, 이 단계에서 컨트롤러 호출 후 실행
  17. Controller interceptor (post-request)
    해당 컨트롤러에서만 사용될 인터셉터가 등록되어 있는 경우, 이 단계에서 컨트롤러 호출 후 실행
  18. Global interceptor (post-request)
    앱 전체에서 사용될 인터셉터가 등록되어 있는 경우, 이 단계에서 컨트롤러 호출 후 실행
  19. Exception filters (route, then controller, then global)
    요청 처리 중 예외 발생 시 해당 예외 필터가 등록되어 있는 순서대로 실행
    해당 라우트 -> 해당 컨트롤러 -> 앱 전체
    순으로 등록된 필터가 실행된다.
  20. Server response
    클라이언트로 응답 반환

 

출처: 공식문서

 

Documentation | NestJS - A progressive Node.js framework

Nest is a framework for building efficient, scalable Node.js server-side applications. It uses progressive JavaScript, is built with TypeScript and combines elements of OOP (Object Oriented Programming), FP (Functional Programming), and FRP (Functional Rea

docs.nestjs.com

 

우리가 보통 request를 받아 처리하는 controller에 오기까지도 상단히 많은 과정을 거치는 것을 알 수 있다.

과정이 어려워도 자세히 보면 공통점이 보이는데

 

글로벌(앱 전체) -> 컨트롤러 -> 라우트 순서대로 실행되는 부분이다.

그리고 과정을 크게 나누면

 

요청 -> 미들웨어 -> 가드 -> 인터셉터 -> 파이프 -> 메서드 실행 -> 인터셉터 -> 예외 필터 -> 응답

 

이렇게 되겠다.

인터셉터는 컨트롤러 호출 전, 호출 후 두번 호출된다는 점을 기억하면 더 이해하기 쉬울 것이다.

728x90