feat: /dev-test/design 라우트 추가
크롬 없는 공개 레이아웃 (public)/(empty)를 신설하고 그 아래에 마운트한다 — (public)/layout.tsx의 AuthCard는 로그인 화면용 껍데기라 이 페이지엔 맞지 않는다. 화면 구현은 @fox/dev-test가 전부 소유하므로 이 라우트는 마운트와 프로덕션 차단만 담당한다. proxy의 개발 전용 공개 경로도 새 경로로 옮긴다 — 프로덕션에서는 페이지가 notFound()를 내고 이 목록도 평가되지 않아 fail-closed가 유지된다. Co-Authored-By: Claude Opus 5
@d262cd6163aa2000ba93642ac73f61968e6eff37
+++ app/(public)/(empty)/dev-test/design/page.tsx
... | ... | @@ -0,0 +1,21 @@ |
| 1 | +import { notFound } from "next/navigation"; | |
| 2 | +import { DevTestPage } from "@fox/dev-test"; | |
| 3 | + | |
| 4 | +export const metadata = { | |
| 5 | + title: "@fox 디자인 시스템 테스트", | |
| 6 | +}; | |
| 7 | + | |
| 8 | +/** | |
| 9 | + * 디자인 시스템 테스트 페이지 — 개발 전용. | |
| 10 | + * | |
| 11 | + * 화면 구현은 전부 `@fox/dev-test`가 소유하고 이 라우트는 마운트만 한다. 그래야 `@fox` | |
| 12 | + * 폴더를 다른 프로젝트로 복사할 때 테스트 하니스가 함께 따라간다(라우트 한 줄만 추가하면 | |
| 13 | + * 된다). 프로덕션 차단은 서버에서 판정해야 하므로 이 파일은 Server Component로 둔다. | |
| 14 | + */ | |
| 15 | +export default function DesignSystemTestPage() { | |
| 16 | + if (process.env.NODE_ENV === "production") { | |
| 17 | + notFound(); | |
| 18 | + } | |
| 19 | + | |
| 20 | + return <DevTestPage />; | |
| 21 | +} |
+++ app/(public)/(empty)/layout.tsx
... | ... | @@ -0,0 +1,12 @@ |
| 1 | +// Empty 레이아웃 — 크롬(AuthCard·헤더·사이드바) 없이 전체 화면을 그대로 쓰는 공개 화면 | |
| 2 | +// 진입점. 상위 `(public)/layout.tsx`가 로그인 화면용 AuthCard를 씌우므로, 그 껍데기가 | |
| 3 | +// 필요 없는 화면은 이 그룹 아래에 둔다. | |
| 4 | +// | |
| 5 | +// 레이아웃이 스타일을 갖지 않는 것이 요점이다 — 화면이 자기 셸을 온전히 소유한다. | |
| 6 | +export default function Layout({ | |
| 7 | + children, | |
| 8 | +}: Readonly<{ | |
| 9 | + children: React.ReactNode; | |
| 10 | +}>) { | |
| 11 | + return children; | |
| 12 | +} |
--- proxy.ts
+++ proxy.ts
... | ... | @@ -17,14 +17,15 @@ |
| 17 | 17 |
const PUBLIC_PATHS = ['/login']; |
| 18 | 18 |
|
| 19 | 19 |
/** |
| 20 |
- * 개발 환경에서만 인증을 면제하는 경로. 디자인 시스템 카탈로그(`/design`)는 개발 전용 |
|
| 21 |
- * 라우트이며 프로덕션에서는 페이지 자체가 `notFound()`로 404를 낸다 — 즉 여기서 열어도 |
|
| 22 |
- * 프로덕션 노출 경로가 생기지 않는다. 백엔드나 세션 없이도 토큰을 확인할 수 있게 한다. |
|
| 20 |
+ * 개발 환경에서만 인증을 면제하는 경로. 디자인 시스템 테스트 페이지(`/dev-test/design`)는 |
|
| 21 |
+ * 개발 전용 라우트이며 프로덕션에서는 페이지 자체가 `notFound()`로 404를 낸다 — 즉 여기서 |
|
| 22 |
+ * 열어도 프로덕션 노출 경로가 생기지 않는다. 백엔드나 세션 없이도 토큰·컴포넌트를 확인할 |
|
| 23 |
+ * 수 있게 한다. |
|
| 23 | 24 |
* |
| 24 | 25 |
* fail-closed 원칙은 유지된다: 이 목록은 개발 빌드에서만 평가되고, 프로덕션 빌드에서는 |
| 25 | 26 |
* `PUBLIC_PATHS`만 남는다. |
| 26 | 27 |
*/ |
| 27 |
-const DEV_ONLY_PUBLIC_PATHS = ['/design']; |
|
| 28 |
+const DEV_ONLY_PUBLIC_PATHS = ['/dev-test/design']; |
|
| 28 | 29 |
|
| 29 | 30 |
function isPublicPath(pathname: string): boolean {
|
| 30 | 31 |
if (PUBLIC_PATHS.includes(pathname)) {
|
Add a comment
Delete comment
Once you delete this comment, you won't be able to recover it. Are you sure you want to delete this comment?