ASP.NET Core 미들웨어

Shy·2025년 3월 14일

ASP.Net Core9

목록 보기
3/4

미들웨어(Middleware)란?

미들웨어는 ASP.NET Core에서 HTTP 요청(Request) 이 들어와 응답(Response) 이 반환될 때까지 거치는 구성 요소이다.

  • 모든 요청은 미들웨어 체인을 거쳐 컨트롤러 또는 최종 처리기로 전달된다.
  • 미들웨어는 요청을 처리하거나, 수정 후 다음 미들웨어로 전달할 수 있다.
  • 미들웨어가 없다면 ASP.NET Core 애플리케이션은 동작하지 않는다!

ASP.NET Core의 요청 처리 흐름은 아래와 같다.
Client Request → [Middleware 1] → [Middleware 2] → [Routing Middleware] → [MVC Controller] → Response
이렇게, MVC 컨트롤러도 미들웨어 내부에서 실행된다.

미들웨어의 역할은 아래와 같다.

  • 요청을 가로채서 처리 가능 (예: 인증, 로깅, CORS 설정)
  • 요청을 변경 후 다음 미들웨어로 전달 가능 (next())
  • 응답을 가공하여 최종 반환 가능

미들웨어의 주요 메서드

메서드역할실행 방식
app.Use()중간 미들웨어 추가다음 미들웨어 호출 가능 (next())
app.Run()최종 미들웨어next() 없이 즉시 응답 반환
app.MapGet()특정 경로(Route) 요청 처리app.Use()와 달리 직접 응답 반환

미들웨어 실행 예제

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.Use(async (context, next) =>
{
    Console.WriteLine("미들웨어 1 시작");
    await next();
    Console.WriteLine("미들웨어 1 종료");
});

app.Use(async (context, next) =>
{
    Console.WriteLine("미들웨어 2 시작");
    await next();
    Console.WriteLine("미들웨어 2 종료");
});

app.Run(async context =>
{
    Console.WriteLine("미들웨어 3 실행 (app.Run)");
    await context.Response.WriteAsync("Hello from Middleware 3!");
});

app.Run();

// 미들웨어 1 시작
// 미들웨어 2 시작
// 미들웨어 3 실행 (app.Run)
// 미들웨어 2 종료
// 미들웨어 1 종료
  • 즉, 요청이 들어올 때는 next()를 따라 실행되고, 응답을 반환할 때는 역순으로 실행된다.

MVC와 미들웨어의 관계

MVC 컨트롤러를 사용하면 미들웨어가 필요가 없을까?
정답은 아니다!
컨트롤러를 실행하기 위해서 UseRouting(), UseAuthorization(), MapControllers()미들웨어가 필요하다.

MVC를 사용한 Program.cs (기본적인 미들웨어 설정)

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.UseRouting();       // ✅ 라우팅 미들웨어 (컨트롤러와 연결)
app.UseAuthorization(); // ✅ 인증 및 권한 관리
app.MapControllers();   // ✅ MVC 컨트롤러 실행

app.Run();

즉, MVC도 미들웨어 위에서 동작하며, 미들웨어 없이는 컨트롤러도 실행되지 않는다!!


기본적으로 자동 적용되는 미들웨어

ASP.NET Core MVC를 사용하면 내부적으로 적용되는 미들웨어

기능미들웨어 사용 가능?직접 추가 필요?
라우팅 (Controller 실행)UseRouting()자동❌ (기본 포함)
인증 (Authorize 속성 사용 시)UseAuthorization() 필요✅ (사용 시 추가 필요)
정적 파일 (wwwroot 활용 시)UseStaticFiles() 필요✅ (정적 파일 사용 시)
예외 처리 (Exception Handling)UseExceptionHandler() 필요✅ (예외 페이지 추가 시)

언제 미들웨어를 직접 추가할까?

기본적인 MVC구조로 기능을 사용할 땨는 미들웨어를 추가할 필요는 없더. 하지만 추가적인 기능이 필요할 때는 미들웨어를 직접 추가해야 한다.

1. 정적 파일 제공(wwwroot)

app.UseStaticFiles(); // ✅ HTML, CSS, JS 등 정적 파일 제공
// 미들웨어가 없으면 /index.html 등의 정적 파일을 제공할 수 없다.

2. 인증 및 권한([Authorize] 사용 시)

[Authorize]
[ApiController]
[Route("api/orders")]
public class OrderController : ControllerBase
{
    [HttpGet]
    public IActionResult GetOrders() => Ok(new { message = "Orders List" });
}

아래와 같은 인증 미들웨어(UseAuthrization())을 추가해야 한다.

app.UseAuthorization(); // ✅ 인증 및 권한 체크 활성화

3. CORS (다른 도메인에서 API 요청 허용)
CORS를 허용하려면 UseCors() 미들웨어를 추가해야 한다.

builder.Services.AddCors(options =>
{
    options.AddPolicy("AllowAll", policy =>
    {
        policy.AllowAnyOrigin()
              .AllowAnyMethod()
              .AllowAnyHeader();
    });
});

app.UseCors("AllowAll"); // ✅ CORS 허용

미들웨어가 없으면 브라우저에서 CORS 에러 발생할 수 있다.

4. 로깅 및 요청 처리 미들웨어 추가

app.Use(async (context, next) =>
{
    Console.WriteLine($"[LOG] {context.Request.Method} {context.Request.Path}");
    await next(); // 다음 미들웨어 실행
});
// 이제 모든 요청이 콘솔에 기록된다.

결론

  • 미들웨어는 ASP.NET Core의 핵심 구성 요소이며, 요청과 응답을 처리하는 역할을 한다.
  • ASP.NET Core MVC를 사용할 때 기본적인 미들웨어 (UseRouting(), UseAuthorization(), MapControllers())는 자동 포함된다.
  • 정적 파일, 인증, CORS, 로깅 등 추가 기능이 필요하면 미들웨어를 직접 추가해야 한다.
  • 미들웨어 없이 컨트롤러 실행 불가능 → MVC 컨트롤러도 미들웨어 체인 속에서 동작한다!
profile
신입사원...

0개의 댓글