Page Router vs App Router vs React Server Components

Page Router vs App Router vs React Server Components

D
dongAuthor
6 min read

React ์ƒํƒœ๊ณ„๊ฐ€ ์ง„ํ™”ํ•จ์— ๋”ฐ๋ผ Next.js๋Š” ๊ฐœ๋ฐœ์ž๋“ค์—๊ฒŒ ๋‹ค์–‘ํ•œ ๋ Œ๋”๋ง ์˜ต์…˜์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ NextJS์˜ Page Router SSR(Server Side Rendering)๊ณผ React Server Components(RSC)๊ฐ€ ์žˆ์ฃ . ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ์ „ํ†ต์ ์ธ Next.js Page Router ๊ธฐ๋ฐ˜์˜ SSR๊ณผ Next.js App Router ๊ธฐ๋ฐ˜์˜ SSR, ๊ทธ๋ฆฌ๊ณ  React Server Components์˜ ์ฐจ์ด์ ์„ ์‚ดํŽด๋ด…์‹œ๋‹ค.


NextJS App Router Server Component = React Server Component?

NextJs Docs ์ค‘ NextJS Server Components๋Š” React ๊ธฐ๋ฐ˜์ด๋ผ๋Š” ์„ค๋ช…

๊ฒฐ๋ก ๋ถ€ํ„ฐ ๋ง์”€๋“œ๋ฆฌ๋ฉด NextJS App Router์˜ Server Component๋Š” React์˜ Server Component๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค. React ํŒ€์ด ์„ค๊ณ„ํ•œ Server Component์˜ ํ•ต์‹ฌ ์•„์ด๋””์–ด๋ฅผ Next.js๊ฐ€ ๋ฐ›์•„๋“ค์—ฌ, App Router๋ฅผ ํ†ตํ•ด ์ด์— ๋งž๋Š” ์ƒํƒœ๊ณ„๋ฅผ ๋น ๋ฅด๊ฒŒ ๊ตฌํ˜„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹ค๋งŒ, Page Router์˜ SSR์€ ์กฐ๊ธˆ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. React Server Component๊ฐ€ ๋‚˜์˜ค๊ธฐ ์ด์ „์— ๋จผ์ € NextJS์—์„œ React์™€ SSR์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ธฐ ์œ„ํ•œ ๋…์ž์ ์ธ ๊ธฐ์ˆ ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๐Ÿค”

์ž ์ผ๋‹จ Page Router๋ฅผ ํ•œ ๋ฒˆ ๋ณด๋„๋ก ํ•ฉ์‹œ๋‹ค !


Next.js Page Router ๊ธฐ๋ฐ˜์˜ SSR

Next.js Page Router์—์„œ SSR์€ getServerSideProps๋ผ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค. ์ด ๋ฉ”์„œ๋“œ๋Š” ํŽ˜์ด์ง€ ์š”์ฒญ ์‹œ ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž๋Š” ์š”์ฒญ ์‹œ์ ์— ์ตœ์‹  ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ Œ๋”๋ง๋œ HTML์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋Š” SEO ์ตœ์ ํ™”์™€ ๋™์  ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๊ฐ€ ์ค‘์š”ํ•œ ํ”„๋กœ์ ํŠธ์—์„œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

Page Router์—์„œ์˜ SSR์˜ ์ฃผ๋œ ํŠน์ง•์€ ํŽ˜์ด์ง€ ๋‹จ์œ„์˜ ๋ฐ์ดํ„ฐ ์š”์ฒญ๊ณผ ์ฒ˜๋ฆฌ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๊ฐ๊ฐ์˜ ํŽ˜์ด์ง€๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ๋ Œ๋”๋งํ•˜๋„๋ก ์„ค๊ณ„๋˜์–ด ์žˆ์–ด, ๊ตฌ์„ฑ๊ณผ ๋ฐ์ดํ„ฐ ์š”์ฒญ ๋กœ์ง์ด ๋ช…ํ™•ํ•˜๊ฒŒ ๋ถ„๋ฆฌ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ชจ๋“  ํŽ˜์ด์ง€ ์š”์ฒญ๋งˆ๋‹ค ์„œ๋ฒ„์—์„œ ์ „์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํŠธ๋ž˜ํ”ฝ์ด ๋งŽ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” ์„œ๋ฒ„ ๋ถ€ํ•˜๊ฐ€ ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ์‚ดํŽด๋ณด๋ฉด, ์•„๋ž˜๋Š” getServerSideProps๋ฅผ ์ด์šฉํ•œ ๊ธฐ๋ณธ์ ์ธ SSR ๊ตฌํ˜„์ž…๋‹ˆ๋‹ค:

