ํผ๋๋ก ๋์๊ฐ๊ธฐ
Dev.toBackend
์๋ฌธ ์ฝ๊ธฐ
.NET 9 Middleware ์ต์ ํ๋ก ๋ฉ๋ชจ๋ฆฌ ๋์์ ์ฑ๋ฅ ๋ณ๋ชฉ ํด๊ฒฐ
.NET 9 Middleware Pipeline: Advanced Patterns and Performance ๐
AI ์์ฝ
Context
ASP.NET Core Middleware Pipeline์ ๋จ์ํ ์ถ์ํ ์คํด๋ก ์ธํ ์คํ ํ๋ฆ ์ ์ด ์คํจ. Singleton ๊ธฐ๋ฐ ํ์ฑํ ๋ฐฉ์ ์ฌ์ฉ ์ Scoped ์๋น์ค ์บก์ฒ๋ก ์ธํ ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฐ์. ์๋ชป๋ Middleware ๋ฑ๋ก ์์๋ก ์ธํ ๋ถํ์ํ ๋ฆฌ์์ค ์๋ชจ ๋ฐ ์ฒ๋ฆฌ ์ง์ฐ.
Technical Solution
- UseWhen๊ณผ MapWhen์ ๋ช ํํ ๋ถ๋ฆฌ๋ฅผ ํตํ ํ์ดํ๋ผ์ธ ์ ์ด. UseWhen์ ์กฐ๊ฑด๋ถ ์คํ ํ ๋ฉ์ธ ํ์ดํ๋ผ์ธ์ผ๋ก ๋ณต๊ทํ๋ ๊ตฌ์กฐ. MapWhen์ ์กฐ๊ฑด ์ผ์น ์ ๋ฉ์ธ ํ๋ฆ์ ์์ ํ ๋ถ๋ฆฌํ๋ ์๊ตฌ์ ํฌํฌ ๋ฐฉ์.
- IMiddleware ์ธํฐํ์ด์ค ๊ตฌํ์ ํตํ Factory ๊ธฐ๋ฐ ํ์ฑํ ์ ๋ต. ์์ฒญ๋ง๋ค DI ์ปจํ ์ด๋์์ ์ธ์คํด์ค๋ฅผ ์์ฑํ์ฌ Scoped ์๋น์ค์ ์๋ช ์ฃผ๊ธฐ ๋ถ์ผ์น ๋ฌธ์ ํด๊ฒฐ.
- ๋น์ฉ ๊ธฐ๋ฐ Middleware ๋ฐฐ์น ์ต์ ํ ์ค๊ณ. ExceptionHandler์ HttpsRedirection ๊ฐ์ ์ ๋น์ฉ ๋ก์ง์ ์ ๋ฉด์ ๋ฐฐ์นํ๊ณ CustomAudit ๊ฐ์ ๊ณ ๋น์ฉ ๋ก์ง์ ํ์์๋ก ๋ฐฐ์นํ๋ ๊ตฌ์กฐ.
- Sync-over-Async ์ ๊ฑฐ๋ฅผ ํตํ Thread Pool Deadlock ๋ฐฉ์ง. .Result๋ .Wait() ๋์ ์ ๊ตฌ๊ฐ await๋ฅผ ์ฌ์ฉํ๋ ์์ ๋น๋๊ธฐ ํ๋ฆ ์ค๊ณ.
- Request Body ๋ฒํผ๋ง ์ต์ํ ์ ๋ต. ๋์ฉ๋ ํ์ด๋ก๋ ์ฒ๋ฆฌ ์ ๋ฉ๋ชจ๋ฆฌ ์ ์ฌ ๋์ Stream ์ง์ ์ฒ๋ฆฌ ๋ฐฉ์์ ํตํ ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ฑ ํ๋ณด.
Key Takeaway
Middleware Pipeline์ ๋จ์ํ ํจ์ ํธ์ถ ์ฒด์ธ์ด๋ฉฐ ๋ฑ๋ก ์์์ ์๋ช ์ฃผ๊ธฐ ๊ด๋ฆฌ๊ฐ ์์คํ ์ ์ฒด์ ์์ ์ฑ๊ณผ ์ฒ๋ฆฌ๋์ ๊ฒฐ์ ํ๋ ํต์ฌ ์ค๊ณ ์์์.
์ค์ฒ ํฌ์ธํธ
Scoped ์๋น์ค(DB Context ๋ฑ)๊ฐ ํ์ํ Middleware๋ ๋ฐ๋์ IMiddleware๋ฅผ ๊ตฌํํ๊ณ Transient๋ก ๋ฑ๋กํ์ฌ ์ฌ์ฉํ ๊ฒ