티스토리 뷰
노마드 코더의 Next.js 시작하기 강의를 듣던 중, 두 컴포넌트의 특징과 차이점을 간단히 기록하기 위해 글을 작성한다.
1. 클라이언트 컴포넌트 (Client Component)
"use client";
import { useEffect, useState } from "react";
export default function Page() {
const [isLoading, setIsLoading] = useState(true);
const [movies, setMovies] = useState([]);
const getMovies = async () => {
const response = await fetch("https://nomad-movies.nomadcoders.workers.dev/movies");
const json = await response.json();
setMovies(json);
setIsLoading(false);
};
useEffect(() => {
getMovies();
}, []);
return <h1>{isLoading ? "Loading..." : JSON.stringify(movies)}</h1>;
}
- "use client"가 코드 상에 포함되어 있다.
- useState, useEffect 같은 훅을 이용해 데이터를 비동기로 가져와 관리한다.
- 페이지가 먼저 렌더링된 후, useEffect가 실행되어 데이터를 가져온다.
2. 서버 컴포넌트 (Server Component)
export const metadata = {
title: "Home",
};
async function getMovies() {
const response = await fetch(process.env.MOVIES);
const json = await response.json();
return json;
}
export default async function Page() {
const movies = await getMovies();
return <h1>{JSON.stringify(movies)}</h1>;
}
- 서버 컴포넌트에서 동작하며, 서버에서 데이터를 가져온 후 페이지가 렌더링된다.
- 클라이언트에서 로딩 상태를 관리하지 않고 데이터를 모두 받아온 후에 렌더링된다. 그렇기에 처음부터 완전한 HTML이 브라우저에 전달된다.
- 서버 컴포넌트는 브라우저에서 실행되지 않기에 useEffect, useState같은 훅은 이용할 수 없다. 데이터 패칭은 서버에서 처리되고 결과를 바로 렌더링할 수 있다.
3. 차이점 요약
- 실행 위치:
- 클라이언트 컴포넌트: 브라우저에서 실행
- 서버 컴포넌트: 서버에서 실행
- 데이터 패칭:
- 클라이언트 컴포넌트: 페이지가 먼저 렌더링된 후, useEffect를 통해 데이터를 가져옴. 초기 상태는 로딩 상태로 표시
- 서버 컴포넌트: 서버에서 데이터를 패칭한 후 HTML을 생성하여 클라이언트로 보냄. 로딩 상태가 필요 없음
- SEO 및 초기 렌더링 성능:
- 클라이언트 컴포넌트: 초기 로딩 시 SEO에 불리할 수 있으며, JavaScript가 실행되기 전까지 데이터를 가져올 수 없음
- 서버 컴포넌트: 서버에서 완전히 렌더링된 상태로 전송되므로 SEO와 초기 렌더링 성능이 향상됨
- 상태 관리 및 훅:
- 클라이언트 컴포넌트: useState, useEffect와 같은 훅을 사용할 수 있음
- 서버 컴포넌트: 훅을 사용할 수 없고, 상태 관리가 필요 없는 정적인 데이터 렌더링에 적합
'기록' 카테고리의 다른 글
Suspense 간단히 이용해보기 (0) | 2024.09.07 |
---|---|
로딩 컴포넌트 (0) | 2024.09.07 |
유저 이름 변경하기 (0) | 2024.08.25 |
게시물 업데이트하기 (2) | 2024.08.25 |
Firebase Storage의 규칙 코드를 잘못 작성해서 이미지 업로드가 안되던 현상 (0) | 2024.08.24 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 완전탐색
- async
- Redux
- NextJS
- 동적계획법
- Next.js
- 햄버거버튼
- CSS
- 자바스크립트
- 다이나믹프로그래밍
- 알고리즘
- typescript
- aws
- 순열
- 타입스크립트
- BFS
- C++
- 브루트포스
- 비트마스킹
- 리액트
- SQL
- themoviedb
- 스택
- 카카오맵
- 넥스트js
- 프로그래머스
- react
- 코드스테이츠
- 구현
- 백준
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
글 보관함