다음을 통해 공유


앱 시작

이 콘텐츠는 .NET Docs 또는 오프라인으로 읽을 수 있는 다운로드 가능한 무료 PDF로 제공되는 Azure용 ASP NET Web Forms 개발자를 위한 Blazor eBook에서 발췌한 것입니다.

Blazor-for-ASP-NET-Web-Forms-Developers eBook cover thumbnail.

ASP.NET용으로 작성된 애플리케이션에는 일반적으로 Application_Start 이벤트를 정의하는 global.asax.cs 파일이 포함됩니다. 해당 이벤트는 HTML 렌더링 및 .NET 처리에 대해 둘 다 구성되고 사용 가능하도록 설정되는 서비스를 제어합니다. 이 장에서는 ASP.NET Core 및 Blazor Server의 간단한 차이점을 살펴봅니다.

Application_Start 및 Web Forms

기본 Web Forms Application_Start 메서드는 수년에 걸쳐 많은 구성 작업을 처리하려는 계획에 따라 성장했습니다. 이제 Visual Studio 2022의 기본 템플릿을 사용한 새로운 Web Forms 프로젝트에는 다음 구성 논리가 포함됩니다.

  • RouteConfig - 애플리케이션 URL 라우팅
  • BundleConfig - CSS 및 JavaScript 묶음 및 축소

해당 개별 파일은 각각 App_Start 폴더에 있으며 애플리케이션 시작 시 한 번만 실행됩니다. 기본 프로젝트 템플릿의 RouteConfig는 애플리케이션 URL이 .ASPX 파일 확장명을 생략할 수 있도록 Web Forms의 FriendlyUrlSettings를 추가합니다. 기본 템플릿에는 확장명을 생략하는 파일 이름을 사용하는 친숙한 URL에 대해 .ASPX 페이지의 영구 HTTP 리디렉션 상태 코드(HTTP 301)를 제공하는 지시문도 포함됩니다.

ASP.NET Core 및 Blazor를 사용하면 해당 메서드는 간소화되고 Startup 클래스에 통합되거나, 일반적인 웹 기술 측면에서 제거됩니다.

Blazor Server 시작 구조

Blazor Server 애플리케이션은 ASP.NET Core 3.0 이상 버전을 기반으로 합니다. ASP.NET Core 웹 애플리케이션은 Program.cs에서 구성하거나 Startup.cs 클래스의 메서드 쌍을 통해 구성합니다. 다음은 샘플 Program.cs 파일입니다.

using BlazorApp1.Data;
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Web;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddServerSideBlazor();
builder.Services.AddSingleton<WeatherForecastService>();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.MapBlazorHub();
app.MapFallbackToPage("/_Host");

app.Run();

앱의 필수 서비스는 WebApplicationBuilder 인스턴스의 Services 컬렉션에 추가됩니다. 이렇게 하면 프레임 워크의 기본 제공 종속성 주입 컨테이너를 사용하여 다양한 ASP.NET Core 프레임워크 서비스를 구성할 수 있습니다. 다양한 builder.Services.Add* 메서드는 다른 많은 기능 중 인증, Razor Pages, MVC 컨트롤러 라우팅, SignalR 및 Blazor Server 상호 작용과 같은 기능을 사용할 수 있는 서비스를 추가합니다. ASPX, ASCX, ASHX, ASMX 파일의 구문 분석과 처리는 web.config 구성 파일에서 ASP.NET을 참조하여 정의되므로 Web Forms에는 해당 메서드가 필요하지 않았습니다. ASP.NET Core의 종속성 주입에 관한 자세한 내용은 온라인 설명서를 참조하세요.

builder에서 app을 작성하면, app에서의 호출의 나머지 부분은 자체 HTTP 파이프라인을 구성합니다. 이러한 호출을 사용하여 애플리케이션에 전송된 모든 요청을 처리할 미들웨어를 위쪽에서 아래쪽으로 선언합니다. 기본 구성의 관련 기능 중 대부분은 Web Forms 구성 파일에 분산되었으며 지금은 쉽게 참조할 수 있도록 한 곳에 있습니다.

