동적 라우트: Next.js에서 getStaticPaths와 getServerSideProps 사용하기.
동적 라우트: Next.js에서 getStaticPaths와 getServerSideProps 사용하기
Next.js는 리액트 프레임워크로, 서버사이드 렌더링(SSR)과 정적 사이트 생성(SSG) 기능을 제공합니다. 특히 동적 라우트를 통해 URL 패러미터를 처리할 수 있어 매우 유용합니다. 여기서는 동적 라우트를 구현하기 위해 getStaticPaths
와 getServerSideProps
를 사용하는 방법에 대해 알아보겠습니다.
동적 라우트란?
동적 라우트는 URL 패턴을 기반으로 다양한 페이지를 생성하는 것을 의미합니다. 예를 들어, 블로그 포스트의 ID에 따라 다른 페이지를 보여줄 때 동적 라우트를 사용합니다. Next.js에서는 파일 명을 대괄호 []
로 감싸서 동적 라우트를 정의할 수 있습니다.
예시:
bashpages/ post/ [id].js
위 구조에서 [id]
는 동적 세그먼트를 나타내며, post/1
, post/2
등의 경로를 처리할 수 있습니다.
getStaticPaths 함수
getStaticPaths
는 빌드 타임에 어떤 경로들이 정적으로 생성될지 정의하는 함수입니다. 이 함수는 동적 라우트 파일에서 export async function getStaticPaths()
형태로 구현됩니다. 이 함수는 특정 경로들을 미리 렌더링하여 정적 파일로 생성합니다.
예제:
javascriptexport async function getStaticPaths() { const res = await fetch('https://api.example.com/posts'); const posts = await res.json(); const paths = posts.map((post) => ({ params: { id: post.id.toString() }, })); return { paths, fallback: false }; }
위 예제에서 getStaticPaths
는 API로부터 데이터를 가져와 경로 목록을 생성합니다. params
객체는 라우트에서 사용할 URL 파라미터를 정의합니다. 마지막으로, fallback
은 빌드 타임에 정의되지 않은 경로들을 처리하는 방법을 결정합니다. false
로 설정하면, 빌드 타임에 정의되지 않은 모든 경로는 404 페이지로 이동합니다.
getStaticProps 함수
getStaticProps
는 빌드 타임에 데이터를 가져와 정적 페이지를 생성하는데 사용됩니다. 이 함수는 getStaticPaths
와 함께 사용되어, 각 경로에 대해 개별 데이터를 가져옵니다.
예제:
javascriptexport async function getStaticProps({ params }) { const res = await fetch(`https://api.example.com/posts/${params.id}`); const post = await res.json(); return { props: { post } }; }
이 함수는 params
객체를 받아 해당 경로의 데이터를 가져옵니다. 위 예제에서는 각각의 포스트 ID에 대해 API 요청을 보내고, 그 결과를 페이지의 props로 반환합니다.
컴포넌트 렌더링
이제 가져온 데이터를 컴포넌트에서 사용할 수 있습니다:
javascriptfunction Post({ post }) { return ( <div> <h1>{post.title}</h1> <p>{post.body}</p> </div> ); } export default Post;
위 예제는 post
데이터를 받아서 제목과 본문을 렌더링합니다.
getServerSideProps 함수
getStaticProps
와 달리 getServerSideProps
는 각 요청마다 서버사이드에서 데이터를 가져옵니다. 이 함수는 동적 데이터를 실시간으로 보여줘야 하는 경우에 유용합니다.
예제:
javascriptexport async function getServerSideProps({ params }) { const res = await fetch(`https://api.example.com/posts/${params.id}`); const post = await res.json(); return { props: { post } }; }
이 코드에서는 getStaticProps
와 동일한 방식으로 데이터를 가져오지만, 정적 파일을 생성하지 않으며 각 요청마다 실행됩니다.
결론
Next.js에서는 getStaticPaths
와 getStaticProps
및 getServerSideProps
함수를 사용하여 동적 라우트를 쉽게 구현할 수 있습니다. getStaticPaths
는 특정 경로를 미리 빌드하는 데 유용하며, getServerSideProps
는 실시간 데이터를 필요로 할 때 적합합니다. 이 두 가지 방식을 적절히 활용하여 효율적이고 확장 가능한 웹 애플리케이션을 만들 수 있습니다.