Next.js는 React와 거의 유사한 문법을 사용합니다. React 컴포넌트를 정의하는 방식과 동일하게 작성할 수 있으며, 특정한 파일 구조와 규칙을 따릅니다. 예를 들어, pages 폴더에 작성한 파일은 해당 경로로 접근할 때의 페이지 컴포넌트가 됩니다.
서버 사이드 렌더링(SSR)
정적 사이트 생성(Static Site Generation, SSG)
개발 생산성 향상
코드 스플리팅
자동 번들링
핫 모듈 교체
성능: 서버 사이드 렌더링과 정적 사이트 생성 기능을 통해 최적화된 성능을 제공합니다.
검색 엔진 최적화(SEO): 서버 사이드 렌더링을 통해 검색 엔진이 페이지의 콘텐츠를 더 잘 인식할 수 있습니다.
개발 생산성: 내장된 개발 툴과 편리한 기능들이 개발 생산성을 향상시킵니다.
학습: React와 함께 사용되기 때문에 React의 기본적인 지식이 필요합니다. 처음 사용하는 개발자들에게는 어려움이 있을 수 있습니다.
서버 측 구성의 추가 복잡성: 서버 사이드 렌더링을 구현하기 위해 서버 구성에 대한 이해가 필요합니다.
getStaticProps 함수는 정적 사이트 생성(Static Site Generation, SSG)을 위해 사용됩니다.
이 함수를 사용하면 빌드 시점에 페이지의 데이터를 가져와서 사전에 렌더링된 정적 파일로 생성합니다.
// pages/post/[id].js
export async function getStaticProps({ params }) {
// params에서 id 값을 가져와서 데이터를 조회하는 로직을 작성합니다.
const post = await fetch(`https://api.example.com/posts/${params.id}`);
const postData = await post.json();
// 페이지 컴포넌트에 필요한 데이터를 props로 전달합니다.
return {
props: {
postData
}
};
}
function Post({ postData }) {
// props로 전달받은 데이터를 사용하여 페이지를 렌더링합니다.
return <div>{postData.title}</div>;
}
export default Post;
위의 예제에서 getStaticProps 함수는 /post/[id].js 파일 내에 정의되어 있습니다.
이 함수는 빌드 시점에 /post/1, /post/2, /post/3과 같은 모든 동적 경로의 데이터를 사전에 가져옵니다. 그런 다음, 해당 데이터를 페이지 컴포넌트의 props로 전달합니다. 페이지 컴포넌트는 전달받은 데이터를 사용하여 동적으로 페이지를 렌더링합니다.
getServerSideProps 함수는 서버 사이드 렌더링(SSR)을 위해 사용됩니다. 이 함수를 사용하면 매 요청마다 서버에서 데이터를 가져와서 페이지를 렌더링합니다.
// pages/post/[id].js
export async function getServerSideProps({ params }) {
// params에서 id 값을 가져와서 데이터를 조회하는 로직을 작성합니다.
const post = await fetch(`https://api.example.com/posts/${params.id}`);
const postData = await post.json();
// 페이지 컴포넌트에 필요한 데이터를 props로 전달합니다.
return {
props: {
postData
}
};
}
function Post({ postData }) {
// props로 전달받은 데이터를 사용하여 페이지를 렌더링합니다.
return <div>{postData.title}</div>;
}
export default Post;
위의 예제에서 getServerSideProps 함수는 /post/[id].js 파일 내에 정의되어 있습니다.
이 함수는 매 요청마다 해당 동적 경로의 데이터를 서버에서 가져옵니다. 그런 다음, 해당 데이터를 페이지 컴포넌트의 props로 전달하여 페이지를 렌더링합니다.
getStaticPaths 함수는 동적 라우팅을 위해 사용됩니다. 이 함수를 사용하면 Next.js는 빌드 시점에 어떤 동적 경로들을 사전 렌더링할지 미리 정의합니다.
// pages/post/[id].js
export async function getStaticPaths() {
// 동적 경로의 id 목록을 가져오는 로직을 작성합니다.
const ids = await fetch('https://api.example.com/post-ids');
const idList = await ids.json();
// 사전에 렌더링할 경로들을 정의합니다.
const paths = idList.map(id => ({
params: { id: id.toString() }
}));
return {
paths,
fallback: false // fallback이 true인 경우, 미리 정의하지 않은 경로로 접근 시 404 페이지가 아닌 런타임 시에 동적으로 생성됩니다.
};
}
export async function getStaticProps({ params }) {
// params에서 id 값을 가져와서 데이터를 조회하는 로직을 작성합니다.
const post = await fetch(`https://api.example.com/posts/${params.id}`);
const postData = await post.json();
// 페이지 컴포넌트에 필요한 데이터를 props로 전달합니다.
return {
props: {
postData
}
};
}
function Post({ postData }) {
// props로 전달받은 데이터를 사용하여 페이지를 렌더링합니다.
return <div>{postData.title}</div>;
}
export default Post;
위의 예제에서 getStaticPaths 함수는 /post/[id].js 파일 내에 정의되어 있습니다. 이 함수는 빌드 시점에 /post/1, /post/2, /post/3과 같은 동적 경로들을 사전에 정의합니다. getStaticProps 함수에서 가져오는 데이터는 이 사전에 정의된 경로들에 대해서만 사전 렌더링됩니다.
이렇게 getStaticProps, getServerSideProps, getStaticPaths 함수를 사용하여 Next.js는 데이터를 가져오고 페이지를 사전에 렌더링할 수 있습니다. 이 외 함수들을 더 공부하고 이를 통해 성능을 최적화하고 SEO를 향상시킬 수 있습니다.
이 외에도 Next.js는 동적 라우팅, 데이터 가져오기 등 다양한 기능을 제공하고 다양한 기능으로 보다 사용자에게 편리한 웹 사이트를 만들면 좋을 것 같습니다. 그 외 공식문서를 통해 깊게 공부하면 좋을거 같습니다.
https://nextjs.org/docs