Next.js Git Blog (2): 라우팅 구현

목차

소개#

라우팅 방식에 대해 살펴보고자 하는데, 크게 어렵진 않았다. 먼저 Next.js에서 라우팅을 하는 방식으로 아래 두 가지를 확인할 수 있는데

  • App Router (새로운 방식, 디렉토리 기반)
  • Pages Router (기존 방식, 파일 기반)

블로그는 정적 파일을 보여주는 방식으로도 충분해서 파일 기반의 Pages Router가 더 적절하다고 한다.


Pages Router#

Pages Router를 사용하는 경우, src/pages 디렉터리 내부의 파일 구조가 곧 URL 경로가 된다. 아래와 같이 스크립트 파일을 생성하면 별도의 설정 없이 자동으로 라우팅 경로로 인식된다.

root
└── src
    └── pages
        ├── _app.tsx
        ├── _document.tsx
        ├── index.tsx       # localhost:3001
        ├── home.tsx        # localhost:3001/home
        └── docs
            ├── doc-1.tsx   # localhost:3001/docs/doc-1
            ├── doc-2.tsx   # localhost:3001/docs/doc-2
            └── index.tsx   # localhost:3001/docs

가령 src/pages/docs/doc-1.tsx 파일의 내용이 아래와 같다고 가정하자.

export default function Doc1() {
	return <div>this is document 1</div>;
}

직접 URL 경로로 접근한다면, 아래와 같이 파일 내용이 정상적으로 나타나는 것을 볼 수 있다. 이는 별도의 라우팅 설정 없이 파일 경로만으로 페이지가 매핑되었음을 의미한다:

alt 그림 1. 라우팅이 정상적으로 적용된 모습


페이지 이동#

페이지 간 이동은 <a> 태그를 사용할 수도 있지만, 이는 새로고침을 발생시켜 사용자 경험을 떨어트린다. 그래서 Next.js에서는 클라이언트 사이드 네비게이션을 지원하는 Link 컴포넌트 사용을 권장한다.

import Link from 'next/link';
 
export default function Doc1() {
	return (
		<div>
			<span>this is document 1</span>
			{/* 전체 페이지 새로고침 발생 */}
			<a href='/home'>link1</a>
 
			{/* 새로고침 없이 페이지 전환 */}
			<Link href='/home'>link2</Link>
		</div>
	);
}

Link 컴포넌트를 사용하면 페이지 전체를 다시 로드하지 않고, 필요한 부분만 전환되어 더 좋은 사용자 경험을 제공할 수 있다.


마무리#

페이지 간 이동은 가능해졌지만, 현재 구조에서는 글 내용을 스크립트 파일(.tsx) 내부에 직접 작성해야 한다. 이 방식은 페이지마다 유사한 코드가 반복되는 문제를 만들 수 있다.
다음 글에서는 이를 방지하기 위해, 내용을 markdown 파일로 작성하고 스크립트에서 불러와 사용하는 방식에 대해 살펴보도록 하겠다.