SG
를 할지, SSR
를 할지 개발자가 선택할 수 있다.link
또는 router
를 사용한다. 언제 html 파일을 생성하는가?
유저가 요청하기전에 html
페이지를 만들어놔야 한다면 SG
사용
npm run build
) 시점에 html 파일들이 생성html
파일은 모든 요청에 재사용Next.js
에서는 SG 사용을 권고getStaticProps
, getStaticPaths
를 이용해서 구현html
파일을 다시 만들필요가 없는 경우유저가 요청할 때마다 html 파일을 다시 생성해야 한다면 SSR
사용
html
파일들을 생성 ⇢ 항상 최신 상태를 유지getServerSideProps
를 이용해서 구현getServerSideProps
export const getServerSideProps = async (context) => {
return {
props: {}
}
}
getServerSideProps
는 서버에서만 동작하고 브라우저에서 동작하지 않음
getServerSideProps
는 요청시에만 실행된다. 그리고 해당 페이지는 return
된 props
와 함께 Pre-render 된다.
해당 페이지가 next/link
또는 next/router
를 통해 요청된다면, next.js
는 API 요청을 서버로 보내고 getServerSideProps
를 실행한다. 그리고 hmtl
파일을 response 해주는 것이 아니라, json
을 return
한다. 그리고 이 json
이 page render에 사용된다.
getStaticProps
getStaticPaths
동적 라우팅을 사용하는 경우에 SG 구현을 하고자 한다면 사용한다. getStaticProps
와 같이 사용해야 한다.
key
pahts
: 가장 처음에 html
파일 생성을 해놓을 것들을 지정할 수 있다.
fallback
: paths
에 없는 페이지에 대한 대응 여부를 결정한다. true
일때는 paths
에 없는 경로라고 해도 html
파일을 생성하여 브라우저에 렌더링한다. false
일때는 없는 페이지로 간주하여 404
를 띄운다.
특징
기본적인 코드 패턴
// Component
const Post = ({item}) => {
return (
<>
</>
)
}
export default Post;
// next.js의 동적 라우팅에서 SG를 구현할 때는 getStaticPaths를 사용해야 한다.
export async function getStaticPaths(){
return {
paths : [ // paths에 지정된 것들은 html이 build 될때 생성되기 때문에 빠르다.
{ params : {id: '1'} },
{ params : {id: '2'} },
],
fallback : true
/* fallback를 true로 변경하면 paths 목록에 있지 않은 것들도 최초 접속 시,
정적 생성을 하여 server page 폴더안에 추가됨.
그래서 두번째 접속부터는 생성된 html 파일을 응답한다. */
};
}
export async function getStaticProps(context){
const id = context.params.id;
const apiUrl = 'http://...'
const { data } = await.Axios.get(apiUrl);
return {
props: {
item : data
}
}
}