TechBridge

Link & Navigation — next/link, useRouter, redirect 완전 정복

← 목록으로

📋 실습 안내

✏️ CODE EDITOR (JSX)
▶ 실행 버튼을 눌러 코드를 테스트하세요.
👁️ 내 미리보기 내 코드 실행 결과
🎯 완성 미리보기 목표
위 에디터 코드를 수정해서 이 결과물과 똑같이 만들어보세요!
💡 TODO 주석을 채워서 위 결과물처럼 동작하게 만들어보세요
🤖 AI 선생님에게 질문하기 이번 강의 전용
  선생님이 답변 중이에요...
⚠️ 학습 관련 질문만 답변합니다. 관련 없는 질문은 자동으로 학습으로 유도됩니다.
Q1. `next/link`의 `<Link>` 컴포넌트가 HTML `<a>` 태그보다 우수한 점은?
💡 `<Link>` 컴포넌트는 링크가 뷰포트에 보이면 해당 페이지의 데이터를 백그라운드에서 미리 로드(프리패칭)합니다. 이 덕분에 사용자가 클릭하는 순간 이미 데이터가 준비되어 있어 페이지 전환이 거의 즉각적으로 이루어집니다. 전체 페이지를 새로고침하는 `<a>` 태그와 달리, 클라이언트 사이드 전환으로 상태도 유지됩니다.
Q2. Server Component에서 조건부 리다이렉션을 구현하는 올바른 방법은?
💡 Server Component에서는 React 훅(`useRouter`)을 사용할 수 없습니다. 대신 `next/navigation`의 `redirect()` 함수를 사용합니다. 이 함수는 서버에서 HTTP 307 리다이렉션을 수행하며, 호출 시 즉시 실행을 중단하므로 `return`이 필요 없습니다. 영구 리다이렉션은 `permanentRedirect()`(308)를 사용합니다.
Q3. `useSearchParams()`로 URL `?category=tech&page=2`에서 `category` 값을 가져오는 올바른 코드는?
💡 `useSearchParams()`는 `URLSearchParams` 인터페이스를 반환합니다. 특정 파라미터 값을 가져오려면 `.get(key)` 메서드를 사용합니다. 값이 없으면 `null`을 반환하므로 기본값 처리(`?? ''`)를 함께 사용하는 것이 좋습니다. `searchParams.category`처럼 객체 속성으로 접근하는 방식은 동작하지 않습니다.
Q4. `router.push()`와 `router.replace()`의 차이점은?
💡 `router.push()`는 브라우저 히스토리에 새 항목을 추가합니다. 사용자가 뒤로 가기 버튼을 누르면 이전 페이지로 돌아갈 수 있습니다. 반면 `router.replace()`는 현재 히스토리 항목을 새 URL로 교체하므로 뒤로 가기를 눌러도 교체 전 페이지로 돌아갈 수 없습니다. 로그인 후 이동이나 리다이렉션처럼 뒤로 가기를 방지할 때 사용합니다.
Q5. 현재 URL 경로를 실시간으로 감지하여 Active 링크를 구현할 때 사용하는 훅은?
💡 `usePathname()`은 `next/navigation`에서 제공하는 훅으로, 현재 URL의 경로 부분(`/blog/123` 등)을 반환합니다. `'use client'` 지시어가 필요한 Client Component 전용 훅입니다. 이를 활용하여 현재 경로와 링크 href를 비교해 활성 링크(Active Link)를 스타일링합니다. `useRouter().pathname`은 App Router에서 더 이상 사용할 수 없습니다.
🎉

퀴즈 통과!

점수: 0점 — 수고하셨습니다!

다음 강의로 →
😅

아쉽네요!

점수: 0점 — 70점 이상이 되어야 통과합니다.