ASP.NET Core 호스트 및 배포 BlazorHost and deploy ASP.NET Core Blazor

작성자: Luke Latham, Rainer StropekDaniel RothBy Luke Latham, Rainer Stropek, and Daniel Roth

앱 게시Publish the app

앱은 릴리스 구성으로 배포하기 위해 게시됩니다.Apps are published for deployment in Release configuration.

  1. 탐색 모음에서 빌드 > {APPLICATION} 게시를 선택합니다.Select Build > Publish {APPLICATION} from the navigation bar.
  2. publish target을 선택합니다.Select the publish target. 로컬로 게시하려면 폴더를 선택합니다.To publish locally, select Folder.
  3. 폴더 선택 필드에서 기본 위치를 그대로 사용하거나 다른 위치를 지정합니다.Accept the default location in the Choose a folder field or specify a different location. Publish 단추를 선택합니다.Select the Publish button.

앱을 게시하면 배포할 자산을 만들기 전에 프로젝트 종속성의 복원과 프로젝트의 빌드가 트리거됩니다.Publishing the app triggers a restore of the project's dependencies and builds the project before creating the assets for deployment. 빌드 프로세스의 일부로 앱 다운로드 크기와 로드 시간을 줄이기 위해 사용하지 않는 메서드와 어셈블리를 제거합니다.As part of the build process, unused methods and assemblies are removed to reduce app download size and load times.

게시 위치:Publish locations:

  • Blazor WebAssembly
    • 독립 실행형: 앱은 /bin/Release/{TARGET FRAMEWORK}/publish/wwwroot 폴더에 게시됩니다.Standalone: The app is published into the /bin/Release/{TARGET FRAMEWORK}/publish/wwwroot folder. 앱을 정적 사이트로 배포하려면 wwwroot 폴더의 내용을 정적 사이트 호스트에 복사합니다.To deploy the app as a static site, copy the contents of the wwwroot folder to the static site host.
    • 호스트형: 클라이언트 Blazor WebAssembly 앱이 서버 앱의 /bin/Release/{TARGET FRAMEWORK}/publish/wwwroot 폴더에 서버 앱의 다른 정적 웹 자산과 함께 게시됩니다.Hosted: The client Blazor WebAssembly app is published into the /bin/Release/{TARGET FRAMEWORK}/publish/wwwroot folder of the server app, along with any other static web assets of the server app. 호스트에 publish 폴더의 콘텐츠를 배포합니다.Deploy the contents of the publish folder to the host.
  • Blazor Server: 앱은 /bin/Release/{TARGET FRAMEWORK}/publish 폴더에 게시됩니다.: The app is published into the /bin/Release/{TARGET FRAMEWORK}/publish folder. 호스트에 publish 폴더의 콘텐츠를 배포합니다.Deploy the contents of the publish folder to the host.

이 폴더의 자산은 웹 서버에 배포됩니다.The assets in the folder are deployed to the web server. 배포는 사용 중인 개발 도구에 따라 수동 프로세스일 수도 있고 자동 프로세스일 수도 있습니다.Deployment might be a manual or automated process depending on the development tools in use.

앱 기본 경로App base path

앱 기본 경로는 앱의 루트 URL 경로입니다.The app base path is the app's root URL path. 다음 ASP.NET Core 앱 및 Blazor 하위 앱을 고려하세요.Consider the following ASP.NET Core app and Blazor sub-app:

  • ASP.NET Core 앱은 MyApp으로 이름이 지정됩니다.The ASP.NET Core app is named MyApp:
    • 앱의 실제 위치는 d:/MyApp입니다.The app physically resides at d:/MyApp.
    • 요청은 https://www.contoso.com/{MYAPP RESOURCE}에서 수신됩니다.Requests are received at https://www.contoso.com/{MYAPP RESOURCE}.
  • CoolApp이라는 이름의 Blazor 앱은 MyApp의 하위 앱입니다.A Blazor app named CoolApp is a sub-app of MyApp:
    • 하위 앱의 실제 위치는 d:/MyApp/CoolApp입니다.The sub-app physically resides at d:/MyApp/CoolApp.
    • 요청은 https://www.contoso.com/CoolApp/{COOLAPP RESOURCE}에서 수신됩니다.Requests are received at https://www.contoso.com/CoolApp/{COOLAPP RESOURCE}.

CoolApp에 대한 추가 구성을 지정하지 않으면 이 시나리오의 하위 앱은 서버에 상주하는 위치에 대해 알지 못합니다.Without specifying additional configuration for CoolApp, the sub-app in this scenario has no knowledge of where it resides on the server. 예를 들어 앱은 상대 URL 경로 /CoolApp/에 상주한다는 사실을 모르는 상태에서는 해당 리소스의 올바른 상대 URL을 생성할 수 없습니다.For example, the app can't construct correct relative URLs to its resources without knowing that it resides at the relative URL path /CoolApp/.

Blazor 앱의 기본 경로 https://www.contoso.com/CoolApp/에 대한 구성을 제공하기 위해 <base> 태그의 href 특성은 Pages/_Host.cshtml 파일(Blazor Server) 또는 wwwroot/index.html 파일(Blazor WebAssembly)의 상대 루트 경로로 설정됩니다.To provide configuration for the Blazor app's base path of https://www.contoso.com/CoolApp/, the <base> tag's href attribute is set to the relative root path in the Pages/_Host.cshtml file (Blazor Server) or wwwroot/index.html file (Blazor WebAssembly):

