Blazor WebAssembly 호스팅 모델
이 호스팅 모델을 사용하면 애플리케이션이 WebAssembly의 브라우저에서 직접 실행됩니다. 따라서 응용 프로그램에 필요한 모든 것, 즉 컴파일된 응용 프로그램, 종속성 및 .NET 런타임은 서버에서 클라이언트 브라우저로 다운로드됩니다. Blazor WebAssembly 앱은 서버에 연결하지 않고 클라이언트에서 완전히 실행할 수 있습니다. 또는 웹 API 호출 또는 SignalR을 사용하여 서버와 상호 작용하도록 선택적으로 구성할 수 있습니다.
Blazor WebAssembly 호스팅 모델의 이점:
- Blazor WebAssembly 앱은 전적으로 클라이언트 컴퓨터에서 실행할 수 있습니다. 따라서 애플리케이션을 다운로드한 후에는 서버에 연결할 필요가 없습니다. 이는 서버가 24X7 가동될 필요가 없음을 의미합니다.
- 작업은 서버에서 클라이언트로 오프로드됩니다. 사용 중인 클라이언트 리소스 및 기능입니다.
- 애플리케이션을 호스팅하기 위해 완전한 ASP.NET Core 웹 서버가 필요하지 않습니다. 클라이언트 브라우저에 응용 프로그램을 전달할 수 있는 서버가 어딘가에 있으면 됩니다. 즉, 인터넷 어딘가, 클라우드, Azure의 정적 웹 사이트 또는 CDN Content Delivery Network의 자체 서버에서 애플리케이션을 호스팅할 수 있습니다.
Blazor WebAssembly 호스팅의 단점:
- 첫 번째 요청은 일반적으로 전체 앱으로 더 오래 걸리며 종속성 및 .NET 런타임을 클라이언트 브라우저에 다운로드해야 합니다. 평소보다 오래 걸리는 것은 첫 번째 요청일 뿐입니다. 동일한 클라이언트가 나중에 애플리케이션을 방문하면 브라우저가 파일을 캐시하기 때문에 일반적으로 빠르게 시작됩니다.
- 앱은 전적으로 클라이언트 브라우저에서 실행되므로 브라우저의 기능으로 제한됩니다.
- 애플리케이션의 특성에 따라 유능한 클라이언트 하드웨어 및 소프트웨어가 필요합니다. 예를 들어 소프트웨어 관점에서 볼 때 최소한 WebAssembly를 지원하는 브라우저가 필요합니다.
Blazor 서버 호스팅 모델
이 호스팅 모델을 사용하면 애플리케이션이 서버에서 실행됩니다. 클라이언트와 서버 간에 SignalR 연결이 설정됩니다. 예를 들어 버튼 클릭과 같은 이벤트가 클라이언트에서 발생하면 이벤트에 대한 정보가 SignalR 연결을 통해 서버로 전송됩니다. 서버는 이벤트를 처리하고 생성된 HTML에 대해 diff(difference)가 계산됩니다. 전체 HTML은 클라이언트로 다시 전송되지 않으며, SignalR 연결을 통해 클라이언트로 전송되는 diff만 있습니다. 그런 다음 브라우저는 UI를 업데이트합니다. UI를 업데이트하기 위해 diff만 적용되기 때문에 애플리케이션이 사용자에게 더 빠르고 반응이 좋게 느껴집니다.
Blazor Server 호스팅 모델의 이점:
- 다운로드 크기가 Blazor WebAssembly 앱보다 훨씬 작기 때문에 앱이 훨씬 빠르게 로드됩니다.
- 앱은 서버에서 실행되므로 .NET Core 호환 API 사용을 포함하여 서버 기능을 최대한 활용할 수 있습니다.
- 클라이언트가 앱을 사용하는 데 필요한 모든 것은 브라우저입니다. WebAssembly를 지원하지 않는 브라우저도 사용할 수 있습니다.
- 앱의 .NET/C# 코드가 클라이언트에 제공되지 않기 때문에 더 안전합니다.
Blazor 서버 호스팅의 단점:
- 애플리케이션을 호스팅하려면 본격적인 ASP.NET Core 서버가 필요합니다. CDN에서 앱을 제공하는 것과 같은 서버리스 배포 시나리오는 불가능합니다.
- 서버에 대한 활성 연결은 항상 필요합니다. 즉, 서버를 24X7 가동 상태로 유지해야 합니다. 서버가 다운되면 응용 프로그램이 작동을 멈춥니다.
- 모든 사용자 상호 작용에는 서버 왕복이 포함되므로 일반적으로 Blazor WebAssembly 호스팅과 비교할 때 더 높은 대기 시간이 존재합니다.
- 서버가 여러 클라이언트 연결을 관리하고 클라이언트 상태를 처리해야 하므로 사용자가 많은 앱의 경우 특히 확장성이 어려울 수 있습니다. 그러나 Blazor Server 앱과 함께 Azure SignalR Service를 사용하면 이 확장성 문제를 극복할 수 있습니다. 이 서비스를 사용하면 많은 수의 동시 SignalR 연결을 지원하여 Blazor Server 앱이 정말 잘 확장될 수 있습니다.