diff --git a/login-final-screenshot.png b/login-final-screenshot.png
new file mode 100644
index 0000000..da8a76f
Binary files /dev/null and b/login-final-screenshot.png differ
diff --git a/login-test.mjs b/login-test.mjs
new file mode 100644
index 0000000..e7bf5df
--- /dev/null
+++ b/login-test.mjs
@@ -0,0 +1,44 @@
+import { chromium } from '@playwright/test';
+
+(async () => {
+ const browser = await chromium.launch();
+ const page = await browser.newPage();
+
+ try {
+ await page.goto('http://localhost:5265/login');
+
+ await page.fill('input[name="username"]', 'admin');
+ await page.fill('input[name="password"]', 'admin');
+ await page.click('button[type="submit"]');
+
+ console.log('✓ Login form submitted');
+ console.log('✓ Waiting 3 seconds for dashboard redirect...');
+
+ await page.waitForNavigation({ waitUntil: 'load', timeout: 10000 });
+
+ const url = page.url();
+ const content = await page.content();
+
+ console.log(`✓ Navigation complete`);
+ console.log(` URL: ${url}`);
+
+ if (url.includes('/dashboard')) {
+ if (content.includes('Not Found')) {
+ console.log('✗ Dashboard URL but Not Found error');
+ } else if (content.includes('관리자 대시보드')) {
+ console.log('✓✓✓ SUCCESS: Dashboard fully loaded!');
+ } else {
+ console.log('✓ Dashboard page loaded (content check)');
+ }
+ } else {
+ console.log('⚠ Not on dashboard URL');
+ }
+
+ await page.screenshot({ path: './login-final-screenshot.png' });
+
+ } catch (e) {
+ console.error('Test error:', e.message.substring(0, 70));
+ }
+
+ await browser.close();
+})();
diff --git a/run-test.mjs b/run-test.mjs
new file mode 100644
index 0000000..c318d7f
--- /dev/null
+++ b/run-test.mjs
@@ -0,0 +1,43 @@
+import { chromium } from '@playwright/test';
+
+(async () => {
+ const browser = await chromium.launch();
+ const page = await browser.newPage();
+
+ try {
+ await page.goto('http://localhost:5265/login');
+ await page.fill('input[name="username"]', 'admin');
+ await page.fill('input[name="password"]', 'admin');
+ await page.click('button[type="submit"]');
+
+ console.log('Waiting for dashboard via auth-redirect...');
+
+ try {
+ await page.waitForNavigation({ waitUntil: 'load', timeout: 10000 });
+ } catch (e) {
+ // Expected - might timeout if already on dashboard
+ }
+
+ const url = page.url();
+ const content = await page.content();
+
+ console.log('Final URL: ' + url);
+
+ if (url.includes('/dashboard')) {
+ if (content.includes('관리자 대시보드')) {
+ console.log('✓✓✓ SUCCESS: Login complete and dashboard loaded!');
+ } else if (content.includes('Not Found')) {
+ console.log('✗ Not Found error');
+ }
+ } else {
+ console.log('URL is: ' + url);
+ }
+
+ await page.screenshot({ path: './test-result.png' });
+
+ } catch (e) {
+ console.error('Error:', e.message);
+ }
+
+ await browser.close();
+})();
diff --git a/src/dotnet/QuantEngine.Web/Client/Pages/Login.razor b/src/dotnet/QuantEngine.Web/Client/Pages/Login.razor
deleted file mode 100644
index ef381ed..0000000
--- a/src/dotnet/QuantEngine.Web/Client/Pages/Login.razor
+++ /dev/null
@@ -1,343 +0,0 @@
-@page "/login"
-@layout EmptyLayout
-@using Microsoft.AspNetCore.Components.Authorization
-@using QuantEngine.Web.Client.Infrastructure
-@inject HttpClient Http
-@inject NavigationManager Navigation
-@inject AuthenticationStateProvider AuthStateProvider
-
-
은퇴자산포트폴리오 우자 관리 시스템
-로그인 중입니다. 잠시만 기다려주세요...
+