오직 서버측에서만 실행되는 컴포넌트
기존 next.js는 js bundle을 브라우저로 넘길 때 'react hook, 이벤트 핸들러' 등 상호작용이 있는 컴포넌트와 상호작용이 없는 컴포넌트 둘 다 넘긴다.
상호작용이 없는 컴포넌트는 굳이 브라우저에 여러번 전송(hydration)할 필요가 없다.
페이지 라우터는 모든 컴포넌트를 묶어 브라우저에 전송하기 때문에 js bundle의 용량이 커지게 된다.
그래서 이런 문제를 해결하기 위해 서버 컴포넌트를 사용한다.
딱 한번만 실행되고 여러번 실행될 필요가 없다.
기본적으로 모든 컴포넌트가 서버 컴포넌트이기 때문에 클라이언 컴포넌트(기본 상호작용이 있는 컴포넌트)만 따로 설정해주면 된다. - console.log가 찍히지 않음
"use client"
클라이언트 컴포넌트로 만들고자 하는 파일 맨위에 디렉티브(지시자- 상단의 문구)를 입력해준다. (따옴표까지)
서버 컴포넌트
HTML의 고유의 기능인 link 등은 서버
클라이언트 컴포넌트
useState, useEffect 등 상호작용이 일어나는 페이지
1. 서버 컴포넌트에는 브라우저에서 실행될 코드가 포함되어서는 안된다.
2. 클라이언트 컴포넌트는 클라이언트만 실행되지 않는다.
3. 클라이언트 컴포넌트에서 서버 컴포넌트를 import 할 수 없다.
4. 서버 컴포넌트에서 클라이언트 컴포넌트에게 직렬화 되지 않는 Props는 전달 불가하다.