diff --git a/frontend/src/routes/(app)/+layout.svelte b/frontend/src/routes/(app)/+layout.svelte
index 3f3165a..aeaa256 100644
--- a/frontend/src/routes/(app)/+layout.svelte
+++ b/frontend/src/routes/(app)/+layout.svelte
@@ -2,16 +2,21 @@
import { page } from '$app/state'
import { goto } from '$app/navigation'
- let { children } = $props()
+ let { children, data } = $props()
- const navItems = [
+ const publicNav = [
{ href: '/', label: '시세' },
{ href: '/theme', label: '테마' },
{ href: '/kospi200', label: '코스피200' },
+ ]
+
+ const protectedNav = [
{ href: '/asset', label: '자산' },
{ href: '/autotrade', label: '자동매매' },
]
+ let loggedIn = $derived(data.loggedIn)
+
async function logout() {
await fetch('/logout', { method: 'POST', credentials: 'include' })
goto('/login')
@@ -33,7 +38,7 @@
-
-
+
+ {#if loggedIn}
+
+ {:else}
+
+ 로그인
+
+ {/if}
diff --git a/frontend/src/routes/(app)/+layout.ts b/frontend/src/routes/(app)/+layout.ts
index 6044c91..351aa0a 100644
--- a/frontend/src/routes/(app)/+layout.ts
+++ b/frontend/src/routes/(app)/+layout.ts
@@ -1,13 +1,9 @@
-import { redirect } from '@sveltejs/kit'
-
-// 인증 가드: 세션 유효하지 않으면 /login으로 리다이렉트
+// 로그인 상태 확인 (리다이렉트하지 않음 — 공개 페이지도 접근 가능)
export async function load({ fetch }) {
try {
const res = await fetch('/api/auth/check', { credentials: 'include' })
- if (!res.ok) throw redirect(302, '/login')
- } catch (e) {
- // redirect 재throw
- if (e && typeof e === 'object' && 'status' in e) throw e
- throw redirect(302, '/login')
+ return { loggedIn: res.ok }
+ } catch {
+ return { loggedIn: false }
}
}
diff --git a/frontend/src/routes/(app)/asset/+page.ts b/frontend/src/routes/(app)/asset/+page.ts
new file mode 100644
index 0000000..7ecc6f8
--- /dev/null
+++ b/frontend/src/routes/(app)/asset/+page.ts
@@ -0,0 +1,7 @@
+import { redirect } from '@sveltejs/kit'
+
+// 자산 페이지: 로그인 필요
+export async function load({ parent }) {
+ const { loggedIn } = await parent()
+ if (!loggedIn) throw redirect(302, '/login?next=/asset')
+}
diff --git a/frontend/src/routes/(app)/autotrade/+page.ts b/frontend/src/routes/(app)/autotrade/+page.ts
new file mode 100644
index 0000000..44d4051
--- /dev/null
+++ b/frontend/src/routes/(app)/autotrade/+page.ts
@@ -0,0 +1,7 @@
+import { redirect } from '@sveltejs/kit'
+
+// 자동매매 페이지: 로그인 필요
+export async function load({ parent }) {
+ const { loggedIn } = await parent()
+ if (!loggedIn) throw redirect(302, '/login?next=/autotrade')
+}
diff --git a/middleware/auth.go b/middleware/auth.go
index b735c93..22802ee 100644
--- a/middleware/auth.go
+++ b/middleware/auth.go
@@ -42,6 +42,7 @@ var publicPaths = []string{
"/api/news",
"/api/disclosure",
"/api/auth/check",
+ "/api/watchlist",
"/ws",
}