export async function getServerSideProps(context) {
  const res = await fetch('https://api.example.com/data');
  const data = await res.json();

  return {
    props: { data },
  };
}

export default function Page({ data }) {
  return <div>{data.title}</div>;
}

์œ„์˜ ์ฝ”๋“œ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ํŽ˜์ด์ง€ ๋กœ๋“œ ์‹œ ์„œ๋ฒ„์—์„œ ๊ฐ€์ ธ์˜ค๋ฉฐ, ์ด ๋ฐ์ดํ„ฐ๋Š” ํด๋ผ์ด์–ธํŠธ์— HTML๋กœ ๋ณด๋‚ด์ง‘๋‹ˆ๋‹ค. ์ด์ฒ˜๋Ÿผ Page Router ๊ธฐ๋ฐ˜์˜ SSR์€ ๋ช…ํ™•ํ•œ ๋ฐ์ดํ„ฐ ํ๋ฆ„๊ณผ SEO ์นœํ™”์  ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.


Next.js App Router์™€ React Server Components

NextJS Server Component ์˜ˆ์‹œ ์‚ฌ์ง„

Next.js 13์—์„œ App Router๊ฐ€ ๋„์ž…๋˜๋ฉฐ React Server Components(RSC)๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ตฌ์„ฑ์ด ๊ฐ€๋Šฅํ•ด์กŒ์Šต๋‹ˆ๋‹ค. RSC๋Š” ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ๊ฒฝ๊ณ„๋ฅผ ๋” ํšจ๊ณผ์ ์œผ๋กœ ์„ค์ •ํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค. App Router ๊ธฐ๋ฐ˜์˜ SSR์€ ๊ธฐ์กด Page Router๋ณด๋‹ค ๋” ์„ธ๋ถ€์ ์ด๊ณ  ์ปดํฌ๋„ŒํŠธ ์ค‘์‹ฌ์ ์ธ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

App Router๋Š” ๋ฐ์ดํ„ฐ ์š”์ฒญ๊ณผ ๋ Œ๋”๋ง์˜ ์œ ์—ฐ์„ฑ์„ ์ œ๊ณตํ•˜๋ฉฐ, ํŠน์ • ์ปดํฌ๋„ŒํŠธ๋ฅผ ์„œ๋ฒ„์—์„œ ๋ Œ๋”๋งํ•˜๊ณ  ๋‚˜๋จธ์ง€๋Š” ํด๋ผ์ด์–ธํŠธ์—์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์„ ํ†ตํ•ด ์ดˆ๊ธฐ ๋กœ๋“œ ์‹œ๊ฐ„์„ ์ค„์ด๋ฉด์„œ๋„ ์„œ๋ฒ„์˜ ๊ณ„์‚ฐ ๋ถ€ํ•˜๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๋ถ„์‚ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. RSC๋Š” React์˜ ์ฒ ํ•™์ธ ์„ ์–ธ์  UI์™€ ์„œ๋ฒ„ ์ค‘์‹ฌ ๋ Œ๋”๋ง์„ ๊ฒฐํ•ฉํ•˜์—ฌ ๊ฐœ๋ฐœ์ž๋“ค์ด ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„์˜ ์„ฑ๋Šฅ์„ ๊ทน๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

RSC์˜ ์ฃผ์š” ์žฅ์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  • ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„์˜ ๋ฐ์ดํ„ฐ ํŽ˜์นญ: ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ์„œ๋ฒ„์—์„œ ๊ฐ€์ ธ์˜ค๋ฏ€๋กœ ํŠธ๋ž˜ํ”ฝ ๋น„์šฉ์ด ๊ฐ์†Œํ•ฉ๋‹ˆ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ์˜ ๋ฒˆ๋“ค ํฌ๊ธฐ ๊ฐ์†Œ: ๋ถˆํ•„์š”ํ•œ ํด๋ผ์ด์–ธํŠธ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
  • ์œ ์—ฐํ•œ ์ƒํƒœ ๊ด€๋ฆฌ: ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„ ์ƒํƒœ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ์„น์…˜์—์„œ๋Š” App Router์™€ RSC๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋”ฉ ํŒจํ„ด๊ณผ ๊ณ ๋ คํ•ด์•ผ ํ•  ์‹ค๋ฌด์ ์ธ ์ด์Šˆ๋“ค์„ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.


