인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

파미에스테이션님의 프로필 이미지

작성한 질문수

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

3.5) 리액트 서버 컴포넌트 주의사항

서버컴포넌트를 children으로 사용해도, 브라우저에서 출력이 되는 것 같습니다.

해결된 질문

작성

·

116

·

수정됨

1

3.5) 리액트 서버 컴포넌트 주의사항
강의의 12분 쯤

- 서버 컴포넌트를 클라이언트 컴포넌트의 children props로 사용하면, 브라우저에서 서버컴포넌트가 렌더링 되지 않는 걸 보여주는 예시에서요.

  • (with-searchbar)/page.tsx1

image.png

 

  • (with-searchbar)/client-component.tsx

     

    image.png

     

(with-searchbar)/server-component.tsx

image.png



현재 잘 따라한거 같은데, 서버 컴포넌트가 브라우저에 출력이 되더라구요.

image.png


서버 컴포넌트로서 출력이 된거 같긴한데.

image.png


브라우저에서 서버 컴포넌트가 보이면 안되는 거 아닌가 싶은데, 현재 next 15.3 이라서 그런건가 싶기도 하구요!

답변 2

0

이정환 Winterlood님의 프로필 이미지
이정환 Winterlood
지식공유자

안녕하세요 이정환입니다.

먼저 출력된 콘솔 메세지의 좌측을 보시면 "server" 라고 되어 있는걸 보실 수 있는데요, 이는 Next.js 앱과 브라우저에서 개발 도중에 로그를 더 쉽게 살펴볼 수 있도록 서버측 콘솔을 브라우저에도 띄워주는 기능입니다. 실제로 배포를 목적으로 프로덕션으로 앱을 가동하시면 해당 메세지는 브라우저에서는 확인할 수 없게 됩니다.

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. 최지호님.

Next.js에서 클라이언트 컴포넌트와 서버 컴포넌트 간의 상호작용과 렌더링에 대해 살펴보겠습니다.

서버 컴포넌트와 클라이언트 컴포넌트

  1. 서버 컴포넌트는 서버에서 렌더링되어 HTML로 전달되며, 클라이언트에서의 작업이 불필요합니다. 서버 컴포넌트는 클라이언트에서 직접적으로는 사용되지 않기 때문에 주로 데이터를 불러와 그 결과를 클라이언트 컴포넌트로 전달합니다.

  2. 클라이언트 컴포넌트는 클라이언트 사이드에서 작업이 필요한 경우 주로 사용됩니다. 서적, 상태 관리, 이벤트 핸들링 등을 담당합니다.

왜 브라우저에 서버 컴포넌트가 출력되는지?

Next.js의 버전 13 이상에서는 서버와 클라이언트 컴포넌트를 혼합하여 사용할 수 있습니다. 현재 문제는 클라이언트 컴포넌트 내에서 서버 컴포넌트를 Children으로 사용했을 때 발생하는 것으로 보입니다. 이는 서버 컴포넌트가 클라이언트에서 직접 JavaScript로 로딩되거나 로깅되는 상황일 수 있습니다.

다음의 점들로 접근해볼 수 있습니다:
- 서버 컴포넌트의 로깅: 로그 메시지가 클라이언트 콘솔에 나타난다면, 이는 서버에서 해당 컴포넌트가 렌더링되고 있음을 의미합니다. 이는 서버 측에서 로그가 클라이언트 측 콘솔로 전달되는 경우입니다.
- 빌드 및 Hydration 과정: Next.js는 초기 빌드 후 클라이언트에서 필요한 부분만 Hydrate합니다. 이 과정에서 서버 컴포넌트와 클라이언트 컴포넌트의 재조정이 있을 수 있습니다.

관련 자료 보기

유사한 문제나 상호작용에 대한 이야기를 이미 많이 다뤘습니다. 더 자세한 내용을 확인하는 것이 도움이 될 수 있습니다:
- 클라이언트 컴포넌트가 서버에서 어떻게 렌더링되는지 궁금합니다!: 클라이언트 컴포넌트와 서버 컴포넌트의 렌더링 과정을 설명하는 추가 정보가 포함되어 있습니다.

위 내용을 참고하여, 브라우저에서 서버 컴포넌트가 어떻게 렌더링 되는지를 보다 구체적으로 이해할 수 있을 것입니다. Next.js의 버전에 따라 동작 방식이 약간씩 다를 수 있으며, 공식 문서를 통해 더욱 최근의 변경 사항을 확인하는 것이 좋습니다.

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