임동욱 임동욱 08-11
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 (added)
+++ app/(public)/(empty)/dev-test/design/page.tsx
@@ -0,0 +1,21 @@
+import { notFound } from "next/navigation";
+import { DevTestPage } from "@fox/dev-test";
+
+export const metadata = {
+  title: "@fox 디자인 시스템 테스트",
+};
+
+/**
+ * 디자인 시스템 테스트 페이지 — 개발 전용.
+ *
+ * 화면 구현은 전부 `@fox/dev-test`가 소유하고 이 라우트는 마운트만 한다. 그래야 `@fox`
+ * 폴더를 다른 프로젝트로 복사할 때 테스트 하니스가 함께 따라간다(라우트 한 줄만 추가하면
+ * 된다). 프로덕션 차단은 서버에서 판정해야 하므로 이 파일은 Server Component로 둔다.
+ */
+export default function DesignSystemTestPage() {
+  if (process.env.NODE_ENV === "production") {
+    notFound();
+  }
+
+  return <DevTestPage />;
+}
 
app/(public)/(empty)/layout.tsx (added)
+++ app/(public)/(empty)/layout.tsx
@@ -0,0 +1,12 @@
+// Empty 레이아웃 — 크롬(AuthCard·헤더·사이드바) 없이 전체 화면을 그대로 쓰는 공개 화면
+// 진입점. 상위 `(public)/layout.tsx`가 로그인 화면용 AuthCard를 씌우므로, 그 껍데기가
+// 필요 없는 화면은 이 그룹 아래에 둔다.
+//
+// 레이아웃이 스타일을 갖지 않는 것이 요점이다 — 화면이 자기 셸을 온전히 소유한다.
+export default function Layout({
+  children,
+}: Readonly<{
+  children: React.ReactNode;
+}>) {
+  return children;
+}
proxy.ts
--- proxy.ts
+++ proxy.ts
@@ -17,14 +17,15 @@
 const PUBLIC_PATHS = ['/login'];
 
 /**
- * 개발 환경에서만 인증을 면제하는 경로. 디자인 시스템 카탈로그(`/design`)는 개발 전용
- * 라우트이며 프로덕션에서는 페이지 자체가 `notFound()`로 404를 낸다 — 즉 여기서 열어도
- * 프로덕션 노출 경로가 생기지 않는다. 백엔드나 세션 없이도 토큰을 확인할 수 있게 한다.
+ * 개발 환경에서만 인증을 면제하는 경로. 디자인 시스템 테스트 페이지(`/dev-test/design`)는
+ * 개발 전용 라우트이며 프로덕션에서는 페이지 자체가 `notFound()`로 404를 낸다 — 즉 여기서
+ * 열어도 프로덕션 노출 경로가 생기지 않는다. 백엔드나 세션 없이도 토큰·컴포넌트를 확인할
+ * 수 있게 한다.
  *
  * fail-closed 원칙은 유지된다: 이 목록은 개발 빌드에서만 평가되고, 프로덕션 빌드에서는
  * `PUBLIC_PATHS`만 남는다.
  */
-const DEV_ONLY_PUBLIC_PATHS = ['/design'];
+const DEV_ONLY_PUBLIC_PATHS = ['/dev-test/design'];
 
 function isPublicPath(pathname: string): boolean {
   if (PUBLIC_PATHS.includes(pathname)) {
Add a comment
List