Skip to main content
Sonamu์—์„œ Server-Side Rendering(SSR)์„ ์„ค์ •ํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ด…๋‹ˆ๋‹ค.

SSR ๊ฐœ์š”

TanStack Router

ํŒŒ์ผ ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ… Type-safe ๋„ค๋น„๊ฒŒ์ด์…˜

Vite SSR

๋น ๋ฅธ ๋นŒ๋“œ HMR ์ง€์›

Direct API Call

HTTP ์˜ค๋ฒ„ํ—ค๋“œ ์—†์Œ ๋น ๋ฅธ ์‘๋‹ต

TanStack Query

Hydration ์ž๋™ํ™” ์บ์‹ฑ ํ†ตํ•ฉ

Sonamu SSR ์•„ํ‚คํ…์ฒ˜

Sonamu๋Š” TanStack Router + Vite๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ SSR์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ

entry-server.generated.tsx

์„œ๋ฒ„์—์„œ React๋ฅผ ๋ Œ๋”๋งํ•˜๋Š” ์ง„์ž…์ ์ž…๋‹ˆ๋‹ค (์ž๋™ ์ƒ์„ฑ๋จ):

entry-client.tsx

ํด๋ผ์ด์–ธํŠธ์—์„œ React๋ฅผ ํ•˜์ด๋“œ๋ ˆ์ด์…˜ํ•˜๋Š” ์ง„์ž…์ ์ž…๋‹ˆ๋‹ค:

TanStack Router ๋ผ์šฐํŠธ ๊ตฌ์กฐ

Root Route

ํŒŒ์ผ ๋ผ์šฐํŠธ

๋™์  ๋ผ์šฐํŠธ

Vite ์„ค์ •

SSR vs CSR

Sonamu๋Š” ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค:

SSR ๋ Œ๋”๋ง (๋ฐ์ดํ„ฐ ํ”„๋ฆฌ๋กœ๋”ฉ ์‹œ)

์žฅ์ :
  • ๋น ๋ฅธ First Contentful Paint
  • SEO ์ตœ์ ํ™”
  • ์ดˆ๊ธฐ ๋ฐ์ดํ„ฐ ์ฆ‰์‹œ ํ‘œ์‹œ

CSR ๋ Œ๋”๋ง (๊ธฐ๋ณธ)

์žฅ์ :
  • ์„œ๋ฒ„ ๋ถ€ํ•˜ ๊ฐ์†Œ
  • ๊ฐ„๋‹จํ•œ ๊ตฌํ˜„
  • ๋น ๋ฅธ ๊ฐœ๋ฐœ

๊ฐœ๋ฐœ vs ํ”„๋กœ๋•์…˜

๊ฐœ๋ฐœ ๋ชจ๋“œ

  • dev all: API ์„œ๋ฒ„๊ฐ€ Vite๋ฅผ ํ†ตํ•ฉํ•˜์—ฌ ํ•˜๋‚˜์˜ ํฌํŠธ๋กœ API + Web ์„œ๋น™ (HMR ์ง€์›)
  • dev api: API๋งŒ ์‹คํ–‰. Web์ด ํ•„์š” ์—†๊ฑฐ๋‚˜ Vite๋ฅผ ๋ณ„๋„๋กœ ์‹คํ–‰ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉ
  • dev web: Vite ๊ฐœ๋ฐœ ์„œ๋ฒ„๋งŒ ๋‹จ๋… ์‹คํ–‰. -- ๋’ค์— Vite ์˜ต์…˜ ์ „๋‹ฌ ๊ฐ€๋Šฅ

ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ

๋นŒ๋“œ ๊ฒฐ๊ณผ:

์ฃผ์˜์‚ฌํ•ญ

Sonamu SSR ์‚ฌ์šฉ ์‹œ ์ฃผ์˜์‚ฌํ•ญ: 1. TanStack Router ๊ธฐ๋ฐ˜: Next.js App Router๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค 2. entry-server.generated.tsx๋Š” ์ž๋™ ์ƒ์„ฑ: ์ง์ ‘ ์ˆ˜์ •ํ•˜์ง€ ๋งˆ์„ธ์š” 3. window ๊ฐ์ฒด ์ฃผ์˜: ์„œ๋ฒ„์—์„œ๋Š” window๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค 4. dateReviver ํ•„์ˆ˜: Date ๊ฐ์ฒด ์ง๋ ฌํ™”/์—ญ์ง๋ ฌํ™” ์ฒ˜๋ฆฌ 5. registerSSR ์‚ฌ์šฉ: ๋ฐ์ดํ„ฐ ํ”„๋ฆฌ๋กœ๋”ฉ์€ ๋‹ค์Œ ๋ฌธ์„œ ์ฐธ๊ณ 

๋‹ค์Œ ๋‹จ๊ณ„

๋ฐ์ดํ„ฐ ํ”„๋ฆฌ๋กœ๋”ฉ

registerSSR ์‚ฌ์šฉ๋ฒ•

Hydration ์ „๋žต

ํ•˜์ด๋“œ๋ ˆ์ด์…˜ ์ตœ์ ํ™”

์บ์‹œ ์ œ์–ด

TanStack Query ์บ์‹ฑ

TanStack Router ๊ณต์‹ ๋ฌธ์„œ

๋ผ์šฐํ„ฐ ์ƒ์„ธ ๊ฐ€์ด๋“œ