Middleware
Middleware
๋ฏธ๋ค์จ์ด๋ ๋ผ์ฐํธ ํธ๋ค๋ฌ๋ณด๋ค ์ ์ ํธ์ถ๋๋ ํจ์์
๋๋ค. ๋ฏธ๋ค์จ์ด ๊ธฐ๋ฅ์ request ๋ฐ response์ ์ก์ธ์ค ํ ์ ์์ต๋๋ค. ์์ฉ ํ๋ก๊ทธ๋จ์ ์์ฒญ-์๋ต์ฃผ๊ธฐ์์ ๊ฐ์ฒด ๋ฐ next()๋ฏธ๋ค์จ์ด ํจ์. next ๋ฏธ๋ค์จ์ด ํจ์๋ ์ผ๋ฐ์ ์ผ๋ก next๋ผ๋ ๋ณ์๋ก ํ์๋ฉ๋๋ค.

Nest ๋ฏธ๋ค์จ์ด๋ ๊ธฐ๋ณธ์ ์ผ๋ก express ๋ฏธ๋ค์จ์ด์ ๋์ผํฉ๋๋ค. ๊ณต์ Express ๋ฌธ์์ ๋ค์ ์ค๋ช ์ ๋ฏธ๋ค์จ์ด์ ๊ธฐ๋ฅ์ ์ค๋ช ํฉ๋๋ค.
๋ฏธ๋ค์จ์ด ๊ธฐ๋ฅ์ ๋ค์ ์์ ์ ์ํ ํ ์ ์์ต๋๋ค.
์ด๋ค ์ฝ๋๋ฅผ ์คํํฉ๋๋ค.
์์ฒญ ๋ฐ ์๋ต ์ค๋ธ์ ํธ๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค.
์์ฒญ-์๋ต์ฃผ๊ธฐ๋ฅผ ์ข ๋ฃํฉ๋๋ค.
์คํ์์ ๋ค์ ๋ฏธ๋ค์จ์ด ํจ์๋ฅผ ํธ์ถํฉ๋๋ค.
ํ์ฌ ๋ฏธ๋ค์จ์ด ํจ์๊ฐ ์์ฒญ-์๋ต์ฃผ๊ธฐ๋ฅผ ์ข ๋ฃํ์ง ์์ผ๋ฉด
next()๋ฅผ ํธ์ถํ์ฌ ๋ค์ ๋ฏธ๋ค์จ์ด ๊ธฐ๋ฅ์ผ๋ก ์ ์ด๋ฅผ ์ ๋ฌํ์ญ์์ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์์ฒญ์ด ์ค๋จ๋ฉ๋๋ค.
ํจ์ ๋๋ @Injectable()๋ฐ์ฝ๋ ์ดํฐ๊ฐ ์๋ ํด๋์ค์์ ์ฌ์ฉ์ ์ ์ Nest ๋ฏธ๋ค์จ์ด๋ฅผ ๊ตฌํํฉ๋๋ค. ํด๋์ค๋ NestMiddleware ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํด์ผ ํ์ง๋ง, ํจ์์๋ ํน๋ณํ ์๊ตฌ ์ฌํญ์ด ์์ต๋๋ค. ํด๋์ค ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋จํ ๋ฏธ๋ค์จ์ด ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ๊ฒ์ผ๋ก ์์ํ๊ฒ ์ต๋๋ค.
Dependency injection
Nest ๋ฏธ๋ค์จ์ด๋ Dependency Injection์ ์๋ฒฝํ๊ฒ ์ง์ํฉ๋๋ค. ๊ณต๊ธ์ ๋ฐ ์ปจํธ๋กค๋ฌ์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋์ผํ ๋ชจ๋ ๋ด์์ ์ฌ์ฉ ๊ฐ๋ฅํ ์ข
์์ฑ์ ์ฃผ์
ํ ์ ์์ต๋๋ค. ํ์์ ๊ฐ์ด ์ด๊ฒ์ ์์ฑ์๋ฅผ ํตํด ์ด๋ฃจ์ด์ง๋๋ค.
Applying middleware
@Module()๋ฐ์ฝ๋ ์ดํฐ์๋ ๋ฏธ๋ค์จ์ด๋ฅผ ์ํ ๊ณต๊ฐ์ด ์์ต๋๋ค. ๋์ ๋ชจ๋ ํด๋์ค์ configure()๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ค์ ํฉ๋๋ค. ๋ฏธ๋ค์จ์ด๋ฅผ ํฌํจํ๋ ๋ชจ๋์ NestModule ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํด์ผํฉ๋๋ค. AppModule ๋ ๋ฒจ์์ LoggerMiddleware๋ฅผ ์ค์ ํด ๋ด
์๋ค.
์์ ์์์ ์ฐ๋ฆฌ๋ ์ด์ ์ CatsController ๋ด์ ์ ์ ๋ /cats ๋ผ์ฐํธ ํธ๋ค๋ฌ์ ๋ํด LoggerMiddleware๋ฅผ ์ค์ ํ์ต๋๋ค. ๋ํ ๋ฏธ๋ค์จ์ด๋ฅผ ๊ตฌ์ฑ ํ ๋ ๊ฒฝ๋ก path ๋ฐ ์์ฒญ method๋ฅผ ํฌํจํ๋ ์ค๋ธ์ ํธ๋ฅผ forRoutes()๋ฉ์๋์ ์ ๋ฌํ์ฌ ๋ฏธ๋ค์จ์ด๋ฅผ ํน์ ์์ฒญ ๋ฉ์๋๋ก ์ ํํ ์๋ ์์ต๋๋ค. ์๋ ์์ ์์, RequestRequest ๋ฉ์๋ ์ด๊ฑฐ ํ์ ๊ฐ์ ธ์ ์ํ๋ ์์ฒญ ๋ฉ์๋ ์ ํ์ ์ฐธ์กฐํ์ญ์์ค.
Route wildcards
ํจํด ๊ธฐ๋ฐ ๊ฒฝ๋ก๋ ์ง์๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด ๋ณํ๋ ์์ผ๋ ์นด๋๋ก ์ฌ์ฉ๋๋ฉฐ ๋ชจ๋ ๋ฌธ์ ์กฐํฉ๊ณผ ์ผ์นํฉ๋๋ค.
ab*cd ๋ผ์ฐํธ ๊ฒฝ๋ก๋ abcd, ab_cd, abecd ๋ฑ๊ณผ ์ผ์นํฉ๋๋ค. ?, +, *๋ฐ ()๋ฌธ์๋ ๋ผ์ฐํธ ๊ฒฝ๋ก์ ์ฌ์ฉ๋ ์ ์์ผ๋ฉฐ ์ ๊ท ํํ์์ ํ์ ์งํฉ์
๋๋ค. ํ์ดํ (-)๊ณผ ์ (.)์ ๋ฌธ์ ๊ทธ๋๋ก ๋ฌธ์์ด ๊ธฐ๋ฐ ๊ฒฝ๋ก๋ก ํด์๋ฉ๋๋ค.
Middleware consumer
MiddlewareConsumer๋ ํฌํผ ํด๋์ค์
๋๋ค. ๋ฏธ๋ค์จ์ด๋ฅผ ๊ด๋ฆฌํ๊ธฐ์ํ ๋ช ๊ฐ์ง ๊ธฐ๋ณธ ์ ๊ณต ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. ์ด๋ค ๋ชจ๋๋ ์ ์ฐฝํ ์คํ์ผ์์ ๊ฐ๋จํ๊ฒ ์ฌ์ฌ๋ก ๋ฌถ์ ์ ์์ต๋๋ค. forRoutes() ๋ฉ์๋๋ ๋จ์ผ ๋ฌธ์์ด, ๋ค์ค ๋ฌธ์์ด, RouteInfo ์ค๋ธ์ ํธ, ์ ์ด๊ธฐ ํด๋์ค ๋ฐ ๋ค์ค ์ ์ด๊ธฐ ํด๋์ค๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์๋ง๋ ์ปจํธ๋กค๋ฌ ๋ชฉ๋ก์ ์ผํ๋ก ๊ตฌ๋ถํ์ฌ ์ ๋ฌํ ๊ฒ์
๋๋ค. ์๋๋ ๋จ์ผ ์ปจํธ๋กค๋ฌ๋ฅผ ์ฌ์ฉํ ์์
๋๋ค.
info ํํธ
apply()๋ฉ์๋๋ ๋จ์ผ ๋ฏธ๋ค์จ์ด ๋๋ ์ฌ๋ฌ ์ธ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ค ๋ฏธ๋ค์จ์ด๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค.
๋ฏธ๋ค์จ์ด๊ฐ ์ ์ฉ๋์ง ์๋๋ก ํน์ ๊ฒฝ๋ก๋ฅผ ์ ์ธ ํ ์ ์์ต๋๋ค. ๊ธฐ๋ฅ ๋ฏธ๋ค์จ์ด ๋์์ ์ฌ์ฉํ๋ ๋์ ์ง๊ธ๊น์งํ๋ ๊ฒ์ฒ๋ผ ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋ฏธ๋ค์จ์ด๋ฅผ ์ ์ ํ ๋๋ฅผ exclude() ๋ฉ์๋ ์ฌ์ฉํ์ฌ ํน์ ๊ฒฝ๋ก๋ฅผ ์ฝ๊ฒ ์ ์ธ ํ ์ ์์ต๋๋ค. ์ด ๋ฐฉ๋ฒ์ ์๋์ ๊ฐ์ด ๊ฒฝ๋ก์ ๋ฉ์๋๋ฅผ ์๋ณํ๋ ํ๋ ์ด์์ ๊ฐ์ฒด๋ฅผ ์ ์ธ์ํต๋๋ค.
์์ ์์์ LoggerMiddleware๋ exclude()๋ฉ์๋์ ์ ๋ฌ ๋ ๋ ๊ฒฝ๋ก๋ฅผ ์ ์ธํ๊ณ CatsController ๋ด์ ์ ์ ๋ ๋ชจ๋ ๊ฒฝ๋ก์ ๋ฐ์ธ๋ฉ๋ฉ๋๋ค. exclude()๋ฉ์๋๋ ๊ธฐ๋ฅ ๋ฏธ๋ค์จ์ด (ํด๋์ค๊ฐ ์๋ ํจ์์ ์ ์ ๋ ๋ฏธ๋ค์จ์ด; ์์ธํ ๋ด์ฉ์ ์๋ ์ฐธ์กฐ)์ ์๋ํ์ง ์์ต๋๋ค. ๋ํ ์ด ๋ฐฉ๋ฒ์ ๋ณด๋ค ์ผ๋ฐ์ ์ธ ๊ฒฝ๋ก (์: ์์ผ๋ ์นด๋)์์ ๊ฒฝ๋ก๋ฅผ ์ ์ธํ์ง ์์ต๋๋ค. ํด๋น ๋ ๋ฒจ์ ์ ์ด๊ฐ ํ์ํ ๊ฒฝ์ฐ ๊ฒฝ๋ก ์ ํ ๋ก์ง์ ๋ฏธ๋ค์จ์ด์ ์ง์ ๋ฐฐ์นํ๊ณ ์์ฒญ์ URL์ ์ก์ธ์คํ์ฌ ๋ฏธ๋ค์จ์ด ๋ก์ง์ ์กฐ๊ฑด๋ถ๋ก ์ ์ฉํด์ผํฉ๋๋ค.
Functional middleware
์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ LoggerMiddleware ํด๋์ค๋ ๋งค์ฐ ๊ฐ๋จํฉ๋๋ค. ๋ฉค๋ฒ, ์ถ๊ฐ ๋ฉ์๋ ๋ฐ ์ข
์์ฑ์ด ์์ต๋๋ค. ํด๋์ค ๋์ ๊ฐ๋จํ ํจ์๋ก ์ ์ํ ์ ์๋ ์ด์ ๋ ๋ฌด์์
๋๊น? ์ฌ์ค ์ฐ๋ฆฌ๋ ํ ์ ์์ต๋๋ค. ์ด ์ ํ์ ๋ฏธ๋ค์จ์ด๋ฅผ ๊ธฐ๋ฅ์ ๋ฏธ๋ค์จ์ด๋ผ๊ณ ํฉ๋๋ค. ๋ก๊ฑฐ ๋ฏธ๋ค์จ์ด๋ฅผ ํด๋์ค ๊ธฐ๋ฐ์์ ๊ธฐ๋ฅ์ ๋ฏธ๋ค์จ์ด๋ก ๋ณํํ์ฌ ์ฐจ์ด์ ์ ์ค๋ช
ํด ๋ณด๊ฒ ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ AppModule ๋ด์์ ์ฌ์ฉํ์ญ์์ค:
info ํํธ ๋ฏธ๋ค์จ์ด์ ์ข ์์ฑ์ด ํ์ํ์ง ์์ ๋๋ง๋ค ๋ ๊ฐ๋จํ ๊ธฐ๋ฅ์ ๋ฏธ๋ค์จ์ด ๋์์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
Multiple middleware
์์์ ์ธ๊ธ ํ ๊ฒ์ฒ๋ผ ์์ฐจ์ ์ผ๋ก ์คํ๋๋ ์ฌ๋ฌ ๋ฏธ๋ค์จ์ด๋ฅผ ๋ฐ์ธ๋ฉํ๋ ค๋ฉด apply()๋ฉ์๋ ์์ ์ผํ๋ก ๊ตฌ๋ถ ๋ ๋ชฉ๋ก์ ์ ๊ณตํ์ญ์์ค.
Global middleware
๋ฑ๋ก๋ ๋ชจ๋ ๋ผ์ฐํธ์ ๋ฏธ๋ค์จ์ด๋ฅผ ํ ๋ฒ์ ๋ฐ์ธ๋ฉํ๋ ค๋ฉด INestApplication ์ธ์คํด์ค์์ ์ ๊ณตํ๋use()๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
Last updated