๐Ÿธminzzi
Minzzi์•ผ
๐Ÿธminzzi
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (131)
    • ์˜ค๋ฅ˜ํ•ด๊ฒฐ (14)
    • FE (36)
      • Next.js (17)
      • React (4)
      • React Native (0)
      • TypeScript (1)
      • JavaScript (14)
    • BE (0)
      • Nest.js (0)
    • ๋ฐ๋ธŒ์ฝ”์Šค (7)
    • ์›น ํ”„๋กœ์ ํŠธ (5)
    • CS (28)
      • Algorithm (5)
      • Python (4)
      • C++ (2)
      • Operating System (4)
      • Computer Networking (3)
      • Data Structure (1)
      • Machine Learning (3)
      • Tip (6)
    • Github (4)
    • Flutter (3)
      • ํ”„๋กœ์ ํŠธ (3)
    • Private (27)
      • ํšŒ๊ณ  (7)
      • ๋ฉด์ ‘ (17)
    • ๊ฐœ๋ฐœ๋„์„œ (6)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • next.js
  • ์›์‹œํƒ€์ž…
  • ๋ ‰์‹œ์ปฌ
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ
  • layout shift
  • reflow
  • ์ด๋ฒคํŠธ๋ฃจํ”„
  • ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…
  • ์ด๋ฏธ์ง€ ์ตœ์ ํ™”
  • ํž™์˜์—ญ
  • ๋ฉด์ ‘
  • ์ฝœ์Šคํƒ
  • SSR
  • ์˜ค๋ธ”์™„
  • ์‹คํ–‰์ปจํƒ์ŠคํŠธ
  • ํ‹ฐ์Šคํ† ๋ฆฌ์ฑŒ๋ฆฐ์ง€
  • ์‹คํ–‰์ปจํ…์ŠคํŠธ
  • ๋ชจ๋˜๋ฆฌ์•กํŠธ๋”ฅ๋‹ค์ด๋ธŒ
  • react
  • ํ˜ธ์ด์ŠคํŒ…

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
๐Ÿธminzzi

Minzzi์•ผ

FE/Next.js

[Next.js] page router - SSR

2025. 5. 5. 16:40
ํ•œ ์ž… ํฌ๊ธฐ๋กœ ์ž˜๋ผ๋จน๋Š” Next.js ํ•™์Šต์ •๋ฆฌ์šฉ์ž…๋‹ˆ๋‹ค. 
2.11) SSR 1. ์†Œ๊ฐœ ๋ฐ ์‹ค์Šต
2.12) SSR 2. ์‹ค์Šต

getServerSideProps

getServerSideProps๋Š” ํŽ˜์ด์ง€๊ฐ€ SSR ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์ „ ๋ Œ๋”๋ง์ด ์ด๋ฃจ์–ด์ง€๊ฒŒ ํ•œ๋‹ค.

export const getServerSideProps = () => {
  // ์ปดํฌ๋„ŒํŠธ๋ณด๋‹ค ๋จผ์ € ์‹คํ–‰๋˜์–ด์„œ, ์ปดํฌ๋„ŒํŠธ์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ๋ถˆ๋Ÿฌ์˜ค๋Š” ํ•จ์ˆ˜
  const data = "hello";

  return {
    props: {
      data,
    },
  };
};

getServerSideProps๋Š” ์•ฝ์†๋œ ์ด๋ฆ„์˜ ํ•จ์ˆ˜์ธ๋ฐ ์ด๋ฅผ exportํ•˜๋ฉด ํ•ด๋‹น ํŽ˜์ด์ง€๋Š” ๊ทธ๋•Œ๋ถ€ํ„ฐ SSR๋กœ ๋™์ž‘ํ•˜๊ฒŒ ๋œ๋‹ค.
 

์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”๊ฐ€

1. ํ•ด๋‹น ํŽ˜์ด์ง€ ๊ฒฝ๋กœ๋กœ ํŽ˜์ด์ง€๋ฅผ ์š”์ฒญ
2. ๋„ฅ์ŠคํŠธ ์„œ๋ฒ„๊ฐ€ ์‚ฌ์ „ ๋ Œ๋”๋ง์„ ํ•˜๊ฒŒ ๋  ๋•Œ getServerSideProps ํ•จ์ˆ˜๋ฅผ ๋จผ์ € ์‹คํ–‰
-> ํ•ด๋‹น ํŽ˜์ด์ง€์—์„œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฅธ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰

getServerSideProps ํ•จ์ˆ˜๋Š” ํŽ˜์ด์ง€ ์—ญํ• ์„ ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋ณด๋‹ค ๋จผ์ € ์‹คํ–‰์ด ๋˜์–ด ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ์— ํ•„์š”ํ•œ ๋ฐฑ์—”๋“œ ๋ฐ์ดํ„ฐ ๋“ฑ์„ ๋ฏธ๋ฆฌ ๋ถˆ๋Ÿฌ์˜ค๋Š” ์—ญํ• ์„ ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

 

ํ•จ์ˆ˜์˜ ์•ฝ์†๋˜์–ด์ง„ ๊ตฌ์กฐ(ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๋ฌธ๋ฒ•)

