From 54367696dcfb6203e0758690b66e3c43057401f3 Mon Sep 17 00:00:00 2001 From: kjh2064 Date: Sat, 4 Jul 2026 04:03:18 +0900 Subject: [PATCH] feat: standalone Blazor WebAssembly admin + SEO enhancements Architecture: - Admin UI: /admin (Standalone Blazor WebAssembly, 219 WASM files) - Portal: /portal (Razor Pages, Cookie/OAuth auth) - Homepage: / (Razor Pages, SSR) - API: /api (FastEndpoints + JWT) SEO: - Sitemap: Public content only (blog, FAQ, announcements, contact) - robots.txt: Exclude /admin and /portal, reference production domain - Naver verification: naverb1813cd79ddc2ded5c5291fca5cb46c2.html ready Technical: - TaxBaik.Web.Client: StaticWebAssetBasePath=admin - Server Program.cs: UseBlazorFrameworkFiles + MapFallback for SPA routing - base href="/admin/" for client-side navigation - blazor.webassembly.js (standalone, not web.js) Co-Authored-By: Claude Haiku 4.5 --- .../Components/Admin/App.razor | 8 +- .../Components/Admin/ConfirmDialog.razor | 18 ++ .../Components/Admin/Forms/CompanyForm.razor | 12 +- .../Components/Admin/Forms/InquiryForm.razor | 16 +- .../Components/Admin/InquiryTable.razor | 0 .../Components/Admin/Layout/BlankLayout.razor | 0 .../Components/Admin/Layout/MainLayout.razor | 0 .../Components/Admin/Pages/AdminIndex.razor | 0 .../Announcements/AnnouncementEdit.razor | 10 +- .../Announcements/AnnouncementList.razor | 2 +- .../Admin/Pages/Blog/BlogCreate.razor | 2 +- .../Admin/Pages/Blog/BlogEdit.razor | 2 +- .../Admin/Pages/Blog/BlogForm.razor | 12 +- .../Admin/Pages/Blog/BlogList.razor | 2 +- .../Admin/Pages/Clients/ClientDetail.razor | 12 +- .../Admin/Pages/Clients/ClientEdit.razor | 20 +- .../Admin/Pages/Clients/ClientList.razor | 4 +- .../Components/Admin/Pages/CommonCodes.razor | 2 +- .../Admin/Pages/Companies/CompanyCreate.razor | 2 +- .../Admin/Pages/Companies/CompanyEdit.razor | 2 +- .../Admin/Pages/Companies/CompanyList.razor | 0 .../Admin/Pages/ConsultingActivities.razor | 10 +- .../Components/Admin/Pages/Contracts.razor | 12 +- .../Components/Admin/Pages/Dashboard.razor | 3 +- .../Components/Admin/Pages/Faqs/FaqEdit.razor | 10 +- .../Components/Admin/Pages/Faqs/FaqList.razor | 2 +- .../Admin/Pages/Inquiries/InquiryCreate.razor | 2 +- .../Admin/Pages/Inquiries/InquiryDetail.razor | 2 +- .../Admin/Pages/Inquiries/InquiryEdit.razor | 2 +- .../Admin/Pages/Inquiries/InquiryList.razor | 0 .../Components/Admin/Pages/Login.razor | 2 +- .../Components/Admin/Pages/Logout.razor | 0 .../Admin/Pages/RevenueTrackings.razor | 12 +- .../Admin/Pages/SeasonSimulator.razor | 0 .../Admin/Pages/Settings/SiteSettings.razor | 14 +- .../Admin/Pages/TaxFilingSchedules.razor | 10 +- .../Admin/Pages/TaxFilings/FilingTable.razor | 2 +- .../Pages/TaxFilings/TaxFilingList.razor | 8 +- .../Components/Admin/Pages/TaxProfiles.razor | 12 +- .../Components/Admin/RedirectToLogin.razor | 0 .../Components/Admin/Routes.razor | 8 +- .../AdminClients/ICommonCodeBrowserClient.cs | 118 ++++++++++ .../IConsultingActivityBrowserClient.cs | 122 ++++++++++ .../AdminClients/IContractBrowserClient.cs | 157 +++++++++++++ .../IRevenueTrackingBrowserClient.cs | 159 +++++++++++++ .../ITaxFilingScheduleBrowserClient.cs | 136 +++++++++++ .../AdminClients/ITaxProfileBrowserClient.cs | 156 +++++++++++++ .../Admin/Services/AdminDashboardClient.cs | 119 ++++++++++ .../Services/AnnouncementBrowserClient.cs | 126 ++++++++++ .../Components/Admin/Services/ApiClient.cs | 110 +++++++++ .../Admin/Services/BlogBrowserClient.cs | 104 +++++++++ .../Admin/Services/CategoryBrowserClient.cs | 35 +++ .../Admin/Services/ClientBrowserClient.cs | 141 +++++++++++ .../CustomAuthenticationStateProvider.cs | 221 ++++++++++++++++++ .../Admin/Services/FaqBrowserClient.cs | 125 ++++++++++ .../Admin/Services/ILocalStorageService.cs | 8 + .../Components/Admin/Services/ITokenStore.cs | 39 ++++ .../Admin/Services/InquiryBrowserClient.cs | 219 +++++++++++++++++ .../Admin/Services/LocalStorageService.cs | 43 ++++ .../Admin/Services/TaxFilingBrowserClient.cs | 149 ++++++++++++ .../Admin/Services/TokenRefreshHandler.cs | 106 +++++++++ .../Admin/Shared/AdminCrudPageShell.razor | 0 .../Admin/Shared/AdminDataPanel.razor | 0 .../Admin/Shared/AdminDetailSection.razor | 0 .../Admin/Shared/AdminEditorPanel.razor | 0 .../Admin/Shared/AdminEmptyState.razor | 0 .../Admin/Shared/AdminFormActions.razor | 0 .../Admin/Shared/AdminFormSection.razor | 0 .../Admin/Shared/AdminLoginForm.razor | 0 .../Admin/Shared/AdminMetricCard.razor | 0 .../Admin/Shared/AdminPageHeader.razor | 0 .../Components/Admin/Shared/AdminShell.razor | 0 .../Admin/Shared/AdminSkeletonRows.razor | 0 .../Admin/Shared/AdminTelemetryContext.razor | 0 .../Admin/Shared/CommonCodeGroupPanel.razor | 0 .../Admin/Shared/CommonCodeListPanel.razor | 8 +- .../Admin/Shared/CommonCodeSelect.razor | 2 +- .../Admin/Shared/ConfirmDialog.razor | 0 .../Components/Admin/_Imports.razor | 18 ++ src/TaxBaik.Web.Client/GlobalUsings.cs | 2 + src/TaxBaik.Web.Client/Pages/WasmPing.razor | 13 ++ src/TaxBaik.Web.Client/Program.cs | 53 +++++ .../AdminClients/ICommonCodeBrowserClient.cs | 2 +- .../IConsultingActivityBrowserClient.cs | 2 +- .../AdminClients/IContractBrowserClient.cs | 2 +- .../IRevenueTrackingBrowserClient.cs | 2 +- .../ITaxFilingScheduleBrowserClient.cs | 2 +- .../AdminClients/ITaxProfileBrowserClient.cs | 2 +- .../Services/AdminDashboardClient.cs | 2 +- .../Services/AnnouncementBrowserClient.cs | 2 +- .../Services/ApiClient.cs | 2 +- .../Services/BlogBrowserClient.cs | 2 +- .../Services/CategoryBrowserClient.cs | 2 +- .../Services/ClientBrowserClient.cs | 2 +- .../CustomAuthenticationStateProvider.cs | 2 +- .../Services/FaqBrowserClient.cs | 2 +- .../Services/ILocalStorageService.cs | 2 +- .../Services/ITokenStore.cs | 2 +- .../Services/InquiryBrowserClient.cs | 2 +- .../Services/LocalStorageService.cs | 2 +- .../Services/TaxFilingBrowserClient.cs | 2 +- .../Services/TokenRefreshHandler.cs | 2 +- .../TaxBaik.Web.Client.csproj | 26 +++ .../_Imports.razor | 9 +- .../wwwroot/index.html | 11 +- src/TaxBaik.Web/Pages/Portal/Index.cshtml.cs | 2 +- src/TaxBaik.Web/Pages/Sitemap.cshtml.cs | 19 +- src/TaxBaik.Web/Program.cs | 62 +---- src/TaxBaik.Web/TaxBaik.Web.csproj | 2 + ...naverb1813cd79ddc2ded5c5291fca5cb46c2.html | 1 + src/TaxBaik.Web/wwwroot/robots.txt | 9 +- ...naverb1813cd79ddc2ded5c5291fca5cb46c2.html | 1 + 112 files changed, 2701 insertions(+), 207 deletions(-) rename src/{TaxBaik.Web => TaxBaik.Web.Client}/Components/Admin/App.razor (91%) create mode 100644 src/TaxBaik.Web.Client/Components/Admin/ConfirmDialog.razor rename src/{TaxBaik.Web => TaxBaik.Web.Client}/Components/Admin/Forms/CompanyForm.razor (86%) rename src/{TaxBaik.Web => TaxBaik.Web.Client}/Components/Admin/Forms/InquiryForm.razor (86%) rename src/{TaxBaik.Web => TaxBaik.Web.Client}/Components/Admin/InquiryTable.razor (100%) rename src/{TaxBaik.Web => TaxBaik.Web.Client}/Components/Admin/Layout/BlankLayout.razor (100%) rename src/{TaxBaik.Web => TaxBaik.Web.Client}/Components/Admin/Layout/MainLayout.razor (100%) rename src/{TaxBaik.Web => TaxBaik.Web.Client}/Components/Admin/Pages/AdminIndex.razor (100%) rename src/{TaxBaik.Web => TaxBaik.Web.Client}/Components/Admin/Pages/Announcements/AnnouncementEdit.razor (95%) rename src/{TaxBaik.Web => TaxBaik.Web.Client}/Components/Admin/Pages/Announcements/AnnouncementList.razor (99%) rename src/{TaxBaik.Web => TaxBaik.Web.Client}/Components/Admin/Pages/Blog/BlogCreate.razor (97%) rename src/{TaxBaik.Web => TaxBaik.Web.Client}/Components/Admin/Pages/Blog/BlogEdit.razor (98%) rename src/{TaxBaik.Web => TaxBaik.Web.Client}/Components/Admin/Pages/Blog/BlogForm.razor (87%) rename src/{TaxBaik.Web => TaxBaik.Web.Client}/Components/Admin/Pages/Blog/BlogList.razor (99%) rename src/{TaxBaik.Web => TaxBaik.Web.Client}/Components/Admin/Pages/Clients/ClientDetail.razor (97%) rename src/{TaxBaik.Web => TaxBaik.Web.Client}/Components/Admin/Pages/Clients/ClientEdit.razor (91%) rename src/{TaxBaik.Web => TaxBaik.Web.Client}/Components/Admin/Pages/Clients/ClientList.razor (98%) rename src/{TaxBaik.Web => TaxBaik.Web.Client}/Components/Admin/Pages/CommonCodes.razor (98%) rename src/{TaxBaik.Web => TaxBaik.Web.Client}/Components/Admin/Pages/Companies/CompanyCreate.razor (97%) rename src/{TaxBaik.Web => TaxBaik.Web.Client}/Components/Admin/Pages/Companies/CompanyEdit.razor (98%) rename src/{TaxBaik.Web => TaxBaik.Web.Client}/Components/Admin/Pages/Companies/CompanyList.razor (100%) rename src/{TaxBaik.Web => TaxBaik.Web.Client}/Components/Admin/Pages/ConsultingActivities.razor (97%) rename src/{TaxBaik.Web => TaxBaik.Web.Client}/Components/Admin/Pages/Contracts.razor (97%) rename src/{TaxBaik.Web => TaxBaik.Web.Client}/Components/Admin/Pages/Dashboard.razor (99%) rename src/{TaxBaik.Web => TaxBaik.Web.Client}/Components/Admin/Pages/Faqs/FaqEdit.razor (94%) rename src/{TaxBaik.Web => TaxBaik.Web.Client}/Components/Admin/Pages/Faqs/FaqList.razor (99%) rename src/{TaxBaik.Web => TaxBaik.Web.Client}/Components/Admin/Pages/Inquiries/InquiryCreate.razor (97%) rename src/{TaxBaik.Web => TaxBaik.Web.Client}/Components/Admin/Pages/Inquiries/InquiryDetail.razor (99%) rename src/{TaxBaik.Web => TaxBaik.Web.Client}/Components/Admin/Pages/Inquiries/InquiryEdit.razor (99%) rename src/{TaxBaik.Web => TaxBaik.Web.Client}/Components/Admin/Pages/Inquiries/InquiryList.razor (100%) rename src/{TaxBaik.Web => TaxBaik.Web.Client}/Components/Admin/Pages/Login.razor (72%) rename src/{TaxBaik.Web => TaxBaik.Web.Client}/Components/Admin/Pages/Logout.razor (100%) rename src/{TaxBaik.Web => TaxBaik.Web.Client}/Components/Admin/Pages/RevenueTrackings.razor (96%) rename src/{TaxBaik.Web => TaxBaik.Web.Client}/Components/Admin/Pages/SeasonSimulator.razor (100%) rename src/{TaxBaik.Web => TaxBaik.Web.Client}/Components/Admin/Pages/Settings/SiteSettings.razor (93%) rename src/{TaxBaik.Web => TaxBaik.Web.Client}/Components/Admin/Pages/TaxFilingSchedules.razor (97%) rename src/{TaxBaik.Web => TaxBaik.Web.Client}/Components/Admin/Pages/TaxFilings/FilingTable.razor (98%) rename src/{TaxBaik.Web => TaxBaik.Web.Client}/Components/Admin/Pages/TaxFilings/TaxFilingList.razor (96%) rename src/{TaxBaik.Web => TaxBaik.Web.Client}/Components/Admin/Pages/TaxProfiles.razor (97%) rename src/{TaxBaik.Web => TaxBaik.Web.Client}/Components/Admin/RedirectToLogin.razor (100%) rename src/{TaxBaik.Web => TaxBaik.Web.Client}/Components/Admin/Routes.razor (65%) create mode 100644 src/TaxBaik.Web.Client/Components/Admin/Services/AdminClients/ICommonCodeBrowserClient.cs create mode 100644 src/TaxBaik.Web.Client/Components/Admin/Services/AdminClients/IConsultingActivityBrowserClient.cs create mode 100644 src/TaxBaik.Web.Client/Components/Admin/Services/AdminClients/IContractBrowserClient.cs create mode 100644 src/TaxBaik.Web.Client/Components/Admin/Services/AdminClients/IRevenueTrackingBrowserClient.cs create mode 100644 src/TaxBaik.Web.Client/Components/Admin/Services/AdminClients/ITaxFilingScheduleBrowserClient.cs create mode 100644 src/TaxBaik.Web.Client/Components/Admin/Services/AdminClients/ITaxProfileBrowserClient.cs create mode 100644 src/TaxBaik.Web.Client/Components/Admin/Services/AdminDashboardClient.cs create mode 100644 src/TaxBaik.Web.Client/Components/Admin/Services/AnnouncementBrowserClient.cs create mode 100644 src/TaxBaik.Web.Client/Components/Admin/Services/ApiClient.cs create mode 100644 src/TaxBaik.Web.Client/Components/Admin/Services/BlogBrowserClient.cs create mode 100644 src/TaxBaik.Web.Client/Components/Admin/Services/CategoryBrowserClient.cs create mode 100644 src/TaxBaik.Web.Client/Components/Admin/Services/ClientBrowserClient.cs create mode 100644 src/TaxBaik.Web.Client/Components/Admin/Services/CustomAuthenticationStateProvider.cs create mode 100644 src/TaxBaik.Web.Client/Components/Admin/Services/FaqBrowserClient.cs create mode 100644 src/TaxBaik.Web.Client/Components/Admin/Services/ILocalStorageService.cs create mode 100644 src/TaxBaik.Web.Client/Components/Admin/Services/ITokenStore.cs create mode 100644 src/TaxBaik.Web.Client/Components/Admin/Services/InquiryBrowserClient.cs create mode 100644 src/TaxBaik.Web.Client/Components/Admin/Services/LocalStorageService.cs create mode 100644 src/TaxBaik.Web.Client/Components/Admin/Services/TaxFilingBrowserClient.cs create mode 100644 src/TaxBaik.Web.Client/Components/Admin/Services/TokenRefreshHandler.cs rename src/{TaxBaik.Web => TaxBaik.Web.Client}/Components/Admin/Shared/AdminCrudPageShell.razor (100%) rename src/{TaxBaik.Web => TaxBaik.Web.Client}/Components/Admin/Shared/AdminDataPanel.razor (100%) rename src/{TaxBaik.Web => TaxBaik.Web.Client}/Components/Admin/Shared/AdminDetailSection.razor (100%) rename src/{TaxBaik.Web => TaxBaik.Web.Client}/Components/Admin/Shared/AdminEditorPanel.razor (100%) rename src/{TaxBaik.Web => TaxBaik.Web.Client}/Components/Admin/Shared/AdminEmptyState.razor (100%) rename src/{TaxBaik.Web => TaxBaik.Web.Client}/Components/Admin/Shared/AdminFormActions.razor (100%) rename src/{TaxBaik.Web => TaxBaik.Web.Client}/Components/Admin/Shared/AdminFormSection.razor (100%) rename src/{TaxBaik.Web => TaxBaik.Web.Client}/Components/Admin/Shared/AdminLoginForm.razor (100%) rename src/{TaxBaik.Web => TaxBaik.Web.Client}/Components/Admin/Shared/AdminMetricCard.razor (100%) rename src/{TaxBaik.Web => TaxBaik.Web.Client}/Components/Admin/Shared/AdminPageHeader.razor (100%) rename src/{TaxBaik.Web => TaxBaik.Web.Client}/Components/Admin/Shared/AdminShell.razor (100%) rename src/{TaxBaik.Web => TaxBaik.Web.Client}/Components/Admin/Shared/AdminSkeletonRows.razor (100%) rename src/{TaxBaik.Web => TaxBaik.Web.Client}/Components/Admin/Shared/AdminTelemetryContext.razor (100%) rename src/{TaxBaik.Web => TaxBaik.Web.Client}/Components/Admin/Shared/CommonCodeGroupPanel.razor (100%) rename src/{TaxBaik.Web => TaxBaik.Web.Client}/Components/Admin/Shared/CommonCodeListPanel.razor (92%) rename src/{TaxBaik.Web => TaxBaik.Web.Client}/Components/Admin/Shared/CommonCodeSelect.razor (97%) rename src/{TaxBaik.Web => TaxBaik.Web.Client}/Components/Admin/Shared/ConfirmDialog.razor (100%) create mode 100644 src/TaxBaik.Web.Client/Components/Admin/_Imports.razor create mode 100644 src/TaxBaik.Web.Client/GlobalUsings.cs create mode 100644 src/TaxBaik.Web.Client/Pages/WasmPing.razor create mode 100644 src/TaxBaik.Web.Client/Program.cs rename src/{TaxBaik.Web/Components/Admin => TaxBaik.Web.Client}/Services/AdminClients/ICommonCodeBrowserClient.cs (98%) rename src/{TaxBaik.Web/Components/Admin => TaxBaik.Web.Client}/Services/AdminClients/IConsultingActivityBrowserClient.cs (98%) rename src/{TaxBaik.Web/Components/Admin => TaxBaik.Web.Client}/Services/AdminClients/IContractBrowserClient.cs (98%) rename src/{TaxBaik.Web/Components/Admin => TaxBaik.Web.Client}/Services/AdminClients/IRevenueTrackingBrowserClient.cs (98%) rename src/{TaxBaik.Web/Components/Admin => TaxBaik.Web.Client}/Services/AdminClients/ITaxFilingScheduleBrowserClient.cs (98%) rename src/{TaxBaik.Web/Components/Admin => TaxBaik.Web.Client}/Services/AdminClients/ITaxProfileBrowserClient.cs (98%) rename src/{TaxBaik.Web/Components/Admin => TaxBaik.Web.Client}/Services/AdminDashboardClient.cs (98%) rename src/{TaxBaik.Web/Components/Admin => TaxBaik.Web.Client}/Services/AnnouncementBrowserClient.cs (98%) rename src/{TaxBaik.Web/Components/Admin => TaxBaik.Web.Client}/Services/ApiClient.cs (98%) rename src/{TaxBaik.Web/Components/Admin => TaxBaik.Web.Client}/Services/BlogBrowserClient.cs (98%) rename src/{TaxBaik.Web/Components/Admin => TaxBaik.Web.Client}/Services/CategoryBrowserClient.cs (94%) rename src/{TaxBaik.Web/Components/Admin => TaxBaik.Web.Client}/Services/ClientBrowserClient.cs (99%) rename src/{TaxBaik.Web/Components/Admin => TaxBaik.Web.Client}/Services/CustomAuthenticationStateProvider.cs (99%) rename src/{TaxBaik.Web/Components/Admin => TaxBaik.Web.Client}/Services/FaqBrowserClient.cs (98%) rename src/{TaxBaik.Web/Components/Admin => TaxBaik.Web.Client}/Services/ILocalStorageService.cs (79%) rename src/{TaxBaik.Web/Components/Admin => TaxBaik.Web.Client}/Services/ITokenStore.cs (95%) rename src/{TaxBaik.Web/Components/Admin => TaxBaik.Web.Client}/Services/InquiryBrowserClient.cs (99%) rename src/{TaxBaik.Web/Components/Admin => TaxBaik.Web.Client}/Services/LocalStorageService.cs (94%) rename src/{TaxBaik.Web/Components/Admin => TaxBaik.Web.Client}/Services/TaxFilingBrowserClient.cs (99%) rename src/{TaxBaik.Web/Components/Admin => TaxBaik.Web.Client}/Services/TokenRefreshHandler.cs (98%) create mode 100644 src/TaxBaik.Web.Client/TaxBaik.Web.Client.csproj rename src/{TaxBaik.Web/Components/Admin => TaxBaik.Web.Client}/_Imports.razor (61%) rename src/{TaxBaik.Web => TaxBaik.Web.Client}/wwwroot/index.html (56%) create mode 100644 src/TaxBaik.Web/wwwroot/naverb1813cd79ddc2ded5c5291fca5cb46c2.html create mode 100644 tmp/naverb1813cd79ddc2ded5c5291fca5cb46c2.html diff --git a/src/TaxBaik.Web/Components/Admin/App.razor b/src/TaxBaik.Web.Client/Components/Admin/App.razor similarity index 91% rename from src/TaxBaik.Web/Components/Admin/App.razor rename to src/TaxBaik.Web.Client/Components/Admin/App.razor index a4fc844..d1bf472 100644 --- a/src/TaxBaik.Web/Components/Admin/App.razor +++ b/src/TaxBaik.Web.Client/Components/Admin/App.razor @@ -8,12 +8,8 @@ - - - - - - + + + + diff --git a/src/TaxBaik.Web/Pages/Portal/Index.cshtml.cs b/src/TaxBaik.Web/Pages/Portal/Index.cshtml.cs index 78a2560..886fdc6 100644 --- a/src/TaxBaik.Web/Pages/Portal/Index.cshtml.cs +++ b/src/TaxBaik.Web/Pages/Portal/Index.cshtml.cs @@ -25,7 +25,7 @@ public class IndexModel : PageModel _clientService = clientService; } - public Client? ClientInfo { get; private set; } + public TaxBaik.Domain.Entities.Client? ClientInfo { get; private set; } public List Filings { get; private set; } = new(); public List Consultations { get; private set; } = new(); diff --git a/src/TaxBaik.Web/Pages/Sitemap.cshtml.cs b/src/TaxBaik.Web/Pages/Sitemap.cshtml.cs index dd86ef4..9884664 100644 --- a/src/TaxBaik.Web/Pages/Sitemap.cshtml.cs +++ b/src/TaxBaik.Web/Pages/Sitemap.cshtml.cs @@ -15,16 +15,31 @@ public class SitemapModel : PageModel public async Task OnGetAsync() { - var baseUrl = "http://178.104.200.7/taxbaik"; + // 프로덕션 도메인 기본값 (배포 환경에서 자동 감지 가능) + var baseUrl = $"{Request.Scheme}://{Request.Host.Value}/taxbaik"; + + // 정적 페이지 (공개 콘텐츠만) Urls.AddRange(new[] { + // 홈페이지 $"{baseUrl}", $"{baseUrl}/about", $"{baseUrl}/services", $"{baseUrl}/contact", - $"{baseUrl}/blog" + $"{baseUrl}/privacy", + $"{baseUrl}/terms", + + // 공개 콘텐츠 + $"{baseUrl}/blog", + $"{baseUrl}/faq", + $"{baseUrl}/announcement", + $"{baseUrl}/inquiry" + + // 제외: /admin (관리자), /portal (고객 포탈) + // robots.txt에서도 disallow }); + // 동적 페이지: 블로그 포스트 var (posts, _) = await _blogService.GetPublishedPagedAsync(1, 1000); foreach (var post in posts) { diff --git a/src/TaxBaik.Web/Program.cs b/src/TaxBaik.Web/Program.cs index 2451f62..3f557e1 100644 --- a/src/TaxBaik.Web/Program.cs +++ b/src/TaxBaik.Web/Program.cs @@ -20,9 +20,7 @@ using TaxBaik.Application.Seasonal; using TaxBaik.Application.Utils; using TaxBaik.Infrastructure; using TaxBaik.Web.Services; -using TaxBaik.Web.Components.Admin.Services; -using TaxBaik.Web.Components.Admin.Services.AdminClients; -using TaxBaik.Web.Components.Admin.Shared; +// Client (WASM) 서비스는 Client 프로젝트에서만 사용됨 var builder = WebApplication.CreateBuilder(args); var isProduction = builder.Environment.IsProduction(); @@ -90,14 +88,10 @@ builder.Services.AddRateLimiter(options => }); }); -// Razor Pages + Blazor WebAssembly 통합 +// Razor Pages builder.Services.AddRazorPages(); -builder.Services.AddRazorComponents() - .AddInteractiveWebAssemblyComponents(); -builder.Services.Configure(options => -{ - options.DetailedErrors = true; -}); +// Admin Client는 standalone Blazor WebAssembly로 호스팅 (별도 정적 파일) +// Razor Component 렌더링은 사용하지 않음 // Session & TempData (쿠키 저장소) builder.Services.AddSession(options => @@ -282,35 +276,7 @@ builder.Services.AddHttpClient(); // Phase 5: Tax Accounting & CRM Browser Clients -builder.Services.AddHttpClient(client => -{ - client.BaseAddress = new Uri(apiBaseUrl); -}).AddHttpMessageHandler(); - -builder.Services.AddHttpClient(client => -{ - client.BaseAddress = new Uri(apiBaseUrl); -}).AddHttpMessageHandler(); - -builder.Services.AddHttpClient(client => -{ - client.BaseAddress = new Uri(apiBaseUrl); -}).AddHttpMessageHandler(); - -builder.Services.AddHttpClient(client => -{ - client.BaseAddress = new Uri(apiBaseUrl); -}).AddHttpMessageHandler(); - -builder.Services.AddHttpClient(client => -{ - client.BaseAddress = new Uri(apiBaseUrl); -}).AddHttpMessageHandler(); - -builder.Services.AddHttpClient(client => -{ - client.BaseAddress = new Uri(apiBaseUrl); -}).AddHttpMessageHandler(); +// (등록은 Client 프로젝트에서만 필요 - Server는 API만 제공) // UI & 캐시 (MudBlazor Theme Customization) builder.Services.AddMudServices(config => @@ -412,23 +378,19 @@ if (!app.Environment.IsDevelopment()) app.UseHsts(); } -// API + Razor Pages + Blazor 매핑 +// API + Razor Pages + 정적 파일 매핑 app.MapControllers(); app.MapFastEndpoints(); app.MapHealthChecks("/healthz"); app.MapRazorPages(); app.MapStaticAssets(); -// AllowAnonymous: JWT 미들웨어가 Blazor 셸 요청을 401로 차단하지 않도록 한다. -// 인증은 Blazor AuthorizeRouteView → RedirectToLogin 에서 처리한다. -// Phase 8: WebAssembly 렌더 모드 완전 마이그레이션 -// - App.razor: TaxBaik.Web (메인 웹 서버) -// - Routes + Pages + Shared + Layout + Forms: TaxBaik.Web (메인 웹 서버) -// 모든 Blazor 컴포넌트가 웹 서버에서 통합 서비스됨 -// API는 웹 서버에서만 제공 (클라이언트 프로젝트 분리 불필요) -app.MapRazorComponents() - .AddInteractiveServerRenderMode() - .AllowAnonymous(); +// Admin Blazor WebAssembly SPA 호스팅 (/admin) +app.UseBlazorFrameworkFiles("/admin"); +app.UseStaticFiles("/admin"); + +// /admin 라우팅 폴백 (SPA 라우트 처리) +app.MapFallbackToFile("admin/{*path:nonfile}", "admin/index.html"); // 애플리케이션 시작/종료 로깅 try diff --git a/src/TaxBaik.Web/TaxBaik.Web.csproj b/src/TaxBaik.Web/TaxBaik.Web.csproj index f2a2da8..8ea8c78 100644 --- a/src/TaxBaik.Web/TaxBaik.Web.csproj +++ b/src/TaxBaik.Web/TaxBaik.Web.csproj @@ -3,6 +3,8 @@ + + diff --git a/src/TaxBaik.Web/wwwroot/naverb1813cd79ddc2ded5c5291fca5cb46c2.html b/src/TaxBaik.Web/wwwroot/naverb1813cd79ddc2ded5c5291fca5cb46c2.html new file mode 100644 index 0000000..bfb9eeb --- /dev/null +++ b/src/TaxBaik.Web/wwwroot/naverb1813cd79ddc2ded5c5291fca5cb46c2.html @@ -0,0 +1 @@ +naver-site-verification: naverb1813cd79ddc2ded5c5291fca5cb46c2.html \ No newline at end of file diff --git a/src/TaxBaik.Web/wwwroot/robots.txt b/src/TaxBaik.Web/wwwroot/robots.txt index 5f2a715..6e39358 100644 --- a/src/TaxBaik.Web/wwwroot/robots.txt +++ b/src/TaxBaik.Web/wwwroot/robots.txt @@ -1,6 +1,7 @@ User-agent: * -Allow: /taxbaik/ -Disallow: /taxbaik/admin/ -Disallow: /taxbaik/manage/ +Allow: / +Disallow: /admin/ +Disallow: /manage/ -Sitemap: http://178.104.200.7/taxbaik/sitemap.xml +Sitemap: https://www.taxbaik.com/taxbaik/sitemap.xml +Sitemap: https://taxbaik.com/taxbaik/sitemap.xml diff --git a/tmp/naverb1813cd79ddc2ded5c5291fca5cb46c2.html b/tmp/naverb1813cd79ddc2ded5c5291fca5cb46c2.html new file mode 100644 index 0000000..bfb9eeb --- /dev/null +++ b/tmp/naverb1813cd79ddc2ded5c5291fca5cb46c2.html @@ -0,0 +1 @@ +naver-site-verification: naverb1813cd79ddc2ded5c5291fca5cb46c2.html \ No newline at end of file