해결된 질문
작성
·
51
·
수정됨
0
"NextJS에서 클라이언트 컴포넌트도 SSR을 수행하는데, 상호작용이 불가능한 정도의 SSR을 수행하여 리액트 트리를 구성하여 HTML을 만들고, HTML과 함께 클라이언트에 자바스크립트 번들 형태(하이드레이션 용도)로 전달된다." 라고 알고 있는데 맞는 말일까요?
그렇다면, '첫 페이지 로드 시'에만 1번과 같이 동작하고 첫 페이지가 아닌 '다른 페이지'에 들어갈 땐 CSR처럼(JS번들을 클라이언트에게 전달하여 브라우저 단에서 리액트 생명주기 시작) 동작한다면,
강의 중 나온 SearchBar 컴포넌트는 빌드 단계에 렌더링되는 컴포넌트 안에 있다하더라도 CSR될 것인데 Suspense로 래핑하여 클라이언트 단에서 렌더링이 되게끔 강제할 필요가 없지 않나요?
클라이언트 컴포넌트로 선언된 페이지 컴포넌트(create 페이지)가 next/link를 통해 프리패칭된 것을 네트워크 탭을 통해 확인했습니다. 다만, 클라이언트 페이지 컴포넌트 임에도 RSC Playload로 가져온 것을 확인했는데, 이것은 왜 그런 걸까요?
첫 페이지 로드 이후 페이지 이동 시에 CSR로 동작한다하더라도 진입하는 페이지의 RSC Payload와 JS번들은 주기적으로 서버로부터 가져와야하지 않나요? 아래의 그림에는 JS 실행 전에 서버로부터 가져오는 단계가 보이지 않는데 프리 패칭 과정이 생략된 걸까요?
답변 2
0
안녕하세요 이정환입니다. 순서대로 답변드릴게요
1) 맞습니다.
2) 이것은 useSearchParams라는 훅의 동작 때문입니다. 이 훅은 예외적으로 서버측 렌더링 시에도 동작하기 떄문에 Suspense로 감싸주지 않으면 오류를 발생시키게 됩니다. 관련 공식문서 링크 첨부해드릴게요
https://nextjs.org/docs/messages/missing-suspense-with-csr-bailout
3) create 페이지가 정확히 어떻게 구성되어 있는지 잘 모르겠어서 ... 확실한 답변을 드리기에는 어려울 것 같습니다. 다만 해당 페이지를 이루는 layout이나 기타 컴포넌트가 서버 컴포넌트일 경우 RSC Payload가 전달될 수 있습니다
4) 네 해당 그림에서는 프리페칭 과정은 생략되었습니다. 프리페칭은 경우에 따라 동작하지 않을수도 있기 때문입니다.
0
안녕하세요, 인프런 AI 인턴입니다. 김진우님께서 Next.js의 클라이언트 컴포넌트와 관련하여 궁금해 하신 점들에 대해 답변 드리겠습니다.
클라이언트 컴포넌트는 기본적으로 서버 사이드 렌더링(SSR)을 통해 화면에 HTML을 초기화하는 것이 아니라, 클라이언트 사이드에서 실행 가능한 자바스크립트 번들을 통해 수행됩니다. 첫 페이지 로드 시 클라이언트 컴포넌트는 JS 번들로 제공되어 상호작용 가능한 형태로 렌더링을 지원합니다. 즉, 상호작용 불가능한 HTML만을 제공하는 SSR과는 다르게 동작합니다.
Next.js에서는 페이지 단위로 JavaScript 번들이 제공되며, 첫 페이지 로드 시에는 해당 페이지에 필요한 번들만 클라이언트에 전달됩니다. 이후 다른 페이지 이동 시에는 이를 CSR(Client-Side Rendering) 방식으로 처리합니다. 즉, 필요한 번들을 미리 가져와 클라이언트 측에서 React 컴포넌트의 생명주기를 시작하게 됩니다.
클라이언트 컴포넌트에서도 RSC Payload를 보게 되는 경우가 발생할 수 있습니다. 이는 주로 서버와 클라이언트 간 상태 동기화 및 컴포넌트 트리 관리를 위해 사용하는 메커니즘입니다. 클라이언트 컴포넌트의 경우 이 데이터를 통해 동적 컴포넌트의 구성을 완료하며 초기 상태를 유지합니다. RSC Payload는 브라우저가 클라이언트 측에서 필요한 데이터를 최적화하여 가져오도록 돕는 역할을 합니다.
위의 링크들은 유사한 주제에 대해 더 많은 정보를 제공할 수 있으니 참고해 보시기 바랍니다.
저는 질문자님의 이해를 돕기 위해 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.