Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

ASP.NET Core 미들웨어 파이프라인에서 Map 확장 메서드의 역할과 사용법

미들웨어란 무엇인가?

미들웨어(Middleware)는 애플리케이션 파이프라인에 조립되어 들어오는 요청(Request)과 나가는 응답(Response)을 처리하는 소프트웨어 구성 요소입니다.

각 미들웨어 구성 요소는 요청을 파이프라인의 다음 구성 요소로 전달할지 여부를 스스로 결정하며, 다음 구성 요소가 호출되기 전과 후에 로깅, 인증, 예외 처리 같은 특정 작업을 수행할 수 있습니다.

Map 확장 메서드의 역할

Map 확장 메서드는 파이프라인을 분기(Branching)하기 위한 규약(Convention)으로 사용됩니다. 이 메서드는 요청 경로(Request Path)를 기준으로 요청 대리자(Request Delegate)를 매칭하며, 경로 문자열과 해당 경로에 대해 별도의 미들웨어 파이프라인을 구성하는 함수를 인수로 받습니다.

예를 들어, 기본 경로가 /maptest인 모든 요청은 아래 예제처럼 HandleMapTest 메서드에서 구성한 파이프라인이 처리하게 됩니다.

경로 기반 분기 예제

private static void HandleMapTest(IApplicationBuilder app){
    app.Run(async context =>{
        await context.Response.WriteAsync("Map Test Successful");
    });
}
public void ConfigureMapping(IApplicationBuilder app){
    app.Map("/maptest", HandleMapTest);
}

위 코드에서 /maptest로 시작하는 요청은 별도의 브랜치로 분기되어 "Map Test Successful"이라는 응답을 반환합니다. 그 외의 요청은 기존 파이프라인을 그대로 통과합니다.

MapWhen을 활용한 조건 기반 분기

경로 기반 매핑 외에도 MapWhen 메서드를 사용하면 조건식(Predicate) 기반으로 미들웨어를 분기할 수 있어, 훨씬 유연한 방식으로 독립적인 파이프라인을 구성할 수 있습니다.

Func<HttpContext, bool> 타입의 어떤 조건식이든 사용하여 요청을 새로운 파이프라인 브랜치로 보낼 수 있습니다.

private static void HandleBranch(IApplicationBuilder app){
    app.Run(async context =>{
        await context.Response.WriteAsync("Branch used.");
    });
}
public void ConfigureMapWhen(IApplicationBuilder app){
    app.MapWhen(context => {
        return context.Request.Query.ContainsKey("branch");
    }, HandleBranch);

    app.Run(async context =>{
        await context.Response.WriteAsync("Hello from " + _environment);
    });
}

위 예제에서는 쿼리 문자열에 branch 키가 포함된 요청만 별도의 브랜치로 분기되고, 나머지 요청은 기본 파이프라인을 따라 실행됩니다.

Map의 중첩(Nesting)

Map으로 만든 브랜치 안에는 또 다른 Map을 중첩시킬 수 있습니다. 이를 통해 계층적인 URL 구조에 맞춰 파이프라인을 세분화하여 구성할 수 있습니다.

app.Map("/level1", level1App => {
    level1App.Map("/level2a", level2AApp => {
        // "/level1/level2a" 경로 처리
        //...
    });
    level1App.Map("/level2b", level2BApp => {
        // "/level1/level2b" 경로 처리
        //...
    });
});

정리

ASP.NET Core에서 Map은 요청 경로를 기준으로, MapWhen은 임의의 조건식을 기준으로 미들웨어 파이프라인을 분기하는 핵심 도구입니다. 이 두 가지 확장 메서드와 중첩 매핑을 적절히 활용하면 요청 특성에 맞는 유연하고 체계적인 처리 흐름을 설계할 수 있습니다.