Next.js Page Router ๊ธฐ๋ฐ˜ SSR vs App Router ๊ธฐ๋ฐ˜ SSR

Next.js๋Š” Page Router(๊ธฐ์กด ๋ฐฉ์‹)์™€ App Router(React Server Components ๊ธฐ๋ฐ˜)๋ผ๋Š” ๋‘ ๊ฐ€์ง€ ํ•ต์‹ฌ ๋ผ์šฐํŒ… ๋ฐฉ์‹์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋‘ ๋ฐฉ์‹ ๋ชจ๋‘ SSR์„ ์ง€์›ํ•˜์ง€๋งŒ, ์ž‘๋™ ๋ฐฉ์‹๊ณผ ์ฒ ํ•™์€ ์™„์ „ํžˆ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

1. Page Router ๊ธฐ๋ฐ˜ SSR

Page Router๋Š” Next.js์˜ ์ „ํ†ต์ ์ธ ๋ผ์šฐํŒ… ๋ฐฉ์‹์œผ๋กœ, ์ฃผ๋กœ getServerSideProps๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฐฉ์‹์€ React ์ปดํฌ๋„ŒํŠธ๋ฅผ ์„œ๋ฒ„์—์„œ HTML๋กœ ๋ Œ๋”๋งํ•œ ๋’ค, ํด๋ผ์ด์–ธํŠธ๋กœ ์ „์†กํ•˜๊ณ  ํ•˜์ด๋“œ๋ ˆ์ด์…˜ ๊ณผ์ •์„ ํ†ตํ•ด ์ธํ„ฐ๋ž™์…˜์„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

ํŠน์ง•๊ณผ ์ž‘๋™ ์›๋ฆฌ

  • ๋ฐ์ดํ„ฐ ํŽ˜์นญ: getServerSideProps๋ฅผ ์‚ฌ์šฉํ•ด ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฏธ๋ฆฌ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
  • HTML ๋ Œ๋”๋ง: React ์ปดํฌ๋„ŒํŠธ๋ฅผ ์„œ๋ฒ„์—์„œ HTML ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • ํ•˜์ด๋“œ๋ ˆ์ด์…˜: ํด๋ผ์ด์–ธํŠธ์—์„œ JavaScript๊ฐ€ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์™€ ์ƒํƒœ๋ฅผ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.
  • SEO ์นœํ™”์ : ๊ฒ€์ƒ‰ ์—”์ง„ ํฌ๋กค๋Ÿฌ๊ฐ€ HTML ์ฝ˜ํ…์ธ ๋ฅผ ์ฆ‰์‹œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
// Page Router ๊ธฐ๋ฐ˜ SSR ์˜ˆ์‹œ
export async function getServerSideProps() {
  const data = await fetch('https://api.example.com/data');
  return {
    props: { data },
  };
}

export default function Page({ data }) {
  return <div>{data.title}</div>;
}

ํ•œ๊ณ„์ 

  • ๋ฒˆ๋“ค ํฌ๊ธฐ ์ฆ๊ฐ€: ๋ชจ๋“  JavaScript๊ฐ€ ํด๋ผ์ด์–ธํŠธ๋กœ ์ „์†ก๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ดˆ๊ธฐ ๋กœ๋”ฉ ์†๋„๊ฐ€ ๋А๋ ค์งˆ ์ˆ˜ ์žˆ์Œ.
  • ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ํ๋ฆ„: ๋ฐ์ดํ„ฐ ํŽ˜์นญ ๋กœ์ง์ด ์ปดํฌ๋„ŒํŠธ ์™ธ๋ถ€์— ์œ„์น˜ํ•˜์—ฌ ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ์Œ.

2. App Router ๊ธฐ๋ฐ˜ SSR (React Server Components ํ™œ์šฉ)

