2025.1.13 월요일의 공부기록
Next.js에서 데이터를 가져올 때, 클라이언트 사이드와 서버 사이드에서 Fetching을 수행할 수 있다.
두 방식은 동작 방식, 성능, SEO 적합성에서 차이를 보이며, 각각의 장단점이 있다.
클라이언트 사이드에서 데이터를 Fetching하는 방식은 브라우저에서 JavaScript 코드가 실행된 후 데이터를 요청하는 방식이다.
"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 <div>{isLoading ? "Loading..." : JSON.stringify(movies)}</div>;
}
useEffect
로 데이터를 Fetching한다.서버 사이드에서 데이터를 Fetching하는 방식은 Next.js 서버가 요청을 처리하는 동안 데이터를 Fetch하여 HTML에 포함하는 방식이다.
export const metadata = {
title: "Home",
};
const URL = "https://nomad-movies.nomadcoders.workers.dev/movies";
async function getMovies() {
await new Promise((resolve) => setTimeout(resolve, 5000)); // 로딩 상태 확인을 위해 5초 대기
return fetch(URL).then((response) => response.json());
}
export default async function HomePage() {
const movies = await getMovies();
return <div>{JSON.stringify(movies)}</div>;
}
항목 | 클라이언트 사이드 Fetching | 서버 사이드 Fetching |
---|---|---|
SEO | 검색 엔진이 데이터를 크롤링할 수 없음 | 데이터를 포함한 HTML이 제공되어 SEO에 유리 |
초기 로딩 속도 | 빠름 (HTML만 제공) | 느림 (HTML 생성에 데이터 Fetch 포함) |
사용자 경험 | 데이터 로딩이 완료되기 전까지 "로딩 상태"를 표시 | 데이터 포함 HTML 제공으로 즉시 UI 표시 가능 |
서버 부하 | 브라우저에서 Fetch하므로 서버 부하가 낮음 | 서버가 Fetch 작업을 처리하므로 부하가 높아질 수 있음 |
데이터 처리 | 사용자가 특정 조건에서 데이터를 동적으로 Fetch 가능 | 초기 HTML 렌더링 시 데이터를 포함하여 일관성 제공 |
SEO가 중요한 경우
서버 사이드 Fetching을 선택하여 검색 엔진 크롤링을 최적화한다.
사용자 상호작용이 많은 경우
클라이언트 사이드 Fetching을 사용하여 상호작용과 데이터 로딩을 유연하게 처리한다.
서버 부하 관리가 필요한 경우
클라이언트 사이드 Fetching을 통해 서버 부담을 줄일 수 있다.