<base href="/CoolApp/">

Blazor Server 앱은 Startup.Configure의 앱의 요청 파이프라인에서 UsePathBase를 호출하여 서버 쪽 기본 경로를 추가로 설정합니다. apps additionally set the server-side base path by calling UsePathBase in the app's request pipeline of Startup.Configure:

app.UsePathBase("/CoolApp");

상대 URL 경로를 제공하면 루트 디렉터리에 없는 구성 요소는 앱의 루트 경로를 기준으로 URL을 생성할 수 있습니다.By providing the relative URL path, a component that isn't in the root directory can construct URLs relative to the app's root path. 디렉터리 구조의 다른 수준에 있는 구성 요소는 앱 전체의 위치에서 다른 리소스에 대한 링크를 만들 수 있습니다.Components at different levels of the directory structure can build links to other resources at locations throughout the app. 또한 링크의 href 대상이 앱 기본 경로 URI 공간 내에 있는 경우 선택한 하이퍼링크를 가로채는 데 앱 기본 경로가 사용됩니다.The app base path is also used to intercept selected hyperlinks where the href target of the link is within the app base path URI space. Blazor 라우터는 내부 탐색을 처리합니다.The Blazor router handles the internal navigation.

많은 호스팅 시나리오에서 앱에 대한 상대 URL 경로는 앱의 루트입니다.In many hosting scenarios, the relative URL path to the app is the root of the app. 이러한 경우 앱의 상대 URL 기본 경로는 Blazor 앱에 대한 기본 구성인 슬래시(<base href="/" />)입니다.In these cases, the app's relative URL base path is a forward slash (<base href="/" />), which is the default configuration for a Blazor app. GitHub 페이지 및 IIS 하위 앱 같은 다른 호스팅 시나리오에서는 앱 기본 경로를 앱에 대한 서버의 상대 URL 경로로 설정해야 합니다.In other hosting scenarios, such as GitHub Pages and IIS sub-apps, the app base path must be set to the server's relative URL path of the app.

앱의 기본 경로를 설정하려면 Pages/_Host.cshtml 파일(Blazor Server) 또는 wwwroot/index.html 파일(Blazor WebAssembly)의 <head> 태그 요소 내 <base> 태그를 업데이트합니다.To set the app's base path, update the <base> tag within the <head> tag elements of the Pages/_Host.cshtml file (Blazor Server) or wwwroot/index.html file (Blazor WebAssembly). href 특성 값을 /{RELATIVE URL PATH}/(뒤에 슬래시가 필요함)로 설정합니다. 여기서 {RELATIVE URL PATH}는 앱의 전체 상대 URL 경로입니다.Set the href attribute value to /{RELATIVE URL PATH}/ (the trailing slash is required), where {RELATIVE URL PATH} is the app's full relative URL path.

루트가 아닌 상대 URL 경로를 가진 Blazor WebAssembly 앱(예: <base href="/CoolApp/">)의 경우, 앱은 로컬로 실행하면 해당 리소스를 찾지 못합니다.For an Blazor WebAssembly app with a non-root relative URL path (for example, <base href="/CoolApp/">), the app fails to find its resources when run locally. 로컬 개발 및 시험 중에 이 문제를 해결하려면 런타임에 <base> 태그의 href 값과 일치하는 기본 경로 인수를 제공할 수 있습니다.To overcome this problem during local development and testing, you can supply a path base argument that matches the href value of the <base> tag at runtime. 후행 슬래시를 포함하지 않습니다.Don't include a trailing slash. 앱을 로컬로 실행하는 경우 경로 기본 인수를 전달하려면 --pathbase 옵션을 통해 앱의 디렉터리에서 dotnet run 명령을 실행합니다.To pass the path base argument when running the app locally, execute the dotnet run command from the app's directory with the --pathbase option:

dotnet run --pathbase=/{RELATIVE URL PATH (no trailing slash)}

/CoolApp/의 상대 URL 경로를 사용하는 Blazor WebAssembly 앱의 경우(<base href="/CoolApp/">) 명령은 다음과 같습니다.For a Blazor WebAssembly app with a relative URL path of /CoolApp/ (<base href="/CoolApp/">), the command is:

dotnet run --pathbase=/CoolApp

Blazor WebAssembly 앱이 http://localhost:port/CoolApp에서 로컬로 응답합니다.The Blazor WebAssembly app responds locally at http://localhost:port/CoolApp.

Blazor Server MapFallbackToPage 구성Blazor Server MapFallbackToPage configuration

Startup.Configure에서 다음과 같은 MapFallbackToPage의 경로를 전달합니다.Pass the following path to MapFallbackToPage in Startup.Configure:

endpoints.MapFallbackToPage("/{RELATIVE PATH}/{**path:nonfile}");

자리 표시자 {RELATIVE PATH}는 서버에서 루트가 아닌 경로입니다.The placeholder {RELATIVE PATH} is the non-root path on the server. 예를 들어 앱에 대해 루트가 아닌 URL이 https://{HOST}:{PORT}/CoolApp/인 경우 CoolApp은 자리 표시자 세그먼트입니다.For example, CoolApp is the placeholder segment if the non-root URL to the app is https://{HOST}:{PORT}/CoolApp/):

endpoints.MapFallbackToPage("/CoolApp/{**path:nonfile}");

배포Deployment

배포 지침은 다음 항목을 참조하세요.For deployment guidance, see the following topics: