Middleware
Last updated
Was this helpful?
Last updated
Was this helpful?
λ―Έλ€μ¨μ΄λ λΌμ°νΈ νΈλ€λ¬λ³΄λ€ μ μ νΈμΆλλ ν¨μμ
λλ€. λ―Έλ€μ¨μ΄ κΈ°λ₯μ request λ° responseμ μ‘μΈμ€ ν μ μμ΅λλ€. μμ© νλ‘κ·Έλ¨μ μμ²-μλ΅μ£ΌκΈ°μμ κ°μ²΄ λ° next()
λ―Έλ€μ¨μ΄ ν¨μ. next λ―Έλ€μ¨μ΄ ν¨μλ μΌλ°μ μΌλ‘ next
λΌλ λ³μλ‘ νμλ©λλ€.
Nest λ―Έλ€μ¨μ΄λ κΈ°λ³Έμ μΌλ‘ express λ―Έλ€μ¨μ΄μ λμΌν©λλ€. 곡μ Express λ¬Έμμ λ€μ μ€λͺ μ λ―Έλ€μ¨μ΄μ κΈ°λ₯μ μ€λͺ ν©λλ€.
λ―Έλ€μ¨μ΄ κΈ°λ₯μ λ€μ μμ μ μν ν μ μμ΅λλ€.
μ΄λ€ μ½λλ₯Ό μ€νν©λλ€.
μμ² λ° μλ΅ μ€λΈμ νΈλ₯Ό λ³κ²½ν©λλ€.
μμ²-μλ΅μ£ΌκΈ°λ₯Ό μ’ λ£ν©λλ€.
μ€νμμ λ€μ λ―Έλ€μ¨μ΄ ν¨μλ₯Ό νΈμΆν©λλ€.
νμ¬ λ―Έλ€μ¨μ΄ ν¨μκ° μμ²-μλ΅μ£ΌκΈ°λ₯Ό μ’ λ£νμ§ μμΌλ©΄
next()
λ₯Ό νΈμΆνμ¬ λ€μ λ―Έλ€μ¨μ΄ κΈ°λ₯μΌλ‘ μ μ΄λ₯Ό μ λ¬νμμμ€. κ·Έλ μ§ μμΌλ©΄ μμ²μ΄ μ€λ¨λ©λλ€.
ν¨μ λλ @Injectable()
λ°μ½λ μ΄ν°κ° μλ ν΄λμ€μμ μ¬μ©μ μ μ Nest λ―Έλ€μ¨μ΄λ₯Ό ꡬνν©λλ€. ν΄λμ€λ NestMiddleware
μΈν°νμ΄μ€λ₯Ό ꡬνν΄μΌ νμ§λ§, ν¨μμλ νΉλ³ν μꡬ μ¬νμ΄ μμ΅λλ€. ν΄λμ€ λ©μλλ₯Ό μ¬μ©νμ¬ κ°λ¨ν λ―Έλ€μ¨μ΄ κΈ°λ₯μ ꡬννλ κ²μΌλ‘ μμνκ² μ΅λλ€.
Nest λ―Έλ€μ¨μ΄λ Dependency Injectionμ μλ²½νκ² μ§μν©λλ€. 곡κΈμ λ° μ»¨νΈλ‘€λ¬μ λ§μ°¬κ°μ§λ‘ λμΌν λͺ¨λ λ΄μμ μ¬μ© κ°λ₯ν μ’
μμ±μ μ£Όμ
ν μ μμ΅λλ€. νμμ κ°μ΄ μ΄κ²μ μμ±μ
λ₯Ό ν΅ν΄ μ΄λ£¨μ΄μ§λλ€.
@Module()
λ°μ½λ μ΄ν°μλ λ―Έλ€μ¨μ΄λ₯Ό μν 곡κ°μ΄ μμ΅λλ€. λμ λͺ¨λ ν΄λμ€μ configure()
λ©μλλ₯Ό μ¬μ©νμ¬ μ€μ ν©λλ€. λ―Έλ€μ¨μ΄λ₯Ό ν¬ν¨νλ λͺ¨λμ NestModule
μΈν°νμ΄μ€λ₯Ό ꡬνν΄μΌν©λλ€. AppModule
λ 벨μμ LoggerMiddleware
λ₯Ό μ€μ ν΄ λ΄
μλ€.
μμ μμμ μ°λ¦¬λ μ΄μ μ CatsController
λ΄μ μ μ λ /cats
λΌμ°νΈ νΈλ€λ¬μ λν΄ LoggerMiddleware
λ₯Ό μ€μ νμ΅λλ€. λν λ―Έλ€μ¨μ΄λ₯Ό κ΅¬μ± ν λ κ²½λ‘ path
λ° μμ² method
λ₯Ό ν¬ν¨νλ μ€λΈμ νΈλ₯Ό forRoutes()
λ©μλμ μ λ¬νμ¬ λ―Έλ€μ¨μ΄λ₯Ό νΉμ μμ² λ©μλλ‘ μ νν μλ μμ΅λλ€. μλ μμ μμ, RequestRequest λ©μλ μ΄κ±° νμ κ°μ Έμ μνλ μμ² λ©μλ μ νμ μ°Έμ‘°νμμμ€.
ν¨ν΄ κΈ°λ° κ²½λ‘λ μ§μλ©λλ€. μλ₯Ό λ€μ΄ λ³νλ μμΌλ μΉ΄λλ‘ μ¬μ©λλ©° λͺ¨λ λ¬Έμ μ‘°ν©κ³Ό μΌμΉν©λλ€.
ab*cd
λΌμ°νΈ κ²½λ‘λ abcd
, ab_cd
, abecd
λ±κ³Ό μΌμΉν©λλ€. ?
, +
, *
λ° ()
λ¬Έμλ λΌμ°νΈ κ²½λ‘μ μ¬μ©λ μ μμΌλ©° μ κ· ννμμ νμ μ§ν©μ
λλ€. νμ΄ν (-
)κ³Ό μ (.
)μ λ¬Έμ κ·Έλλ‘ λ¬Έμμ΄ κΈ°λ° κ²½λ‘λ‘ ν΄μλ©λλ€.
MiddlewareConsumer
λ ν¬νΌ ν΄λμ€μ
λλ€. λ―Έλ€μ¨μ΄λ₯Ό κ΄λ¦¬νκΈ°μν λͺ κ°μ§ κΈ°λ³Έ μ 곡 λ°©λ²μ μ 곡ν©λλ€. μ΄λ€ λͺ¨λλ μ μ°½ν μ€νμΌμμ κ°λ¨νκ² μ¬μ¬λ‘ λ¬Άμ μ μμ΅λλ€. forRoutes()
λ©μλλ λ¨μΌ λ¬Έμμ΄, λ€μ€ λ¬Έμμ΄, RouteInfo
μ€λΈμ νΈ, μ μ΄κΈ° ν΄λμ€ λ° λ€μ€ μ μ΄κΈ° ν΄λμ€λ₯Ό μ¬μ©ν μ μμ΅λλ€. λλΆλΆμ κ²½μ° μλ§λ 컨νΈλ‘€λ¬ λͺ©λ‘μ μΌνλ‘ κ΅¬λΆνμ¬ μ λ¬ν κ²μ
λλ€. μλλ λ¨μΌ 컨νΈλ‘€λ¬λ₯Ό μ¬μ©ν μμ
λλ€.
info ννΈ
apply()
λ©μλλ λ¨μΌ λ―Έλ€μ¨μ΄ λλ μ¬λ¬ μΈμλ₯Ό μ¬μ©νμ¬ λ€μ€ λ―Έλ€μ¨μ΄λ₯Ό μ§μ ν μ μμ΅λλ€.
λ―Έλ€μ¨μ΄κ° μ μ©λμ§ μλλ‘ νΉμ κ²½λ‘λ₯Ό μ μΈ ν μ μμ΅λλ€. κΈ°λ₯ λ―Έλ€μ¨μ΄ λμμ μ¬μ©νλ λμ μ§κΈκΉμ§νλ κ²μ²λΌ ν΄λμ€λ₯Ό μ¬μ©νμ¬ λ―Έλ€μ¨μ΄λ₯Ό μ μ ν λλ₯Ό exclude()
λ©μλ μ¬μ©νμ¬ νΉμ κ²½λ‘λ₯Ό μ½κ² μ μΈ ν μ μμ΅λλ€. μ΄ λ°©λ²μ μλμ κ°μ΄ κ²½λ‘μ λ©μλλ₯Ό μλ³νλ νλ μ΄μμ κ°μ²΄λ₯Ό μ μΈμν΅λλ€.
μμ μμμ LoggerMiddleware
λ exclude()
λ©μλμ μ λ¬ λ λ κ²½λ‘λ₯Ό μ μΈνκ³ CatsController
λ΄μ μ μ λ λͺ¨λ κ²½λ‘μ λ°μΈλ©λ©λλ€. exclude()
λ©μλλ κΈ°λ₯ λ―Έλ€μ¨μ΄ (ν΄λμ€κ° μλ ν¨μμ μ μ λ λ―Έλ€μ¨μ΄; μμΈν λ΄μ©μ μλ μ°Έμ‘°)μ μλνμ§ μμ΅λλ€. λν μ΄ λ°©λ²μ λ³΄λ€ μΌλ°μ μΈ κ²½λ‘ (μ: μμΌλ μΉ΄λ)μμ κ²½λ‘λ₯Ό μ μΈνμ§ μμ΅λλ€. ν΄λΉ λ 벨μ μ μ΄κ° νμν κ²½μ° κ²½λ‘ μ ν λ‘μ§μ λ―Έλ€μ¨μ΄μ μ§μ λ°°μΉνκ³ μμ²μ URLμ μ‘μΈμ€νμ¬ λ―Έλ€μ¨μ΄ λ‘μ§μ 쑰건λΆλ‘ μ μ©ν΄μΌν©λλ€.
μ°λ¦¬κ° μ¬μ©ν LoggerMiddleware
ν΄λμ€λ λ§€μ° κ°λ¨ν©λλ€. λ©€λ², μΆκ° λ©μλ λ° μ’
μμ±μ΄ μμ΅λλ€. ν΄λμ€ λμ κ°λ¨ν ν¨μλ‘ μ μν μ μλ μ΄μ λ 무μμ
λκΉ? μ¬μ€ μ°λ¦¬λ ν μ μμ΅λλ€. μ΄ μ νμ λ―Έλ€μ¨μ΄λ₯Ό κΈ°λ₯μ λ―Έλ€μ¨μ΄λΌκ³ ν©λλ€. λ‘κ±° λ―Έλ€μ¨μ΄λ₯Ό ν΄λμ€ κΈ°λ°μμ κΈ°λ₯μ λ―Έλ€μ¨μ΄λ‘ λ³ννμ¬ μ°¨μ΄μ μ μ€λͺ
ν΄ λ³΄κ² μ΅λλ€.
κ·Έλ¦¬κ³ AppModule
λ΄μμ μ¬μ©νμμμ€:
info ννΈ λ―Έλ€μ¨μ΄μ μ’ μμ±μ΄ νμνμ§ μμ λλ§λ€ λ κ°λ¨ν κΈ°λ₯μ λ―Έλ€μ¨μ΄ λμμ μ¬μ©νλ κ²μ΄ μ’μ΅λλ€.
μμμ μΈκΈ ν κ²μ²λΌ μμ°¨μ μΌλ‘ μ€νλλ μ¬λ¬ λ―Έλ€μ¨μ΄λ₯Ό λ°μΈλ©νλ €λ©΄ apply()
λ©μλ μμ μΌνλ‘ κ΅¬λΆ λ λͺ©λ‘μ μ 곡νμμμ€.
λ±λ‘λ λͺ¨λ λΌμ°νΈμ λ―Έλ€μ¨μ΄λ₯Ό ν λ²μ λ°μΈλ©νλ €λ©΄ INestApplication
μΈμ€ν΄μ€μμ μ 곡νλuse()
λ©μλλ₯Ό μ¬μ©ν μ μμ΅λλ€.