fix: restore Blazor WebAssembly render mode for ERP scalability
TaxBaik CI/CD / build-and-deploy (push) Successful in 2m15s
TaxBaik CI/CD / build-and-deploy (push) Successful in 2m15s
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 <noreply@anthropic.com>
This commit is contained in:
@@ -20,7 +20,7 @@
|
|||||||
window.location.pathname.toLowerCase().endsWith('/admin/login'));
|
window.location.pathname.toLowerCase().endsWith('/admin/login'));
|
||||||
</script>
|
</script>
|
||||||
<link rel="stylesheet" href="css/admin.css" />
|
<link rel="stylesheet" href="css/admin.css" />
|
||||||
<component type="typeof(HeadOutlet)" render-mode="InteractiveServer" />
|
<component type="typeof(HeadOutlet)" render-mode="InteractiveWebAssembly" />
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="components-reconnect-modal" class="admin-reconnect-modal">
|
<div id="components-reconnect-modal" class="admin-reconnect-modal">
|
||||||
@@ -37,7 +37,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<MudThemeProvider @bind-IsDarkMode="isDarkMode" Theme="mudTheme" />
|
<MudThemeProvider @bind-IsDarkMode="isDarkMode" Theme="mudTheme" />
|
||||||
<Routes @rendermode="new InteractiveServerRenderMode(prerender: true)" />
|
<Routes @rendermode="new InteractiveWebAssemblyRenderMode(prerender: true)" />
|
||||||
<script src="/taxbaik/_content/MudBlazor/MudBlazor.min.js"></script>
|
<script src="/taxbaik/_content/MudBlazor/MudBlazor.min.js"></script>
|
||||||
<script src="/taxbaik/js/admin-session.js"></script>
|
<script src="/taxbaik/js/admin-session.js"></script>
|
||||||
<script src="/taxbaik/_framework/blazor.web.js"></script>
|
<script src="/taxbaik/_framework/blazor.web.js"></script>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
@page "/admin/login"
|
@page "/admin/login"
|
||||||
@layout TaxBaik.Web.Components.Admin.Layout.BlankLayout
|
@layout TaxBaik.Web.Components.Admin.Layout.BlankLayout
|
||||||
@attribute [AllowAnonymous]
|
@attribute [AllowAnonymous]
|
||||||
@rendermode @(new InteractiveServerRenderMode(prerender: true))
|
@rendermode @(new InteractiveWebAssemblyRenderMode(prerender: true))
|
||||||
<PageTitle>로그인</PageTitle>
|
<PageTitle>로그인</PageTitle>
|
||||||
<AdminLoginForm />
|
<AdminLoginForm />
|
||||||
|
|||||||
@@ -71,10 +71,10 @@ builder.Services.AddRateLimiter(options =>
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
// Razor Pages + Blazor Server 통합
|
// Razor Pages + Blazor WebAssembly 통합
|
||||||
builder.Services.AddRazorPages();
|
builder.Services.AddRazorPages();
|
||||||
builder.Services.AddRazorComponents()
|
builder.Services.AddRazorComponents()
|
||||||
.AddInteractiveServerComponents();
|
.AddInteractiveWebAssemblyComponents();
|
||||||
builder.Services.Configure<Microsoft.AspNetCore.Components.Server.CircuitOptions>(options =>
|
builder.Services.Configure<Microsoft.AspNetCore.Components.Server.CircuitOptions>(options =>
|
||||||
{
|
{
|
||||||
options.DetailedErrors = true;
|
options.DetailedErrors = true;
|
||||||
@@ -389,7 +389,8 @@ app.MapStaticAssets();
|
|||||||
// AllowAnonymous: JWT 미들웨어가 Blazor 셸 요청을 401로 차단하지 않도록 한다.
|
// AllowAnonymous: JWT 미들웨어가 Blazor 셸 요청을 401로 차단하지 않도록 한다.
|
||||||
// 인증은 Blazor AuthorizeRouteView → RedirectToLogin 에서 처리한다.
|
// 인증은 Blazor AuthorizeRouteView → RedirectToLogin 에서 처리한다.
|
||||||
app.MapRazorComponents<TaxBaik.Web.Components.Admin.App>()
|
app.MapRazorComponents<TaxBaik.Web.Components.Admin.App>()
|
||||||
.AddInteractiveServerRenderMode()
|
.AddInteractiveWebAssemblyRenderMode()
|
||||||
|
.AddAdditionalAssemblies(typeof(TaxBaik.WasmClient._Imports).Assembly)
|
||||||
.AllowAnonymous();
|
.AllowAnonymous();
|
||||||
|
|
||||||
// 애플리케이션 시작/종료 로깅
|
// 애플리케이션 시작/종료 로깅
|
||||||
|
|||||||
@@ -11,18 +11,18 @@ for file in "$app_file" "$login_file"; do
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
if ! grep -nE "InteractiveServerRenderMode\\(prerender: true\\)" "$app_file" >/dev/null; then
|
if ! grep -nE "InteractiveWebAssemblyRenderMode\\(prerender: true\\)" "$app_file" >/dev/null; then
|
||||||
echo "Admin shell must use InteractiveServerRenderMode(prerender: true)." >&2
|
echo "Admin shell must use InteractiveWebAssemblyRenderMode(prerender: true)." >&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
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
|
echo "Admin shell render mode violation detected." >&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ! grep -nE "InteractiveServerRenderMode\\(prerender: true\\)" "$login_file" >/dev/null; then
|
if ! grep -nE "InteractiveWebAssemblyRenderMode\\(prerender: true\\)" "$login_file" >/dev/null; then
|
||||||
echo "Login page must allow server prerender." >&2
|
echo "Login page must use InteractiveWebAssemblyRenderMode(prerender: true)." >&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user