App router방식을 사용하기로 결정!
- app/ 하위의 디렉토리의 `page.js`가 해당 경로의 컴포넌트가 된다.
app/
page.js <- 컴포넌트
dashboard/
page.js <- 컴포넌트
- 공통적인 UI를 감싸는 형태의 컴포넌트로, 디렉토리내 `layout.js`를 정의하면, 하위의 디렉토리 컴포넌트에 공통적으로 적용된다.
app/
page.js
layout.js
dashboard/
page.js <- app/layout과 함께 렌더링된다.
API latency감소 : 서버에서 데이터를 가져와 렌더링되므로, 클라이언트에서 API호출하지 않는다.서버 리소스 접근 : RCC는 API를 통해 리소스를 가져옵니다. 하지만 RSC는 서버에서 직접 접근하여 데이터를 가져오기 용이합니다.번들링 사이즈 감소 : 라이브러리를 통해 렌더링된 내용을 render하여 전달하므로, 라이브러리의 번들이 포함되지 않아, 전달되는 번들 사이즈가 감소합니다.// page router에서의 getStaticProps와 유사하며, SSG적용
fetch(url, { cache: 'force-cache' })
// page router에서의 getServerSideProps와 유사하며, SSR적용
fetch(url, { cache: 'no-store' })
// page router에서의 getStaticProps와 유사하며, 10초 간격으로 데이터를 새로 불러오는 ISR적용
fetch(url, { next: { revalidate: 10} })
10s마다, 서버에서 새로 빌드/캐싱처리하여, 내려주는 것이다.ISR이 왜 필요함?
"데이터가 일정간격으로 바뀐다면, 필요함!"
SSG는 SSR에 비해, 매번 렌더링할 필요가 없어 서버의 부하를 최소화해준다. 그래서 되도록이면, SSR보다는 SSG를 작성하려 노력해야 한다.
하지만, 일정 간격마다 데이터가 필요한데 SSG를 작성하는 것은 어려우므로, 일정한 간격마다 SSG를 생성하여, 덜SSR같이 만드는 것이다.