
$ npx create-next-app@14 section2
$ npm run dev 입력시 개발모드로 next 실행

// 📄test.tsx
export default function Page() {
return <h1>test</h1>;
}
http://localhost:3000/test로 접속시, 화면에 test가 출력되는 것을 확인할 수 있다
// 📄index.tsx
export default function Home() {
return <h1>인덱스</h1>;
}

// 📄search.tsx
export default function Page() {
return <h1>search</h1>;
}
http://localhost:3000/search로 접속시, 화면에 search가 출력되는 것을 확인할 수 있다
만약 폴더명으로 구분하고 싶다면? → search 폴더, index.tsx 파일 생성
쿼리스트링은 페이지 경로에 영향을 주지 않는다
// 📄search/index.tsx
import {useRouter} from 'next/router' // 1. useRouter import 하기
export default function Page() {
const router = useRouter(); // 2. hook을 호출하여 변수에 저장
console.log(router); // 3. 콘솔에 출력하여 결과 보기
const {q} = router.query; // 4. 쿼리스트링 꺼내오기
return <h1>search{q}</h1>;
}
콘솔 출력 결과
쿼리스트링을 포함한 return 결과
url 파라미터도 쿼리스트링과 같이 router 객체에 저장이 된다
book 폴더, [id].tsx 파일 생성
// 📄[id].tsx
import { useRouter } from 'next/router';
export default function Page() {
const router = useRouter();
const { id } = router.query;
return <h1>Book {id}</h1>;
}
/book/123/456/789 이런식으로 더 많은 url 파라미터를 받으려면
파일의 이름을 [...id].tsx 로 변경해준다
여러 개의 파라미터를 받는 경우에는 배열 형태로 받아온다
⚠️그런데⚠️
Catch All Segment 는 뒤에 경로가 뭐라도 나와야 하기 때문에
뒤에 파라미터가 붙지 않으면 Page Not Found가 발생한다
http://localhost:3000/book/12345 → 정상작동
http://localhost:3000/book → Page Not Found
해결책 2가지
① src/pages/book 폴더에 index.tsx 페이지 생성
② 파일명을 대괄호로 한 번 더 감싸기 (=Optional Catch All Segment)
[...id].tsx → [[...id]].tsx
404.tsx 파일 생성
// 📄404.tsx
export default function Page() {
return <div>존재하지 않는 페이지입니다</div>;
}
