Skip to main content

NestJs - Request LifeCycle

NestJs - Request LifeCycle

Request LifeCycleโ€‹

Nest๋Š” Request LifeCycle๋ผ๊ณ  ํ•˜๋Š” ์ˆœ์„œ์— ๋”ฐ๋ผ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‘๋‹ต์„ ์ƒ์„ฑํ•œ๋‹ค. Middleware, Pipes, Guards ๋ฐ Interceptors๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Global, Controller, Route Handler๊ฐ€ ์ž‘๋™ํ•  ๋•Œ Request LifeCycle ๋™์•ˆ ํŠน์ • ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๋Š” ์œ„์น˜๋ฅผ ์ถ”์ ํ•˜๋Š” ๊ฒƒ์ด ์–ด๋ ค์šธ ์ˆ˜ ์žˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ์š”์ฒญ์€ Middleware๋ฅผ ํ†ตํ•ด Guards, Interceptors, Pipes, API์˜ Interceptors๋กœ ์ด๋™ํ•œ๋‹ค.

Middlewareโ€‹

Nest๋Š” ์ „์—ญ์ ์œผ๋กœ ๋ฐ”์ธ๋”ฉ๋œ Middleware( ex. app.use()๋กœ ๋ฐ”์ธ๋”ฉ๋œ Middleware )๋ฅผ ์‹คํ–‰ํ•œ ๋‹ค์Œ ๊ฒฝ๋กœ์—์„œ ๊ฒฐ์ •๋˜๋Š” ๋ชจ๋“ˆ ๋ฐ”์ธ๋”ฉ Middleware๋ฅผ ์‹คํ–‰ํ•œ๋‹ค. Middleware๋Š” Express์˜ Middleware ์ž‘๋™ ๋ฐฉ์‹๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ๋ฐ”์ธ๋”ฉ๋œ ์ˆœ์„œ๋Œ€๋กœ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰๋œ๋‹ค. ์„œ๋กœ ๋‹ค๋ฅธ ๋ชจ๋“ˆ์— ๋ฐ”์ธ๋”ฉ๋œ Middleware์˜ ๊ฒฝ์šฐ ๋ฃจํŠธ ๋ชจ๋“ˆ์— ๋ฐ”์ธ๋”ฉ๋œ Middleware๊ฐ€ ๋จผ์ € ์‹คํ–‰๋œ ๋‹ค์Œ ๋ชจ๋“ˆ์ด imports ๋ฐฐ์—ด์— ์ถ”๊ฐ€๋œ ์ˆœ์„œ๋Œ€๋กœ Middleware๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

Guardsโ€‹

Guards ์‹คํ–‰์€ Global Guards๋กœ ์‹œ์ž‘ํ•˜์—ฌ Controller Guards๋กœ ์ง„ํ–‰๋˜๊ณ  ๋งˆ์ง€๋ง‰์œผ๋กœ Route Guards๋กœ ์ง„ํ–‰๋œ๋‹ค. Middleware์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ Guards๋Š” ๋ฐ”์ธ๋”ฉ๋œ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰๋œ๋‹ค.

Interceptorsโ€‹

๋Œ€๋ถ€๋ถ„์˜ Interceptors๋Š” Guards์™€ ๋™์ผํ•œ ํŒจํ„ด์„ ๋”ฐ๋ฅด์ง€๋งŒ ํ•œ ๊ฐ€์ง€๊ฐ€ ๋‹ค๋ฅด๋‹ค. Interceptors๊ฐ€ RxJS Observable์„ ๋ฐ˜ํ™˜ํ•˜๋ฏ€๋กœ Observable์€ ์ฒ˜์Œ ๋“ค์–ด์˜จ ์ˆœ์œผ๋กœ ์ฒ˜๋ฆฌ๋œ๋‹ค. ์ธ๋ฐ”์šด๋“œ ์š”์ฒญ์€ ์ „์—ญ, Controller, Route ์ˆ˜์ค€์˜ ํ™•์ธ์„ ๊ฑฐ์น˜์ง€๋งŒ ์š”์ฒญ์˜ ์‘๋‹ต์ด Controller, Method handler์—์„œ ๋ฐ˜ํ™˜๋œ ํ›„, Route์—์„œ Controller, Global์ˆœ์œผ๋กœ ํ™•์ธํ•œ๋‹ค. Pipes, Controller ๋˜๋Š” Service์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ชจ๋“  ์˜ค๋ฅ˜๋Š” Interceptors์˜ catchError ์—ฐ์‚ฐ์ž์—์„œ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค.

