fix: restore Blazor WebAssembly render mode for ERP scalability
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:
2026-07-03 00:05:39 +09:00
parent ba981e7332
commit d246071835
4 changed files with 12 additions and 11 deletions
+2 -2
View File
@@ -20,7 +20,7 @@
window.location.pathname.toLowerCase().endsWith('/admin/login'));
</script>
<link rel="stylesheet" href="css/admin.css" />
<component type="typeof(HeadOutlet)" render-mode="InteractiveServer" />
<component type="typeof(HeadOutlet)" render-mode="InteractiveWebAssembly" />
</head>
<body>
<div id="components-reconnect-modal" class="admin-reconnect-modal">
@@ -37,7 +37,7 @@
</div>
</div>
<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/js/admin-session.js"></script>
<script src="/taxbaik/_framework/blazor.web.js"></script>
@@ -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))
<PageTitle>로그인</PageTitle>
<AdminLoginForm />
+4 -3
View File
@@ -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<Microsoft.AspNetCore.Components.Server.CircuitOptions>(options =>
{
options.DetailedErrors = true;
@@ -389,7 +389,8 @@ app.MapStaticAssets();
// AllowAnonymous: JWT 미들웨어가 Blazor 셸 요청을 401로 차단하지 않도록 한다.
// 인증은 Blazor AuthorizeRouteView → RedirectToLogin 에서 처리한다.
app.MapRazorComponents<TaxBaik.Web.Components.Admin.App>()
.AddInteractiveServerRenderMode()
.AddInteractiveWebAssemblyRenderMode()
.AddAdditionalAssemblies(typeof(TaxBaik.WasmClient._Imports).Assembly)
.AllowAnonymous();
// 애플리케이션 시작/종료 로깅
+5 -5
View File
@@ -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