본문 바로가기
프론트엔드/Next.JS

라우팅 / 404page / Layout / Link / SEO

by 학습하는 청년 2023. 7. 18.

최종 수정 : 2024-06-01

Next.js 기초와 내장 컴포넌트

Next.js는 단순히 서버 사이드 렌더링만 제공하는 프레임워크가 아니다. 훌륭한 내장 컴포넌트와 함수를 제공하여 성능이 뛰어난 동적 웹 사이트를 쉽게 만들 수 있다.


라우팅 시스템

라우팅(Routing) : 어떤 주소에 어떤 페이지를 보여줄지 정하는 것을 의미한다.

 

Next.js는 '파일시스템 기반 라우팅'으로 동작한다.  : 파일의 경로가 주소에 매칭되는 라우팅 방식

 

정적 라우팅(Static Routing)?

어떤 주소에 어떤 페이지를 보여줄지 정하는 것

 

동적 라우팅(Dynamic Routing)?

여러 주소를 하나의 페이지 컴포넌트에서 처리하는 것

 

API 라우팅

 

 

Layout

 

 

<Link> 컴포넌트

Next.js에서는 무조건 a 태그 대신에 Link 컴포넌트를 사용하면 된다. <a> 태그를 사용하면 페이지를 이동할 때 페이지 전체를 다시 로딩하기 때문에 속도가 느리고, 빈 화면이 잠깐 깜빡거림이 생긴다. 그러나 Link 컴포넌트를 쓰면 필요한 데이터만 불러오기 때문에 이동속도도 빨라지고 넘어가는 동작도 부드럽다.

import Link from 'next/link';

export default Page() {
  return <Link href="/">홈페이지로 이동</Link>;
}

 

useRouter() Hook

사용하면 사이트 주소에서 원하는 값을 가져올 수 있다.   

# 쿼리 사용하기

router.query 값을 사용하면 페이지 주소에서 Params 값이나 쿼리스트링 값을 참조할 수 있다.

 

pages/products/[id].js 페이지에서 router.query['id'] 값으로 Params id에 해당하는 값을 가져올 수 있다.

// -- page/products/[id].js --
import { userRouter } from 'next/router';

export default function Product() {
 const router = useRouter();
 const id = router.query['id'];
 
 return <>Product #{id} 페이지</>;
}

 

/search?q=티셔츠와 같은 주소로 들어왔을 때 router.query['q'] 값으로 쿼리스트링 q에 해당하는 값을 가져올 수 있다.

// -- pages/search.js --
import { useRouter } from 'next/router';

export default function Search() {
 const rotuer = useRouter();
 const q = router.query['q'];
 
 return <>{q} 검색 결과</>;
}

 

# 페이지 이동하기

router.push() 함수를 이용하면 코드로 페이지를 이동할 수 있다.

import { useState } from 'react';
import { useRouter } from 'next/router';

export default function SearchForm() {
 const [value, setValue] = useState();
 const router = useRouter();
 
 function handleChange(e) {
  setValue(e.target.value);
 }
 
 function handleSubmit(e) {
  e.preventDefault();
  if (!value) {
   return router.push('/');
  }
  return router.push(`/search?q=${value}`);
 }
 
 return (
  <form onSubmit={handleSubmit}>
   <input name="q" value={value} onChange={handleChange} />
   <button>검색</button>
  </form>
 );
}

 

리다이렉트(redirect)

next.config.js 파일을 수정하면 특정 주소에 대해서 리다이렉트할 주소를 지정할 수 있다.

/** @type {import('next').NextConfig} */
const nextConfig = {
 async redirects() {
  return [
   {
    source: '/products/:id',
    destination: 'items/:id',
    permanent: true,
   },
  };
 },
}

module.exports = nextConfig;

 

# Rewrite

URL 주소가 길어지는 것을 방지할 수 있고, 중요한 정보를 숨길 수 있다.

async rewrites() {
 return [
  {
   source: '/view',
   destination: '/about/me/view',
  },
  {
   source: '/article/:slug',
   destination: '/post/:slug',
  }
 ];
}

404 page

# 커스텀 404 페이지

존재하지 않는 주소로 들어올 경우에 Next.js에서는 기본적으로 404 페이지를 보여 줍니다. 내가 원하는 404 페이지를 보여주려면 pages/404.js 파일을 만들고 일반적인 페이지처럼 구현하면 된다.

 

 

---------------

커스텀 App (_app.js)

공통된 layout을 구현할 때 지정할 수 있는 파일 
모든 페이지에 공통적으로 코드를 적용하고 싶다면 커스텀 App 컴포넌트를 수정하면 됩니다.

 

커스텀 Document (_document.js)

공통된 HTML을 지정할 수 있는 파일

react의 기능을 사용할 수 없다. 

 

 

SEO


참고 자료

실전에서 바로 쓰는 Next.js (p.49-83)

 

댓글