로딩화면, 렌더링화면을 분리하도록 돕는다.
에러 바운더리를 사용하면 에러 UI / 상태도 위임할 수 있다.
아래는 위의 예제를 실행한 결과입니다. user를 가져오는 API에는 1000ms의 딜레이를 주었고, post를 가져오는 API에는 1100ms의 딜레이를 주었습니다. 여기서 주목할 만한 점은 UserData가 도착한 뒤에 또 다른 1100ms를 기다렸다가 PostData가 로드되는 것이 아니라 UserData와 PostData가 동시에(정확하게는 Concurrent 하게) 요청되고 이에 따라 1100ms 안에 모든 데이터가 로드되어 모든 화면이 나타나게 된다는 것입니다.
현재 SSR API로서는
이러한 문제가 발생하는 이유는 이 모든 과정들이 “Concurrent” 하게 이루어지지 못하기 때문입니다. (Waterfall)
서버에서 데이터를 가져오는 과정이 모두 끝나야
서버에서 HTML로 렌더링할 수 있고
클라이언트에 모든 자바스크립트 코드가 렌더링 된 후에야 Hydration을 수행할 수 있고
모든 Hydration이 끝나야 임의의 컴포넌트가 상호작용이 가능한 상태가 될 수 있다는 것입니다.
그리고 이 Waterfall 방식의 SSR 동작이 이 모든 것을 비효율적으로 만드는 이유입니다.
이에 대해 React Core Team이 제시하는 해결책은 이 모든 과정을 “Concurrent” 하게 만드는 것입니다. 즉, 앞에서 언급한 작업을 쪼개, 전체 애플리케이션이 아닌 각각의 부분들에 대해 이 단계들을 수행할 수 있게 하는 것입니다. 그리고 이 문제를 React 18의 Suspense를 사용해서 해결할 수 있습니다.
Reat18에서는 Suspense를 통해 다음 2가지 SSR Feature를 사용할 수 있습니다.