Skip to main content
Sonamu์—์„œ ์„œ๋ฒ„ ๋ Œ๋”๋ง๋œ HTML์„ ํด๋ผ์ด์–ธํŠธ์—์„œ ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ํ•˜์ด๋“œ๋ ˆ์ด์…˜ ์ „๋žต์„ ์•Œ์•„๋ด…๋‹ˆ๋‹ค.

Hydration ๊ฐœ์š”

TanStack Query

dehydrate/hydrate ์ž๋™ ์ƒํƒœ ๋ณต์›

์ „์ฒด ๋ฌธ์„œ Hydration

document ๋ ˆ๋ฒจ ์™„์ „ํ•œ SSR

Date ์ง๋ ฌํ™”

dateReviver ์ž๋™ ๋ณ€ํ™˜

์„ ํƒ์  ๋น„ํ™œ์„ฑํ™”

disableHydrate CSR ์ „ํ™˜

Sonamu Hydration ํ”„๋กœ์„ธ์Šค

1. ์„œ๋ฒ„: Dehydration

์„œ๋ฒ„์—์„œ Query์ƒํƒœ๋ฅผ ์ง๋ ฌํ™”ํ•ฉ๋‹ˆ๋‹ค.

2. HTML์— ๋ฐ์ดํ„ฐ ์ฃผ์ž…

์ƒ์„ฑ๋œ HTML:

3. ํด๋ผ์ด์–ธํŠธ: Hydration

ํด๋ผ์ด์–ธํŠธ์—์„œ ์ƒํƒœ๋ฅผ ๋ณต์›ํ•˜๊ณ  React๋ฅผ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

Date ์ง๋ ฌํ™” ์ฒ˜๋ฆฌ

๋ฌธ์ œ: Date ๊ฐ์ฒด๋Š” JSON.stringify๋กœ ๋ฌธ์ž์—ด์ด ๋จ

ํ•ด๊ฒฐ: dateReviver

Sonamu๋Š” ์ž๋™์œผ๋กœ ISO ๋‚ ์งœ ๋ฌธ์ž์—ด์„ Date ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

Hydration Mismatch ๋ฐฉ์ง€

๋ฌธ์ œ: ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ์˜ HTML์ด ๋‹ค๋ฅด๋ฉด ์—๋Ÿฌ

์—๋Ÿฌ ๋ฉ”์‹œ์ง€:

ํ•ด๊ฒฐ 1: useEffect ์‚ฌ์šฉ

ํ•ด๊ฒฐ 2: suppressHydrationWarning

์˜๋„์ ์œผ๋กœ ์„œ๋ฒ„/ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋‹ค๋ฅธ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

disableHydrate ์˜ต์…˜

Hydration์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ณ  CSR๋กœ ์ „ํ™˜

์ž‘๋™ ๋ฐฉ์‹:
์‚ฌ์šฉ ์‚ฌ๋ก€:
  • ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ๊ฐ€ ์ค‘์š”ํ•œ ๊ฒฝ์šฐ (๋Œ€์‹œ๋ณด๋“œ, ์ฑ„ํŒ… ๋“ฑ)
  • ์„œ๋ฒ„/ํด๋ผ์ด์–ธํŠธ ๋ Œ๋”๋ง ๊ฒฐ๊ณผ๊ฐ€ ์˜๋„์ ์œผ๋กœ ๋‹ค๋ฅธ ๊ฒฝ์šฐ
  • Hydration mismatch ํ•ด๊ฒฐ์ด ์–ด๋ ค์šด ๊ฒฝ์šฐ

์ „์ฒด ๋ฌธ์„œ Hydration

Sonamu๋Š” document ์ „์ฒด๋ฅผ hydrateํ•ฉ๋‹ˆ๋‹ค (div#root๊ฐ€ ์•„๋‹˜).
์ด์œ :
  • TanStack Router๊ฐ€ <html>, <head> ํƒœ๊ทธ๊นŒ์ง€ ๊ด€๋ฆฌ
  • <HeadContent />, <Scripts /> ์ปดํฌ๋„ŒํŠธ๊ฐ€ head/body ์ˆ˜์ •
  • SEO ๋ฉ”ํƒ€ ํƒœ๊ทธ๋ฅผ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ

Suspense์™€ Hydration

์„œ๋ฒ„์—์„œ Suspense fallback์„ ๋ Œ๋”๋งํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ์—์„œ ์‹ค์ œ ์ปจํ…์ธ ๋ฅผ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
fallback=์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ :
  • SSR์—์„œ๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ์ด๋ฏธ ๋กœ๋“œ๋˜์–ด ์žˆ์Œ
  • fallback์ด ๋ณด์ด์ง€ ์•Š์Œ
  • Hydration mismatch ๋ฐฉ์ง€

QueryClient ์„ค์ •

์„œ๋ฒ„ ์„ค์ •

ํด๋ผ์ด์–ธํŠธ ์„ค์ •

์ฃผ์˜: ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ์˜ staleTime์„ ๋™์ผํ•˜๊ฒŒ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

Router Context

QueryClient๋ฅผ Router Context๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

๋””๋ฒ„๊น…

Hydration ํ™•์ธ

QueryClient ์ƒํƒœ ํ™•์ธ

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

Hydration ์‚ฌ์šฉ ์‹œ ์ฃผ์˜์‚ฌํ•ญ: 1. ์„œ๋ฒ„/ํด๋ผ์ด์–ธํŠธ HTML ์ผ์น˜: Hydration mismatch ๋ฐฉ์ง€ 2. window ๊ฐ์ฒด ์ฃผ์˜: ์„œ๋ฒ„์—์„œ๋Š” window๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค 3. Date ๊ฐ์ฒด: dateReviver๊ฐ€ ์ž๋™ ์ฒ˜๋ฆฌํ•˜์ง€๋งŒ ํ™•์ธ ํ•„์š” 4. QueryClient ์„ค์ • ๋™์ผ: ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ์˜ staleTime ์ผ์น˜ 5. disableHydrate ์ตœ์†Œํ™”: ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ์—๋งŒ ์‚ฌ์šฉ

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

SSR ์„ค์ •

SSR ๊ธฐ๋ณธ ๊ตฌ์กฐ

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

registerSSR ์‚ฌ์šฉ๋ฒ•

์บ์‹œ ์ œ์–ด

TanStack Query ์บ์‹ฑ

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

Query ์ƒ์„ธ ๊ฐ€์ด๋“œ