Pipesโ€‹

ํŒŒ์ดํ”„๋Š” @UsePipes() ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ๊ด€๋ จํ•˜์—ฌ ๋™์ผํ•œ FIFO ๋ฐฉ์‹์œผ๋กœ Controller์— ๋Œ€ํ•œ ํ‘œ์ค€ ์ „์—ญ์„ ๋”ฐ๋ผ ๋ฐ”์ธ๋”ฉ๋œ ์‹œํ€€์Šค๋ฅผ ๋ผ์šฐํŒ…ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Routing Param ์—์„œ ์‹คํ–‰ ์ค‘์ธ ํŒŒ์ดํ”„๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์ธ ๊ฒฝ์šฐ ํŒŒ์ดํ”„๋Š” ์ฒซ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋ถ€ํ„ฐ ๋งˆ์ง€๋ง‰ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์ˆœ์„œ๋กœ ์‹คํ–‰๋œ๋‹ค. ์ด๋Š” Route ๋ฐ Controller ํŒŒ์ดํ”„์—๋„ ์ ์šฉ๋œ๋‹ค.

Filtersโ€‹

ํ•„ํ„ฐ๋Š” ์ „์—ญ์„ ์šฐ์„ ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๋Š” ์œ ์ผํ•œ ๊ตฌ์„ฑ ์š”์†Œ์ด๋‹ค. ํ•„ํ„ฐ๋Š” ๊ฐ€๋Šฅํ•œ ๊ฐ€์žฅ ๋‚ฎ์€ ์ˆ˜์ค€์—์„œ๋ถ€ํ„ฐ ํ™•์ธํ•œ๋‹ค. ๋ชจ๋“  Route์— ๋ฐ”์ธ๋”ฉ๋œ ํ•„ํ„ฐ, Controller์ˆ˜์ค€, ๋งˆ์ง€๋ง‰์œผ๋กœ ์ „์—ญ ์ˆ˜์ค€ ํ•„ํ„ฐ๋กœ ์ง„ํ–‰๋œ๋‹ค. ์˜ˆ์™ธ๋Š” ํ•„ํ„ฐ์—์„œ ํ•„ํ„ฐ๋กœ ์ „๋‹ฌ๋  ์ˆ˜ ์—†๋‹ค. Route ์ˆ˜์ค€ ํ•„ํ„ฐ๊ฐ€ ์˜ˆ์™ธ๋ฅผ ํฌ์ฐฉํ•˜๋Š” ๊ฒฝ์šฐ, Controller ๋˜๋Š” ์ „์—ญ ์ˆ˜์ค€ ํ•„ํ„ฐ๋Š” ๋™์ผํ•œ ์˜ˆ์™ธ๋ฅผ ํฌ์ฐฉํ•  ์ˆ˜ ์—†๋‹ค. ํ•„ํ„ฐ์—์„œ ํ•„ํ„ฐ๋กœ ์˜ˆ์™ธ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ ํšจ๊ณผ๋ฅผ ๋‚ด๋Š” ๋ฐฉ๋ฒ•์€ ํ•„ํ„ฐ ๊ฐ„์— ์ƒ์†์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

Request LifeCycle - 1 ์‚ฌ์ดํดโ€‹

  1. Incoming request
  2. Middleware
    • 2.1. Globally bound middleware
    • 2.2. Module bound middleware
  3. Guards
    • 3.1 Global guards
    • 3.2 Controller guards
    • 3.3 Route guards
  4. Interceptors (pre-controller)
    • 4.1 Global interceptors
    • 4.2 Controller interceptors
    • 4.3 Route interceptors
  5. Pipes
    • 5.1 Global pipes
    • 5.2 Controller pipes
    • 5.3 Route pipes
    • 5.4 Route parameter pipes
  6. Controller (method handler)
  7. Service (if exists)
  8. Interceptors (post-request)
    • 8.1 Route interceptor
    • 8.2 Controller interceptor
    • 8.3 Global interceptor
  9. Exception filters
    • 9.1 route
    • 9.2 controller
    • 9.3 global
  10. Server response