Next.js 13๋ถ€ํ„ฐ ๋„์ž…๋œ App Router๋Š” React Server Components๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์„ค๊ณ„๋˜์–ด ์™„์ „ํžˆ ๋‹ค๋ฅธ SSR ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. App Router ๊ธฐ๋ฐ˜์˜ SSR์€ React Server Components(RSC)๋ฅผ ํ™œ์šฉํ•ด ์„œ๋ฒ„์—์„œ๋งŒ ์‹คํ–‰๋˜๋Š” ์ปดํฌ๋„ŒํŠธ์™€ ํด๋ผ์ด์–ธํŠธ์—์„œ ์‹คํ–‰๋˜๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

ํŠน์ง•๊ณผ ์ž‘๋™ ์›๋ฆฌ

  • React Server Components ํ™œ์šฉ: ์„œ๋ฒ„์—์„œ๋งŒ ์‹คํ–‰๋˜๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ HTML ๋Œ€์‹  RSC Payload๋ผ๋Š” ์ง๋ ฌํ™”๋œ ๋ฐ์ดํ„ฐ๋กœ ๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ ๊ฒฝ๊ณ„: 'use client'๋ฅผ ์‚ฌ์šฉํ•ด ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฒˆ๋“ค ํฌ๊ธฐ ์ตœ์ ํ™”: ์„œ๋ฒ„ ์ „์šฉ ๋กœ์ง์€ ํด๋ผ์ด์–ธํŠธ๋กœ ์ „์†ก๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ JavaScript ๋ฒˆ๋“ค์ด ์ž‘์•„์ง‘๋‹ˆ๋‹ค.
  • ์ ์ง„์  ์ŠคํŠธ๋ฆฌ๋ฐ: ์„œ๋ฒ„์—์„œ ๋ Œ๋”๋ง๋œ ์ฝ˜ํ…์ธ ๋ฅผ ์ฒญํฌ ๋‹จ์œ„๋กœ ์ŠคํŠธ๋ฆฌ๋ฐํ•ด ์ดˆ๊ธฐ ๋กœ๋”ฉ ์†๋„๋ฅผ ๊ฐœ์„ ํ•ฉ๋‹ˆ๋‹ค.
// App Router ๊ธฐ๋ฐ˜ SSR ์˜ˆ์‹œ
// app/page.js (Server Component)
export default async function Page() {
  const data = await fetch('https://api.example.com/data');
  return <div>{data.title}</div>;
}

// components/Button.js (Client Component)
'use client';

export default function Button() {
  return <button>Click Me</button>;
}

์ด์ 

  • ์„ฑ๋Šฅ ์ตœ์ ํ™”: ์„œ๋ฒ„ ์ „์šฉ ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ์˜ JavaScript ๋กœ๋“œ๋ฅผ ์ตœ์†Œํ™”.
  • ๋ฐ์ดํ„ฐ ํŽ˜์นญ ๋‹จ์ˆœํ™”: ์ปดํฌ๋„ŒํŠธ ์ž์ฒด์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ ํŽ˜์นญ.
  • ์ ์ง„์  ๋ Œ๋”๋ง: ๋ฐ์ดํ„ฐ๊ฐ€ ๋„์ฐฉํ•˜๋Š” ๋Œ€๋กœ ์ฝ˜ํ…์ธ ๋ฅผ ๋ Œ๋”๋งํ•ด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ํ–ฅ์ƒ.

ํ•œ๊ณ„์ 

  • ํ•™์Šต ๊ณก์„ : ๊ธฐ์กด Page Router ๋ฐฉ์‹์— ์ต์ˆ™ํ•œ ๊ฐœ๋ฐœ์ž๋“ค์—๊ฒŒ๋Š” ์ƒˆ๋กœ์šด ํŒจ๋Ÿฌ๋‹ค์ž„.
  • ์ œํ•œ๋œ ํด๋ผ์ด์–ธํŠธ ์ƒํƒœ ๊ด€๋ฆฌ: ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ ๋‚ด์—์„œ๋Š” ์ƒํƒœ ๊ด€๋ฆฌ ํ›…(useState, useEffect) ์‚ฌ์šฉ ๋ถˆ๊ฐ€.

React Server Components (RSC)

React Server Components๋Š” React 18์—์„œ ๋„์ž…๋œ ์ƒˆ๋กœ์šด ๊ฐœ๋…์œผ๋กœ, Next.js App Router์˜ ํ•ต์‹ฌ ๊ธฐ๋ฐ˜์ด ๋ฉ๋‹ˆ๋‹ค. RSC๋Š” ์„œ๋ฒ„์—์„œ๋งŒ ์‹คํ–‰๋˜๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ •์˜ํ•˜๊ณ , ํด๋ผ์ด์–ธํŠธ๋กœ๋Š” ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ์˜ ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ์ง๋ ฌํ™”๋œ ํ˜•ํƒœ๋กœ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.

