loading.tsx and Suspense.Streaming이란 route(특정 URL path에 해당하는 page의 HTML(데이터))을 작은 “덩어리chunks”로 쪼개어 서버에서 클라이언트로 전송하는 기술이다.

Streaming을 통해 특정 slow data request가 페이지 전체를 block하는 것을 방지할 수 있다(즉 이런 경우에 특히 유용하다). Streaming을 사용하면 부분적으로 로딩이 먼저 되는대로 화면에 요소가 그려지게 되고, 전체 데이터가 로딩되기까지 기다릴 필요 없이 유저는 이미 로딩이 완료된 부분을 보고, 상호작용할 수 있다.

Streaming은 React의 컴포넌트 모델과도 잘 맞는데, 왜냐하면 리액트의 각 컴포넌트를 Streaming에서 말하는 chunk로 취급할 수 있기 때문이다.
Next.js에서 streaming을 하기 위해서는 두가지 방법을 사용할 수 있다.
loading.tsx file (페이지 전체에 대한 로딩 화면 적용 가능)<Suspense> (컴포넌트 별로 적용 가능)참고:

loading.tsx/app/dashboard 폴더에 새로 loading.tsx 파일을 생성하여 아래와 같이 코드를 작성해주자.
export default function Loading() {
return <div>Loading...</div>;
}
그러면 아래와 같이 로딩하는 동안 작성한 로딩 컴포넌트가 대신하여 화면에 표시된다.

여기에는 몇가지가 동시에 일어나고 있다.
loading.tsx는 Suspense를 기반으로 만들어진 특별한 Next.js 파일이며, 페이지 내용이 로딩되는 동안 보여줄 fallback(예비) UI를 만들 수 있도록 해준다.<SideNav> 컴포넌트의 경우 static이기 때문에 화면에 즉시 보여진다(로딩 되는 동안에도). 즉 유저는 dynamic content가 로딩되는 동안에도 <SideNav>와 상호작용할 수 있다.