회사에서 다음 프로젝트는 Next.js를 이용해서 하기로 했다.
주어진 기한은 총 5일 딱 5일 안에 Next.js의 Basic을 익혀서 바로 프로젝트에서 치고 나가야 한다.
npx create-next-app --typescript
우리의 경우 typescript를 쓸 것이기 때문에 위처럼 옵션을 추가해준다.
그러고 나서 package.json을 확인해보면 우리가 쓸 수 있는 script를 확인해볼 수 있다.
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "next lint"
}
공식문서를 보면 각각의 script에 대한 설명이 나와있다.
따라서 개발을 할때는
npm run dev
빌드를 할때는
npm run build
Next.js의 가장 큰 장점이라고 생각되는 feature이다. 결론적으로 말하자면 React에서는 Routing을 할때 'react-router-dom'이라고 하는 것을 사용해서 SPA를 구현하고 라우팅을 했다면 Next에서는 이것이 필요없어진다.
pages라고 하는 디렉토리에 about.js라고 하는 파일을 만들고 그 안에서 그 페이지에 해당하는 컴포넌트를 export해주기만 하면 자동 라우팅이 된다. SSG를 써봤다면 알겠지만 그것과 굉장히 비슷한 방식으로 작동한다.
pre(미리) render(보이게하다, 그리다, 나타내다) 즉, 미리 보이게하기, 미리 그리기의 의미로 해석할 수 있다.
Next에서는 매 페이지를 pre-render하는 것이 기본이다.(즉, 매 페이지에 대해서 HTML을 미리 만들어서 가지고 있는다.)
이러한 pre-rendering에는 두가지 방식이 있다.
- Static Generation(추천): HTML이 build time
에 만들어지고 매 요청마다 재사용된다.
build time, request time
Next.js문서를 읽다보면 빌드타임과 리퀘스트 타임이 나오는데 이 둘의 차이는 다음과 같다. 빌드타임은 Next.js앱을 빌드할 때를 얘기한다. 그리고 리퀘스트 타임은 next.js가 실행 중이고 요청이 들어왔을 때를 얘기하는 것이다.
많은 경우 데이터를 불러와야할 일이 생긴다. 데이터를 불러오는 것은 두가지 시나리오로 생각해볼 수 있는데 다음과 같다.
getStaticProps
를 사용한다.getStaticPaths
를 사용하는데 getStaticProps
와 함께 사용한다. Next의 경우 getStaticProps
라고 하는 비동기 함수를 page가 있는 같은 파일에서 export할 수 있다.
build time
에 호출이 되고 pre-render될 때 이미 데이터가 page에 props로 전달이 된다. function Blog({ posts }) {
// Render posts...
}
// This function gets called at build time
export async function getStaticProps() {
// Call an external API endpoint to get posts
const res = await fetch('https://.../posts')
const posts = await res.json()
// By returning { props: { posts } }, the Blog component
// will receive `posts` as a prop at build time
return {
props: {
posts,
},
}
}
위의 코드를 보면 async function getStaticProps()를 export했고 이 함수는 객체를 return하는데 그 안에 프로퍼티로 props가 있고 props의 값은 posts라고 하는 데이터가 들어 있는 객체이다.
그리고 위를 보면 Blog라고 하는 React 엘리먼트는 posts라고 하는 props를 전달 받게 되어 있다. 이 규칙을 지켜서 코드를 짜면 된다.
*getStaticProps에 대해서는 따로 포스팅을 하도록 하겠다.
오늘은 여기까지 적도록 하고, 다음 포스팅부터는 본격적인 Next에 대해서 적어보겠다.