return ๊ฐ’์— props๋ผ๋Š” ํ”„๋กœํผํ‹ฐ๋กœ ๊ฐ์ฒด๋กœ ์ „๋‹ฌํ•˜๋„๋ก ํ•ด์•ผํ•œ๋‹ค.
 

ํŠน์ง•

getServerSideProps๋Š” ์˜ค์ง ์„œ๋ฒ„ ์ธก์—์„œ๋งŒ ์‹คํ–‰์ด ๋˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.
๋”ฐ๋ผ์„œ console.log ๋“ฑ ์ถœ๋ ฅ์„ ์ง„ํ–‰ํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ € ์ฝ˜์†”์— ๋ณด์ด์ง€ ์•Š๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. (๋Œ€์‹  ํ„ฐ๋ฏธ๋„ ์ฝ˜์†”์—๋Š” ์ถœ๋ ฅ์ด ๋œ๋‹ค.)

export default function Home({
  data,
}: InferGetServerSidePropsType<typeof getServerSideProps>) {
...

 
๋˜ํ•œ ์ด ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ๋Š” ์„œ๋ฒ„์—์„œ ํ•œ๋ฒˆ ์‹คํ–‰๋˜๊ณ , ๋ธŒ๋ผ์šฐ์ €์—์„œ ํ•œ ๋ฒˆ ๋” ์‹คํ–‰์ด ๋œ๋‹ค.
1) ์‚ฌ์ „ ๋ Œ๋”๋ง์„ ์œ„ํ•ด ์„œ๋ฒ„์ธก์—์„œ ์‹คํ–‰
2) ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฒˆ๋“ค ํ˜•ํƒœ๋กœ ์ „๋‹ฌ๋˜๊ณ  ๋ธŒ๋ผ์šฐ์ € ์ธก์—์„œ ์‹คํ–‰
 
์ด๋Š” ๋ธŒ๋ผ์šฐ์ € ์ ‘๊ทผํ•˜๋Š” window๋ฅผ ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ์— ์ž‘์„ฑํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ํ•œ๋‹ค.
๋”ฐ๋ผ์„œ ๋ธŒ๋ผ์šฐ์ €์—์„œ๋งŒ ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด useEffect๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. (useEffect๋Š” ๋งˆ์šดํŠธ ๋œ ์ดํ›„์— ๋™์ž‘ํ•˜๋Š” ์ฝ”๋“œ์ด๊ธฐ ๋•Œ๋ฌธ์—)

useEffect(() => {
    console.log(window);
  }, []);

 

getServerSideProps๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ๋ฐ›์€ ๋ฐ์ดํ„ฐ props ํƒ€์ž…

Next.js์—์„œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹ค์–‘ํ•œ ๋‚ด์žฅ ํƒ€์ž…์ด ์กด์žฌ.
InferGetServerSidePropsType : getSerberSideProps์˜ ๋ฐ˜ํ™˜๊ฐ’ ํƒ€์ž…์„ ์ž๋™์œผ๋กœ ์ถ”๋ก ํ•ด์คŒ

export default function Home({
  data,
}: InferGetServerSidePropsType<typeof getServerSideProps>) {
...

getServerSideProps์—์„œ query string ์–ป๋Š” ๋ฐฉ๋ฒ•

export const getServerSideProps = async (
  context: GetServerSidePropsContext
) => {
  const q = context.query.q;
  const books = await fetchBooks(q as string);

  return {
    props: { books },
  };
};
//@/lib/fetch-books.ts

import { BookData } from "@/types";

export default async function fetchBooks(q?: string): Promise<BookData[]> {
  let url = `http://localhost:12345/book`;

  if (q) {
    url += `/search?q=${q}`;
  }

  try {
    const response = await fetch(url);
    if (!response.ok) {
      throw new Error();
    }

    return await response.json();
  } catch (err) {
    console.error(err);
    return [];
  }
}
์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'FE > Next.js' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Next.js] Page Router - ISR  (4) 2025.05.06
[Next.js] page router - SSG(์ •์  ์‚ฌ์ดํŠธ ์ƒ์„ฑ)  (1) 2025.05.06
[Next.js] page router ์‚ฌ์ „ ๋ Œ๋”๋ง๊ณผ ๋ฐ์ดํ„ฐํŽ˜์นญ  (0) 2025.05.05
[Next.js] page router ํŽ˜์ด์ง€๋ณ„ ๋ ˆ์ด์•„์›ƒ ์„ค์ •  (1) 2025.05.03
[Next.js] page router - API Routes  (0) 2025.05.03
    'FE/Next.js' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [Next.js] Page Router - ISR
    • [Next.js] page router - SSG(์ •์  ์‚ฌ์ดํŠธ ์ƒ์„ฑ)
    • [Next.js] page router ์‚ฌ์ „ ๋ Œ๋”๋ง๊ณผ ๋ฐ์ดํ„ฐํŽ˜์นญ
    • [Next.js] page router ํŽ˜์ด์ง€๋ณ„ ๋ ˆ์ด์•„์›ƒ ์„ค์ •
    ๐Ÿธminzzi
    ๐Ÿธminzzi

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”