Catch-all은 남은 URL 조각을 하나의 배열로 모은다

고정된 앞부분 뒤에 깊이가 달라지는 문서 경로를 한 route가 처리한다.

app/docs/[...slug]/page.tsx/docs 뒤의 모든 세그먼트를 캡처
/docs/react

[react]

slug = ['react']

/docs/react/hooks

[react, hooks]

slug 배열 길이 = 2

/docs/a/b/c

[a, b, c]

깊이와 무관하게 같은 page 사용

/docs

매칭 안 됨

루트도 허용하려면 [[...slug]] 사용

핵심배열을 바로 파일 경로에 붙이지 말고 허용된 segment인지 검증한 뒤 콘텐츠 조회 key로 바꾼다.