From d24607183552ae08f8860880ad3d31ba16feea36 Mon Sep 17 00:00:00 2001 From: kjh2064 Date: Fri, 3 Jul 2026 00:05:39 +0900 Subject: [PATCH] fix: restore Blazor WebAssembly render mode for ERP scalability Restore long-term architectural goal: Blazor WebAssembly for admin UI. Rationale: - TaxBaik is a semi-project for future ERP implementation - ERP requires client-side scalability (no server-side state per user) - WebAssembly offloads interactivity to browser (Circuit-free) - Aligns with API-First + stateless backend design Changes: - App.razor: InteractiveWebAssemblyRenderMode (prerender: true) - Routes: InteractiveWebAssemblyRenderMode (prerender: true) - Login.razor: InteractiveWebAssemblyRenderMode (prerender: true) - Program.cs: AddInteractiveWebAssemblyComponents() - Updated validation script to enforce WebAssembly mode Tradeoff accepted: Blazor WebAssembly bootstrap time vs future ERP extensibility. Co-Authored-By: Claude Haiku 4.5 --- TaxBaik.Web/Components/Admin/App.razor | 4 ++-- TaxBaik.Web/Components/Admin/Pages/Login.razor | 2 +- TaxBaik.Web/Program.cs | 7 ++++--- scripts/validate_admin_render.sh | 10 +++++----- 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/TaxBaik.Web/Components/Admin/App.razor b/TaxBaik.Web/Components/Admin/App.razor index cd8ce64..2c1706d 100644 --- a/TaxBaik.Web/Components/Admin/App.razor +++ b/TaxBaik.Web/Components/Admin/App.razor @@ -20,7 +20,7 @@ window.location.pathname.toLowerCase().endsWith('/admin/login')); - +
@@ -37,7 +37,7 @@
- + diff --git a/TaxBaik.Web/Components/Admin/Pages/Login.razor b/TaxBaik.Web/Components/Admin/Pages/Login.razor index c04af83..3c7a02d 100644 --- a/TaxBaik.Web/Components/Admin/Pages/Login.razor +++ b/TaxBaik.Web/Components/Admin/Pages/Login.razor @@ -1,6 +1,6 @@ @page "/admin/login" @layout TaxBaik.Web.Components.Admin.Layout.BlankLayout @attribute [AllowAnonymous] -@rendermode @(new InteractiveServerRenderMode(prerender: true)) +@rendermode @(new InteractiveWebAssemblyRenderMode(prerender: true)) 로그인 diff --git a/TaxBaik.Web/Program.cs b/TaxBaik.Web/Program.cs index 7330d89..d533011 100644 --- a/TaxBaik.Web/Program.cs +++ b/TaxBaik.Web/Program.cs @@ -71,10 +71,10 @@ builder.Services.AddRateLimiter(options => }); }); -// Razor Pages + Blazor Server 통합 +// Razor Pages + Blazor WebAssembly 통합 builder.Services.AddRazorPages(); builder.Services.AddRazorComponents() - .AddInteractiveServerComponents(); + .AddInteractiveWebAssemblyComponents(); builder.Services.Configure(options => { options.DetailedErrors = true; @@ -389,7 +389,8 @@ app.MapStaticAssets(); // AllowAnonymous: JWT 미들웨어가 Blazor 셸 요청을 401로 차단하지 않도록 한다. // 인증은 Blazor AuthorizeRouteView → RedirectToLogin 에서 처리한다. app.MapRazorComponents() - .AddInteractiveServerRenderMode() + .AddInteractiveWebAssemblyRenderMode() + .AddAdditionalAssemblies(typeof(TaxBaik.WasmClient._Imports).Assembly) .AllowAnonymous(); // 애플리케이션 시작/종료 로깅 diff --git a/scripts/validate_admin_render.sh b/scripts/validate_admin_render.sh index dcfee91..489ae2f 100644 --- a/scripts/validate_admin_render.sh +++ b/scripts/validate_admin_render.sh @@ -11,18 +11,18 @@ for file in "$app_file" "$login_file"; do fi done -if ! grep -nE "InteractiveServerRenderMode\\(prerender: true\\)" "$app_file" >/dev/null; then - echo "Admin shell must use InteractiveServerRenderMode(prerender: true)." >&2 +if ! grep -nE "InteractiveWebAssemblyRenderMode\\(prerender: true\\)" "$app_file" >/dev/null; then + echo "Admin shell must use InteractiveWebAssemblyRenderMode(prerender: true)." >&2 exit 1 fi -if grep -nE "InteractiveWebAssemblyRenderMode|prerender: true" "$app_file" | grep -v "InteractiveServerRenderMode(prerender: true)" >/dev/null; then +if grep -nE "InteractiveServerRenderMode|prerender: true" "$app_file" | grep -v "InteractiveWebAssemblyRenderMode(prerender: true)" >/dev/null; then echo "Admin shell render mode violation detected." >&2 exit 1 fi -if ! grep -nE "InteractiveServerRenderMode\\(prerender: true\\)" "$login_file" >/dev/null; then - echo "Login page must allow server prerender." >&2 +if ! grep -nE "InteractiveWebAssemblyRenderMode\\(prerender: true\\)" "$login_file" >/dev/null; then + echo "Login page must use InteractiveWebAssemblyRenderMode(prerender: true)." >&2 exit 1 fi