Next.js - Client Component, use client, 렌더링 정리 노트

·2025년 3월 31일

🖤 Next.js

목록 보기
2/11
post-thumbnail

1. 렌더링(Rendering)이란?

렌더링은 React 컴포넌트를 브라우저가 이해할 수 있는 HTML로 변환하는 작업.

  • 브라우저는 JavaScript 코드를 바로 이해하지 못하므로, React 코드를 HTML로 변환해줘야 함.
  • Next.js는 이 작업을 서버에서 미리 해주는 SSR(Server Side Rendering)을 기본으로 함.

2. CRA와 Next.js의 렌더링 방식 차이

🔸 CRA (Create React App)

  • Client Side Rendering (CSR) 방식
  • 모든 UI가 브라우저에서 JS를 통해 만들어짐.
  • 초기 페이지는 비어 있음 (<div id="root">)
  • JS가 다운로드되고 실행된 후에야 화면에 UI가 보임.
  • JS를 꺼두면 화면에 아무것도 안 보임.
  • SEO에 불리 (검색 엔진이 HTML을 분석할 수 없음).

🔸 Next.js

  • 기본적으로 Server Side Rendering (SSR) 사용
  • 서버에서 미리 HTML을 생성 → 브라우저는 바로 UI를 볼 수 있음
  • JS가 꺼져 있어도 기본적인 화면 표시 가능
  • SEO에 유리, 빠른 초기 렌더링 제공

3. 'use client'의 역할

  • Next.js에서는 기본적으로 모든 컴포넌트가 서버에서 먼저 렌더링됨.
  • 하지만 useState, useEffect, usePathname브라우저에서만 동작 가능한 기능을 사용하는 경우, 컴포넌트를 Client Component로 지정해야 함.
  • 이때 컴포넌트 파일 상단에 'use client'를 작성.
"use client"
  • 이 선언이 있으면 Next.js는 이 컴포넌트를 클라이언트에서 hydrate하고 상호작용이 가능하게 만듦.

4. 꼭 기억해야 할 사실 🔥

  • 'use client'가 있어도 해당 컴포넌트는 처음에는 서버에서 렌더링됨!
  • 즉, 초기 HTML은 서버에서 생성되어 브라우저에 전달됨.
  • 브라우저에서는 그 HTML을 hydrate(하이드레이션) 하며, React가 동작하면서 상호작용을 붙여줌.

5. 콘솔 로그로 확인해보기

"use client"
console.log("hello")
  • 위 코드는 console.log('hello')가 서버 콘솔에 출력됨.
  • 이건 컴포넌트가 처음엔 서버에서 렌더링되었다는 확실한 증거.

6. 추가로 알아두면 좋은 개념 🌱

🔹 Hydration (하이드레이션)

  • 서버에서 HTML을 렌더링해서 브라우저에 보내고,
  • 브라우저는 그 HTML을 React 코드와 연결(hydrate) 하면서 동적인 UI로 바꿔줌.
  • 즉, SSR로 렌더된 HTML에 React의 생명력을 불어넣는 과정!

🔹 Server Component vs Client Component

구분Server ComponentClient Component
기본 렌더링 위치서버클라이언트
특징HTML 생성만, 상호작용 없음JS 동작 가능, 상호작용 가능
예시단순 텍스트, 데이터 fetch 컴포넌트버튼 클릭, 상태 변경 등
사용 시기페이지 초기화, SEO 필요한 경우상태관리, 이벤트 처리 필요할 때

Client Component를 사용할 땐 항상 'use client' 선언이 필요!


7. 요약 정리 ✍️

  • 렌더링이란: React → HTML 변환
  • CRA는 CSR → JS 없으면 UI 없음
  • Next.js는 기본 SSR → HTML 먼저 보여줌
  • 'use client'는 브라우저 전용 기능 사용할 때 필요
  • 서버에서 먼저 렌더링됨 → 이후 하이드레이션으로 상호작용 가능
  • usePathname, useState, useEffectClient Component에서만 사용 가능
profile
FE 개발 꿈틀이

0개의 댓글