Semantic UI 의 Loader 을 사용하여 데이터를 받아오는 동안 로딩 표시를 해주자.
📁 / pages / index.js
📁 / pages / view / [id].js
Next.js 는 모든 페이지를 사전 렌더링( Pre-Rendering ) 한다.
다시 말해, 미리 HTML 을 만들어두고 요청이 있을 때마다 재사용한다는 의미이다.
더 좋은 퍼포먼스를 제공하고, 검색 엔진 최적화 (SEO)에도 유리하다는 장점이 있다.
사전 렌더링 ( Pre-Rendering )에는 2가지 형태가 존재한다.
이 두 가지의 차이점은 "언제 HTMl 파일을 생성하는가?" 이다.
▶ 정적 생성
getStaticProps
/ getStaticPaths
▶ Server-Side Rendering ( SSR, Dynamic Rendering )
getServerSideProps
💡 유저가 요청하기 전에 미리 페이지를 만들어 놓아도 상관없는 경우에는 정적 생성 방식을, 그렇지 않으면 SSR 방식을 사용한다.
정적 생성 방식은 마케팅 페이지, 블로그 게시물, 도움말 문서, 제품 리스트 등에 활용한다.
첫 페이지에서는 화면에 그릴 API를 비동기 호출하고 있다.
먼저 화면에 들어온 다음 제품 리스트 정보를 받기 위해 호출하고 있으므로 , 굳이 SSR 방식이 필요없다.
상세 페이지 같은 경우에는 매 클릭마다 안에 들어가는 제품 정보가 다르기 때문에
화면을 보여주기 전에 데이터가 있어야 title 이나 description 등의 meta 태그 정보를 보여줄 수 있다.
SSR 적용 전, 페이지 소스를 살펴보면 상품에 대한 어떠한 정보도 얻을 수 없다.
그 이유는 아직 API 호출을 하지 않았고, 껍데기만 Pre-Render 된 상태이기 때문이다.
데이터가 먼저 있어야 검색엔진에서도 읽을 수 있고 카톡이나 페이스북 등으로 공유했을 때 정보가 나타난다.
따라서 상세 페이지는 SSR 방식을 적용해야할 필요가 있다.
📁 / pages / view / [id].js
다음은 getServerSideProps
를 활용하여 SSR 방식을 적용한 코드이다.
페이지 소스를 확인해보면 제품 정보 관련 HTML과 meta 태그가 포함되어져 있는 것을 확인할 수 있다.
이 데이터를 이용해서 SEO 나 공유 등의 기능이 잘 동작하고,
항상 최신 상태를 유지하기 때문에 상품 정보에 변경사항이 생겨도 바로바로 업데이트 될 수 있다.
단, 요청 횟수가 늘어나기 때문에 퍼포먼스가 떨어진다는 단점이 있다.