더 이상 web.config 파일에 배치된 사용자 지정 오류 페이지의 구성이 아니지만, 이제 애플리케이션 환경에 Development 레이블이 지정되지 않은 경우 항상 표시되도록 구성됩니다. 또한 ASP.NET Core 애플리케이션은 이제 UseHttpsRedirection 메서드 호출을 통해 기본적으로 TLS를 사용하여 보안 페이지를 제공하도록 구성됩니다.

이렇게 하면 예기치 않은 구성 메서드 호출이 UseStaticFiles로 전달됩니다. ASP.NET Core에서 정적 파일(예: JavaScript, CSS, 이미지 파일)에 대한 요청 지원은 명시적으로 사용하도록 설정해야 하며 기본적으로 앱의 wwwroot 폴더에 있는 파일만 공개적으로 처리할 수 있습니다.

UseRouting 줄은 Web Forms에서 구성 옵션 중 하나를 복제하는 첫 번째 줄입니다. 해당 메서드는 ASP.NET Core 라우터를 파이프라인에 추가하며 여기에서 구성하거나 라우팅을 고려할 수 있는 개별 파일에서 구성할 수 있습니다. 라우팅 구성에 관한 자세한 내용은 라우팅 섹션에서 찾을 수 있습니다.

이 섹션의 마지막 app.Map* 호출은 ASP.NET Core가 수신 대기 중인 엔드포인트를 정의합니다. 관련 경로는 웹 서버에서 액세스하고 .NET에서 처리되어 반환되는 일부 콘텐츠를 수신할 수 있는 웹 액세스 가능 위치입니다. 첫 번째 항목인 MapBlazorHub는 Blazor 구성 요소의 상태 및 렌더링이 처리되는 서버에 대한 실시간 및 영구 연결을 제공하는 데 사용할 SignalR 허브를 구성합니다. MapFallbackToPage 메서드 호출은 Blazor 애플리케이션을 시작하는 페이지의 웹 액세스 가능 위치를 나타내며 클라이언트 쪽에서 딥 링크 설정 요청을 처리하도록 애플리케이션을 구성합니다. 브라우저를 열고 기본 프로젝트 템플릿의 /counter와 같이 애플리케이션의 Blazor 처리 경로로 직접 이동하면 해당 기능이 작동하는 것을 확인할 수 있습니다. 요청은 _Host.cshtml 대체 페이지에서 처리된 다음, 해당 페이지에서 Blazor 라우터를 실행하고 카운터 페이지를 렌더링합니다.

마지막 줄은 애플리케이션을 시작하며, 웹 형식에서는 필수가 아닙니다(IIS를 이용해 실행하기 때문입니다).

BundleConfig 프로세스 업그레이드

CSS 스타일시트 및 JavaScript 파일 같이 자산을 묶는 기술은 빠르게 발전하는 도구 및 관련 리소스 관리 방법을 제공하는 다른 기술과 함께 크게 달라졌습니다. 이를 위해 Grunt/Gulp/WebPack과 같은 Node 명령줄 도구를 사용하여 정적 자산을 패키지하는 것이 좋습니다.

Grunt, Gulp 및 WebPack 명령줄 도구와 연결된 구성을 애플리케이션에 추가할 수 있으며 ASP.NET Core는 애플리케이션 빌드 프로세스 중에 해당 파일을 자동으로 무시합니다. gulp 스크립트와 해당 스크립트 내부의 min 대상을 트리거하는 다음과 유사한 구문을 사용하여 프로젝트 파일 내에 Target을 추가하여 작업을 실행하는 호출을 추가할 수 있습니다.

<Target Name="MyPreCompileTarget" BeforeTargets="Build">
  <Exec Command="gulp min" />
</Target>

CSS 및 JavaScript 파일을 관리하기 위한 두 가지 전략에 관한 자세한 내용은 ASP.NET Core에서 정적 자산 묶음 및 축소를 참조하세요.