basic06

์‚ฌ์šฉ์ž ์ง€์ • ๋ฏธ๋“ค์›จ์–ด์˜ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์˜ˆ์ œ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ๋ฏธ๋“ค์›จ์–ด๋Š” ๋“ฑ๋กํ•œ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰๋˜๊ธฐ์—, program.cs์—์„œ ์ˆœ์„œ๋ฅผ ์ž˜ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

program.cs

  • Routing๊ณผ Endpoint(Controller) ์‚ฌ์ด์— ๋‘ ๊ฐ€์ง€ ๋ฏธ๋“ค์›จ์–ด๊ฐ€ ์‚ฝ์ž…๋˜์–ด, ์‚ฝ์ž…๋œ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰๋จ

  • ์‚ฌ์šฉ์ž ์ง€์ • ๋ฏธ๋“ค์›จ์–ด๋Š” [MiddlerWare] ๋””๋ ‰ํ† ๋ฆฌ ์•ˆ์— ์ •์˜๋˜์–ด์žˆ์Œ

    // program.cs
    app.UseRouting();
    
    app.UseLoadRequestDataMiddlerWare();
    app.UseCheckUserSessionMiddleWare();
    
    app.UseEndpoints(endpoints => { endpoints.MapControllers(); });

LoadRequestDataMiddlerWare.cs

  • ๋ฏธ๋“ค์›จ์–ด๋Š” ํด๋ž˜์Šค๋กœ ์ •์˜๋˜์–ด์•ผ ํ•˜๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์š”์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•จ

  1. ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ํ•ด๋‹น ๋ฏธ๋“ค์›จ์–ด ์‹คํ–‰ ํ›„ ๋‹ค์Œ ๋ฏธ๋“ค์›จ์–ด๊ฐ€ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋Œ€๋ฆฌ์ž(delegate)๋ฅผ ์„ค์ •ํ•ด์ค˜์•ผ ํ•จ

    private readonly RequestDelegate _next;
    
    public LoadRequestDataMiddlerWare(RequestDelegate next)
    {
        _next = next;
    }
  2. ๋ฏธ๋“ค์›จ์–ด๊ฐ€ ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ๋Š” Invoke ๋˜๋Š” InvokeAsync๋ผ๋Š” ๊ณต์šฉ ๋ฉ”์„œ๋“œ์— ์ •์˜ ๋˜์–ด์•ผ ํ•จ

    • basic06์˜ ๊ฒฝ์šฐ public async Task InvokeAsync(HttpContext context) ๋กœ ์ •์˜ ๋ฐ ๊ตฌํ˜„ ๋˜์–ด ์žˆ์Œ

    • ๋น„๋™๊ธฐ์‹์œผ๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” InvokeAsync๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•จ

    • ์ด ๋ฉ”์„œ๋“œ๋Š” Task๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•จ

    • ์ ์ ˆํ•œ ์‹œ์ ์— awit๋กœ _next(context)๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋‹ค์Œ ๋ฏธ๋“ค์›จ์„œ ์‹คํ–‰

  3. CheckUserSessionMiddleWare.cs, LoggingMiddleware.cs๋„ ์ด์™€ ๊ฐ™์€ ๊ตฌ์กฐ

  4. _next(context)๋ฅผ ํ˜ธ์ถœ

    • ๋ฏธ๋“ค์›จ์–ด ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€์—์„œ _next ๋ฏธ๋“ค์›จ์–ด ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ๋กœ ์‹คํ–‰๋œ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Œ

    1. Middleware1 ๋ฉ”์†Œ๋“œ ์•ˆ์—์„œ `await _next(context)`์œผ๋กœ Middleware2 ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ. 
    2. Middleware2 ๋ฉ”์†Œ๋“œ ์•ˆ์—์„œ ๋˜ `await _next(context)` Middleware3 ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ.
    3. Middleware ๋ฉ”์†Œ๋“œ์—์„œ ๊ณ„์†ํ•ด์„œ next Middleware ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•จ
    4. EndPoint Middleware(next๊ฐ€ ์—†๋Š” ๋งˆ์ง€๋ง‰ ๋ฏธ๋“ค์›จ์–ด)์—์„œ๋Š” void ๋˜๋Š” ์–ด๋–ค ๊ฐ’์„ ๋ฆฌํ„ดํ•˜๋ฉด์„œ ์ข…๋ฃŒ.
    5. ์ด์ „ ๋ฉ”์†Œ๋“œ์—์„œ `await _next(context)`์˜ ๋‹ค์Œ ์ค„ ์ฝ”๋“œ๋ถ€ํ„ฐ ์ด์–ด์„œ ๊ณ„์† ์ง„ํ–‰ํ•˜๋‹ค๊ฐ€ void ๋˜๋Š” ์–ด๋–ค ๊ฐ’์„ ๋ฆฌํ„ดํ•˜๋ฉด์„œ ์ข…๋ฃŒ.
    6. ๋๊นŒ์ง€ ๋Œ์•„์™€์„œ ํ”„๋ ˆ์ž„์›Œํฌ ๋‚ด๋ถ€์—์„œ ๋™์ž‘ํ•˜๋Š” ๊ฐ์ฒด๊ฐ€ Response๋ฅผ ๋ณด๋ƒ„

MiddlewareExtentions.cs

  1. ํ™•์žฅ ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€ํ•˜๊ธฐ

    • ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—, program.cs์—์„œ app.UseLoadRequestData(), app.UseCheckUserSessionMiddleWare()๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ;

    public static class MiddlewareExtentions
    {           
        public static IApplicationBuilder UseLoadRequestDataMiddlerWare(this IApplicationBuilder builder)
        {
            return builder.UseMiddleware<LoadRequestDataMiddlerWare>();
        }
    
        public static IApplicationBuilder UseCheckUserSessionMiddleWare(this IApplicationBuilder builder)
        {
            return builder.UseMiddleware<CheckUserSessionMiddleWare>();
        }  
    }
  2. LoggingMiddlewareExtensions.cs๋„ ์ด์™€ ๊ฐ™์€ ๊ตฌ์กฐ

Last updated