react Next.js와 Typescript
업데이트:
카테고리: react
/Next.js
React의 SSR을 구현할 수 있게하는 프레임 워크
검색엔진 최적화(SEO)
을 하기위해서
⇒ 빈 html 파일만 나오기 때문에 포털 검색에 노출될 일이 없다
CSR
브라우저 에서 html → js → 리액트 받는 과정을 로딩하는 동안 진행한다.
서버에서 데이터를 가져올때 지연 시간 발생으로 UX 측면에서 좋지않다.
웹크롤링을 할 때 데이터를 가져오게 되면 내용을 제대로 가져와 할 수 없기 때문에 최적화 검색 엔진 최적화에 문제가 생긴다.
SSR
html 파일을 response로 내보낸다.
js, react등은 화면이 보인 상태에서 브라우저에서 다운로드 받기에
클라이언트 대신 서버에서 페이지를 준비한다.
설치: npx create-next-app@latest --typescript
next를 붙어주어서 설치한다.
기본 파일 구조
pages
- 페이지를 생성한다.
index.tsx
루트 페이지_app.tsx
공통되는 레이아웃을 작성한다. url을 통과하여 특정 페이지에 진입하기전 통과하는 인터셉트- 어떤 페이지를 작성할 때
example.tsx
형식으로 생성하면 된다.
public
정적인 파일을 저장하는 장소
styles
- 스타일링을 처리해주는 폴더
- 모듈 css는 컴포넌트 종속적으로 스타일링을 하기 위한것, 확장자 앞에 module을 붙어줘야한다.
next.config.js
- Next.js는 웹팩을 기본 번들러로 사용
- 웹팩에 관한 설정을 해당 파일에서 실행
Pre-rendering
모든 페이지를 미리 랜더링한다. 이미 display가 되어있기 때문에 유용하다
JS disable : 관리자 모드에서 ctrl + shift + P
로 Disable javascipt 선택
react 앱에서는 js를 끄면 랜더링이 안되지만 Next.js로 로딩된 앱은 js를 꺼도 정상적으로 작동이 된다.
Data Fetching
리액트에서는 useEffect 안에서 데이터를 가져온다.
getStaticProps
: 빌드할 때 데이터를 불러온다.
- 랜더링 하는 데이터가 사용자의 요청보다 먼저 빌드하여 데이터를 가져온다.
getStaticPath
: 데이터에 기반하여 pre-render시 특정한 동적 라우팅
을 구현
export default getStaticPath() {
return {
paths: [
{ params: {...} }
],
fallback: true
}
}
- paths: 어떠한 경로가 pre-render 될지를 결정 / pages/posts/[id].js 를 이용하는 페이지를 생성함
- params: [params] 안에있는 데이터를 넣어준다. […slug]로 모든 경로를 사용한다면 배열로 이용한다.
- fallback
false
: 리턴되지 않는 것은 모두 404true
: 리턴되지 않으면 fallback이 뜨게 된다.
getServerSideProps
: SSR 요청이 있을 때 데이터를 불러온다.
- 요청할 때마다 데이터를 가져온다. 서버가 모든 요청에 대해서 처리를 해야되기 때문에 시간이
getStaticProps
보다 느리다. - 데이터가 계속 바뀔 때는 해당 요청을 이용하는게 더 유리하다