feat(visibility): 사주·음악·설문·패키지 라우트 숨김 가드 적용

This commit is contained in:
2026-06-11 01:35:46 +09:00
parent 281edd9a52
commit b13ddd3841
4 changed files with 18 additions and 6 deletions

View File

@@ -1,4 +1,6 @@
import { notFound } from 'next/navigation';
import type { Metadata } from 'next'; import type { Metadata } from 'next';
import { isServiceVisible } from '@/lib/service-visibility';
export const metadata: Metadata = { export const metadata: Metadata = {
title: 'CONTOUR — 나를 더 선명하게 이해하는 3분', title: 'CONTOUR — 나를 더 선명하게 이해하는 3분',
@@ -22,7 +24,8 @@ export const metadata: Metadata = {
}, },
}; };
export default function GyeolLayout({ children }: { children: React.ReactNode }) { export default async function GyeolLayout({ children }: { children: React.ReactNode }) {
if (!(await isServiceVisible('gyeol'))) notFound();
return ( return (
<div <div
className="min-h-screen" className="min-h-screen"

View File

@@ -1,10 +1,13 @@
import { notFound } from 'next/navigation';
import type { Metadata } from 'next'; import type { Metadata } from 'next';
import { isServiceVisible } from '@/lib/service-visibility';
export const metadata: Metadata = { export const metadata: Metadata = {
title: 'AI 음악 제품', title: 'AI 음악 제품',
description: 'Suno 프롬프트 + 뮤직비디오 워크플로우 + 유튜브 SEO 템플릿 한 팩에. 1시간 만에 음악·뮤비 완성.', description: 'Suno 프롬프트 + 뮤직비디오 워크플로우 + 유튜브 SEO 템플릿 한 팩에. 1시간 만에 음악·뮤비 완성.',
}; };
export default function MusicLayout({ children }: { children: React.ReactNode }) { export default async function MusicLayout({ children }: { children: React.ReactNode }) {
if (!(await isServiceVisible('music'))) notFound();
return <>{children}</>; return <>{children}</>;
} }

View File

@@ -1,4 +1,6 @@
import { notFound } from 'next/navigation';
import type { Metadata } from 'next'; import type { Metadata } from 'next';
import { isServiceVisible } from '@/lib/service-visibility';
export const metadata: Metadata = { export const metadata: Metadata = {
title: 'SaaS 제품 · 월 구독 패키지', title: 'SaaS 제품 · 월 구독 패키지',
@@ -13,6 +15,7 @@ export const metadata: Metadata = {
}, },
}; };
export default function PackagesLayout({ children }: { children: React.ReactNode }) { export default async function PackagesLayout({ children }: { children: React.ReactNode }) {
return children; if (!(await isServiceVisible('packages'))) notFound();
return <>{children}</>;
} }

View File

@@ -1,4 +1,6 @@
import { notFound } from 'next/navigation';
import type { Metadata } from 'next'; import type { Metadata } from 'next';
import { isServiceVisible } from '@/lib/service-visibility';
export const metadata: Metadata = { export const metadata: Metadata = {
title: 'AI 사주 분석', title: 'AI 사주 분석',
@@ -22,6 +24,7 @@ export const metadata: Metadata = {
}, },
}; };
export default function SajuLayout({ children }: { children: React.ReactNode }) { export default async function SajuLayout({ children }: { children: React.ReactNode }) {
return children; if (!(await isServiceVisible('saju'))) notFound();
return <>{children}</>;
} }