inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

한 입 크기로 잘라먹는 Next.js

클라이언트 컴포넌트 렌더 시점에 대한 질문

해결된 질문

60

김진우

작성한 질문수 1

0

궁금한 내용

  1. "NextJS에서 클라이언트 컴포넌트도 SSR을 수행하는데, 상호작용이 불가능한 정도의 SSR을 수행하여 리액트 트리를 구성하여 HTML을 만들고, HTML과 함께 클라이언트에 자바스크립트 번들 형태(하이드레이션 용도)로 전달된다." 라고 알고 있는데 맞는 말일까요?

     

  1. 그렇다면, '첫 페이지 로드 시'에만 1번과 같이 동작하고 첫 페이지가 아닌 '다른 페이지'에 들어갈 땐 CSR처럼(JS번들을 클라이언트에게 전달하여 브라우저 단에서 리액트 생명주기 시작) 동작한다면,

     

    강의 중 나온 SearchBar 컴포넌트는 빌드 단계에 렌더링되는 컴포넌트 안에 있다하더라도 CSR될 것인데 Suspense로 래핑하여 클라이언트 단에서 렌더링이 되게끔 강제할 필요가 없지 않나요?
     

  2. 클라이언트 컴포넌트로 선언된 페이지 컴포넌트(create 페이지)가 next/link를 통해 프리패칭된 것을 네트워크 탭을 통해 확인했습니다. 다만, 클라이언트 페이지 컴포넌트 임에도 RSC Playload로 가져온 것을 확인했는데, 이것은 왜 그런 걸까요?

     

    image.png

 

  1. 첫 페이지 로드 이후 페이지 이동 시에 CSR로 동작한다하더라도 진입하는 페이지의 RSC Payload와 JS번들은 주기적으로 서버로부터 가져와야하지 않나요? 아래의 그림에는 JS 실행 전에 서버로부터 가져오는 단계가 보이지 않는데 프리 패칭 과정이 생략된 걸까요?

    image.png

     

react typescript next.js

답변 2

0

이정환 Winterlood

안녕하세요 이정환입니다. 순서대로 답변드릴게요

1) 맞습니다.

2) 이것은 useSearchParams라는 훅의 동작 때문입니다. 이 훅은 예외적으로 서버측 렌더링 시에도 동작하기 떄문에 Suspense로 감싸주지 않으면 오류를 발생시키게 됩니다. 관련 공식문서 링크 첨부해드릴게요

https://nextjs.org/docs/messages/missing-suspense-with-csr-bailout

3) create 페이지가 정확히 어떻게 구성되어 있는지 잘 모르겠어서 ... 확실한 답변을 드리기에는 어려울 것 같습니다. 다만 해당 페이지를 이루는 layout이나 기타 컴포넌트가 서버 컴포넌트일 경우 RSC Payload가 전달될 수 있습니다

4) 네 해당 그림에서는 프리페칭 과정은 생략되었습니다. 프리페칭은 경우에 따라 동작하지 않을수도 있기 때문입니다.

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. 김진우님께서 Next.js의 클라이언트 컴포넌트와 관련하여 궁금해 하신 점들에 대해 답변 드리겠습니다.

1. 클라이언트 컴포넌트의 SSR 수행 여부

클라이언트 컴포넌트는 기본적으로 서버 사이드 렌더링(SSR)을 통해 화면에 HTML을 초기화하는 것이 아니라, 클라이언트 사이드에서 실행 가능한 자바스크립트 번들을 통해 수행됩니다. 첫 페이지 로드 시 클라이언트 컴포넌트는 JS 번들로 제공되어 상호작용 가능한 형태로 렌더링을 지원합니다. 즉, 상호작용 불가능한 HTML만을 제공하는 SSR과는 다르게 동작합니다.

2. 첫 페이지 로드와 다른 페이지 로드의 차이

Next.js에서는 페이지 단위로 JavaScript 번들이 제공되며, 첫 페이지 로드 시에는 해당 페이지에 필요한 번들만 클라이언트에 전달됩니다. 이후 다른 페이지 이동 시에는 이를 CSR(Client-Side Rendering) 방식으로 처리합니다. 즉, 필요한 번들을 미리 가져와 클라이언트 측에서 React 컴포넌트의 생명주기를 시작하게 됩니다.

3. RSC Payload와 클라이언트 컴포넌트

클라이언트 컴포넌트에서도 RSC Payload를 보게 되는 경우가 발생할 수 있습니다. 이는 주로 서버와 클라이언트 간 상태 동기화 및 컴포넌트 트리 관리를 위해 사용하는 메커니즘입니다. 클라이언트 컴포넌트의 경우 이 데이터를 통해 동적 컴포넌트의 구성을 완료하며 초기 상태를 유지합니다. RSC Payload는 브라우저가 클라이언트 측에서 필요한 데이터를 최적화하여 가져오도록 돕는 역할을 합니다.

관련 링크

위의 링크들은 유사한 주제에 대해 더 많은 정보를 제공할 수 있으니 참고해 보시기 바랍니다.

저는 질문자님의 이해를 돕기 위해 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

Next.js 사전렌더링 이해하기 부분

0

17

1

모달 관련 질문

0

30

3

렌더링 관련 질문

0

76

2

중복으로 하나의 api를 요청할 때 캐싱 옵션 통일화

0

59

2

라우트 세그먼트 옵션 강좌 노트에 사소한 제보 남깁니다.

0

60

2

SSR시 context에 params말고 query를 사용하면 안되나요?

0

73

2

npx prisma db push 시 에러가 뜹니다.

0

91

3

vercel 배포를 실패하였습니다.

0

93

3

Image 컴포넌트 사용시 브라우저 콘솔에 경고는 왜 뜨는걸까요?

0

54

2

getServerSideProps 함수와 SSR의 관계

0

76

6

없는 페이지인데 풀라우트캐시로 저장이 되는 이유가 궁금합니다

0

58

2

실제 프로젝트에서 SSR 사용에 관해서 질문드립니다.

0

112

2

일반적인 nextjs project architecture에 대하여..

0

83

2

2.14 Search에서 작성한건 static이긴하지만 CSR이 아닌가요?

0

71

2

배포 시 오류 발생

0

83

2

백엔드 서버 오류납니다.

0

79

2

취약점 제거시 nestjs 버전 문제가 생길까요?

0

89

1

eslint.config.mjs 내 rules 어떻게 설정 하나요?

0

102

1

[book]/[id]/page.tsx 모달 띄울 때 성능 하락 현상은 ReviewList를 불러오면서 발생하는 문제 같습니다.

0

60

2

빨간줄 설정

0

74

2

익스텐션 질문

0

58

1

강의 들으면서 궁금한 부분 질문드립니다.

0

108

1

서버 배포 에러입니다.

1

97

2

[5.2) 풀라우트 캐시 2] fetch의 cache 옵션 기본값 질문: no-store/force-cache

1

102

2