ASP.NET Core 10.0에서 미들웨어 흐름 이해하기
최소 코드로 확인하는 next() 기반 호출 순서
이 문서는 ASP.NET Core 10.0 Empty 프로젝트에서 미들웨어의 호출 흐름을 가장 단순한 형태로 이해하기 위한 최소한의 예제를 제공합니다. 특히 next() 호출을 기준으로 요청(Request)과 응답(Response) 단계가 어떻게 앞뒤로 흐르는지를 실제 콘솔 출력으로 확인할 수 있습니다.
1. 프로젝트 준비
Visual Studio 또는 CLI로 다음 템플릿을 사용합니다.
- 프로젝트 템플릿: ASP.NET Core Empty
- 대상 프레임워크: .NET 10.0
파일 구성은 단일 Program.cs 파일만 있으면 충분합니다.
2. Program.cs – 최소 미들웨어 파이프라인 코드
아래 코드는 Use → Use → Run 구조의 기본 미들웨어 파이프라인을 구현합니다. 각 미들웨어에서 요청과 응답 단계에 출력문을 두어 순서를 명확히 보여줍니다.
using Microsoft.AspNetCore.Builder;
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
// 1번 미들웨어
app.Use(async (context, next) =>
{
Console.WriteLine("① 1번 미들웨어: 요청 처리 시작");
await next(); // 다음 미들웨어 호출
Console.WriteLine("⑥ 1번 미들웨어: 응답 처리 끝");
});
// 2번 미들웨어
app.Use(async (context, next) =>
{
Console.WriteLine("② 2번 미들웨어: 요청 처리 시작");
await next(); // 다음 미들웨어 호출
Console.WriteLine("⑤ 2번 미들웨어: 응답 처리 끝");
});
// 3번 미들웨어 (종단 터미널)
app.Run(async context =>
{
Console.WriteLine("③ 3번 미들웨어(Run): 요청 처리");
await context.Response.WriteAsync("Hello Middleware\n");
Console.WriteLine("④ 3번 미들웨어(Run): 응답 처리");
});
app.Run();
3. 실행 흐름 분석
브라우저에서 / 경로를 호출하면 콘솔에는 다음 순서대로 출력됩니다.
요청(Request) 단계
1 → 2 → 3
응답(Response) 단계
4 → 5 → 6
4. 요청과 응답의 전체 구조
아래는 전체 흐름을 시각적으로 표현한 것입니다.
Request →
① 1번 미들웨어(요청)
↓ next()
② 2번 미들웨어(요청)
↓ next()
③ 마지막 Run 미들웨어(요청)
---- 응답 시작 ----
④ 마지막 Run 미들웨어(응답)
↑
⑤ 2번 미들웨어(응답)
↑
⑥ 1번 미들웨어(응답)
← Response
5. 핵심 개념 정리
Use()
- 요청(Request)과 응답(Response) 모두 개입 가능
next()호출 여부에 따라 다음 미들웨어가 실행됨
Run()
- 파이프라인의 종단(Terminal) 미들웨어
next()호출이 없으며 이후 미들웨어는 실행되지 않음
미들웨어 실행 순서의 원칙
- 요청(Request)은 등록된 순서대로 실행됨
- 응답(Response)은 역순으로 실행됨
추천 자료: ASP.NET Core 인증 및 권한 부여
추천 자료: .NET Blazor에 대해 알아보시겠어요? .NET Blazor 알아보기를 확인해보세요!