현재 App Router 예시는 params를 await하고 slug 부재를 먼저 분기한다
catch-all 구현의 품질은 폴더 이름보다 params 처리, notFound 분기, 정적 경로 목록에서 갈린다.
| 구현 지점 | 필수 패턴 | 선택 패턴 | 점검 포인트 |
|---|---|---|---|
| props 타입 | params: Promise<{ slug: string[] }> | params: Promise<{ slug?: string[] }> | 현재 App Router 문법 |
| 값 꺼내기 | const { slug } = await params | const { slug } = await params | 서버 컴포넌트에서 await |
| 빈 경로 | 라우트 매칭 안 됨 | slug가 undefined 가능 | 홈 화면 또는 빈 상태 |
| 조회 키 | slug.join('/') | (slug ?? []).join('/') | 허용 문자와 깊이 검증 |
| 없는 문서 | notFound() | 홈이면 목록, 상세면 notFound() | 404와 빈 화면 구분 |