RSC์˜ ํŠน์ง•

  1. ์„œ๋ฒ„ ์ „์šฉ ์‹คํ–‰: ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์„œ๋ฒ„์—์„œ๋งŒ ๋ Œ๋”๋ง๋˜๊ณ  ํด๋ผ์ด์–ธํŠธ๋กœ๋Š” ์ „์†ก๋˜์ง€ ์•Š์Œ.
  2. ์ƒํƒœ ์—†์Œ: ์ƒํƒœ ๊ด€๋ฆฌ ํ›… ์‚ฌ์šฉ ๋ถˆ๊ฐ€, ์ˆœ์ˆ˜ ๋ Œ๋”๋ง ๋กœ์ง์— ์ง‘์ค‘.
  3. ์ง์ ‘ ๋ฐ์ดํ„ฐ ํŽ˜์นญ: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ํŒŒ์ผ ์‹œ์Šคํ…œ ๋“ฑ์˜ ๋ฆฌ์†Œ์Šค์— ์ง์ ‘ ์ ‘๊ทผ ๊ฐ€๋Šฅ.
// React Server Component ์˜ˆ์‹œ
async function Post({ id }) {
  const post = await fetch(`https://api.example.com/posts/${id}`);
  return <div>{post.title}</div>;
}

RSC์˜ ๊ฐ•์ 

  • ๋ฒˆ๋“ค ํฌ๊ธฐ ๊ฐ์†Œ: ์„œ๋ฒ„ ์ „์šฉ ์ฝ”๋“œ๊ฐ€ ํด๋ผ์ด์–ธํŠธ ๋ฒˆ๋“ค์—์„œ ์ œ์™ธ.
  • ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๋‹จ์ˆœํ™”: ๋ณ„๋„์˜ API ๊ณ„์ธต ์—†์ด ๋ฐ์ดํ„ฐ ์†Œ์Šค์— ์ง์ ‘ ์ ‘๊ทผ ๊ฐ€๋Šฅ.
  • ์ŠคํŠธ๋ฆฌ๋ฐ ์ง€์›: ๋Œ€๊ทœ๋ชจ ํŽ˜์ด์ง€๋ฅผ ์ ์ง„์ ์œผ๋กœ ๋ Œ๋”๋ง ๊ฐ€๋Šฅ.

์‚ฌ๊ฒฌ ๋ฐ ๋งˆ๋ฌด๋ฆฌ

Next.js๊ฐ€ 2025๋…„์—๋„ ์—ฌ์ „ํžˆ ์›น ํ’€์Šคํƒ ํ”„๋ ˆ์ž„์›Œํฌ 1์œ„๋ฅผ ์œ ์ง€ํ•˜๊ณ  ์žˆ๋Š” ์ด์œ ๋Š” ๋ฐ”๋กœ ์ด๋Ÿฌํ•œ ๊ธฐ์ˆ  ํ˜์‹ ์— ๋Œ€ํ•œ ๋ฏผ์ฒฉ์„ฑ๊ณผ ์‹ค์šฉ์„ฑ ๋•Œ๋ฌธ์ด๋ผ๊ณ  ์ƒ๊ฐ๋ฉ๋‹ˆ๋‹ค. ๋น ๋ฅด๊ฒŒ ๋ณ€ํ™”ํ•˜๋Š” IT ํŠธ๋ Œ๋“œ์— ๋ฐœ๋งž์ถ˜ ์ง€์†์ ์ธ ์—…๋ฐ์ดํŠธ, ์‹ค๋ฌด ์ค‘์‹ฌ์˜ ๊ธฐ๋Šฅ ์ œ๊ณต, ๊ทธ๋ฆฌ๊ณ  ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ์ฒ ํ•™์ด ๊ฒฐํ•ฉ๋˜์–ด ๋งŽ์€ ๊ฐœ๋ฐœ์ž๋“ค์ด ๋ฏฟ๊ณ  ์„ ํƒํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ์ž๋ฆฌ ์žก์•˜๋‹ค๊ณ  ์ƒ๊ฐ๋˜๋„ค์š” !

Page Router vs App Router vs React Server Components | devdong