ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

web/react dom

hydrate

dev_been94 2024. 12. 16. 17:11
728x90
๋ฐ˜์‘ํ˜•

hydrate

 

๐ŸŽฏ hydrate๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?

**hydrate**๋Š” ์„œ๋ฒ„์—์„œ ๋งŒ๋“ค์–ด์ง„ HTML์„ React๊ฐ€ ๋‹ค์‹œ ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ณผ์ •์ด์—์š”.

  • ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง(SSR)์—์„œ ์„œ๋ฒ„๊ฐ€ ์ด๋ฏธ ๋งŒ๋“ค์–ด๋†“์€ HTML์„ ํด๋ผ์ด์–ธํŠธ(๋ธŒ๋ผ์šฐ์ €)์—์„œ React๊ฐ€ ์ฝ๊ณ ,
  • React์˜ ๊ธฐ๋Šฅ์„ ์—ฐ๊ฒฐํ•ด์„œ ์ƒํ˜ธ์ž‘์šฉ์ด ๊ฐ€๋Šฅํ•œ ํ™”๋ฉด์œผ๋กœ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๊ฑฐ์˜ˆ์š”.

์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด, **"์ •์ ์ธ HTML์— React์˜ ์ƒ๋ช…์„ ๋ถˆ์–ด๋„ฃ๋Š” ๊ณผ์ •"**์ž…๋‹ˆ๋‹ค.

 

๐Ÿ• ๋น„์œ ๋กœ ์ดํ•ดํ•˜๊ธฐ: ๋†€์ด๊ณต์› ์ธํ˜• ์ด์•ผ๊ธฐ

์—ฌ๋Ÿฌ๋ถ„์ด ๋†€์ด๊ณต์›์—์„œ ์›€์ง์ด๋Š” ์ธํ˜•์„ ๋งŒ๋“ค๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ด ๋ณด์„ธ์š”. ๐ŸŽ 

  1. ์„œ๋ฒ„์—์„œ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด์ง„ ์ธํ˜•
    • ์„œ๋ฒ„๋Š” **์ •์ ์ธ ์ธํ˜•(HTML)**์„ ๋จผ์ € ๋งŒ๋“ค์–ด ๋†”์š”.
    • ์ด ์ธํ˜•์€ ๋ˆˆ์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ์ง€๋งŒ ์•„์ง ์›€์ง์ด์ง€ ์•Š์•„์š”.
  2. React๊ฐ€ ์ƒ๋ช…์„ ๋ถˆ์–ด๋„ฃ๋Š” ๊ณผ์ • (hydrate)
    • ๋†€์ด๊ณต์›์— ๋„์ฐฉํ•œ ์ธํ˜•์—๊ฒŒ ์ „์›์„ ๊ฝ‚์œผ๋ฉด ์ธํ˜•์ด ์›€์ง์ด๊ธฐ ์‹œ์ž‘ํ•˜์ฃ !
    • ์ด์ œ ์ธํ˜•์€ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์ถค์„ ์ถ”๊ฑฐ๋‚˜ ๋ง์„ ํ•  ์ˆ˜ ์žˆ์–ด์š”.

**React์˜ hydrate**๋Š” ์„œ๋ฒ„์—์„œ ์˜จ ์ •์ ์ธ HTML์— React ๊ธฐ๋Šฅ(์ƒํ˜ธ์ž‘์šฉ)์„ ์ถ”๊ฐ€ํ•ด์ฃผ๋Š” ๊ณผ์ •์ด์—์š”.

 

๐Ÿ› ๏ธ hydrate์˜ ์‚ฌ์šฉ๋ฒ•

hydrate๋Š” ๋ณดํ†ต ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง(SSR) ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
์•„๋ž˜ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด hydrate๋ฅผ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์‚ดํŽด๋ณผ๊ฒŒ์š”!

 

1. ์„œ๋ฒ„ ์‚ฌ์ด๋“œ์—์„œ HTML ๋งŒ๋“ค๊ธฐ

React ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง์—์„œ๋Š” **renderToString**์„ ์‚ฌ์šฉํ•ด์„œ HTML์„ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค.

// ์„œ๋ฒ„ ์ฝ”๋“œ (Node.js ํ™˜๊ฒฝ)
import React from 'react';
import { renderToString } from 'react-dom/server';
import App from './App';

// ์„œ๋ฒ„์—์„œ HTML ๋ฌธ์ž์—ด ์ƒ์„ฑ
const html = renderToString(<App />);
console.log(html); // '<div id="root">...</div>'

 

2. ํด๋ผ์ด์–ธํŠธ์—์„œ hydrate๋กœ ํ™œ์„ฑํ™”ํ•˜๊ธฐ

์ด์ œ **ํด๋ผ์ด์–ธํŠธ(๋ธŒ๋ผ์šฐ์ €)**์—์„œ React์˜ hydrate๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์„œ๋ฒ„๊ฐ€ ๋งŒ๋“  HTML์— ์ƒ๋ช…์„ ๋ถˆ์–ด๋„ฃ์–ด์š”.

// ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ
import React from 'react';
import { hydrateRoot } from 'react-dom/client';
import App from './App';

// ์„œ๋ฒ„์—์„œ ์˜จ HTML์„ React๋กœ ๋‹ค์‹œ ํ™œ์„ฑํ™”
hydrateRoot(document.getElementById('root'), <App />);

 

๐Ÿ” ์ฝ”๋“œ ์„ค๋ช…

  1. ์„œ๋ฒ„ ๋ Œ๋”๋ง
    • ์„œ๋ฒ„์—์„œ **renderToString**์œผ๋กœ React ์ปดํฌ๋„ŒํŠธ๋ฅผ HTML ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•ด ๋ธŒ๋ผ์šฐ์ €์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
  2. hydrateRoot ์‚ฌ์šฉ
    • ๋ธŒ๋ผ์šฐ์ €๋Š” ์ด๋ฏธ ๋งŒ๋“ค์–ด์ง„ HTML์„ ๋ฐ›์•„ ํ™”๋ฉด์— ํ‘œ์‹œํ•ด์š”.
    • ๊ทธ๋‹ค์Œ hydrateRoot๊ฐ€ React์˜ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์™€ ์ƒํƒœ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ HTML์— ์—ฐ๊ฒฐํ•ด์ค˜์š”.
  3. ๊ฒฐ๊ณผ
    • ์‚ฌ์šฉ์ž๊ฐ€ ํ™”๋ฉด์„ ๋ณด์ž๋งˆ์ž ๋ฒ„ํŠผ ํด๋ฆญ, ํผ ์ž…๋ ฅ ๊ฐ™์€ React ์ƒํ˜ธ์ž‘์šฉ์ด ๋ฐ”๋กœ ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค. ๐ŸŽ‰

 

๐Ÿš€ hydrate๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

  1. ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง(SSR)์˜ ํ•ต์‹ฌ
    • ์„œ๋ฒ„๊ฐ€ ๋ฏธ๋ฆฌ HTML์„ ๋งŒ๋“ค์–ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ํ™”๋ฉด ๋กœ๋”ฉ ์†๋„๊ฐ€ ๋นจ๋ผ์ ธ์š”.
    • ํŠนํžˆ ์ดˆ๊ธฐ ํ™”๋ฉด์„ ๋น ๋ฅด๊ฒŒ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ์–ด์„œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์ด ์ข‹์•„์ง‘๋‹ˆ๋‹ค.
  2. ์ƒํ˜ธ์ž‘์šฉ ์ถ”๊ฐ€
    • hydrate๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์„œ๋ฒ„์—์„œ ์ „๋‹ฌ๋œ ์ •์ ์ธ HTML์ด React์˜ ๊ธฐ๋Šฅ์„ ๊ฐ€์ ธ์™€์„œ
      **์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ(์ƒํ˜ธ์ž‘์šฉ์ด ๊ฐ€๋Šฅํ•œ)**ํ•œ ํ™”๋ฉด์ด ๋ผ์š”.
  3. SEO์— ์œ ๋ฆฌ
    • ์„œ๋ฒ„๊ฐ€ ๋จผ์ € HTML์„ ์ƒ์„ฑํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๊ฒ€์ƒ‰ ์—”์ง„์ด ๋” ์ž˜ ์ฝ์„ ์ˆ˜ ์žˆ์–ด์š”.

 

โš ๏ธ ์ฃผ์˜ํ•  ์ 

  1. HTML๊ณผ React ์ƒํƒœ๊ฐ€ ์ผ์น˜ํ•ด์•ผ ํ•ด์š”
    • ์„œ๋ฒ„๊ฐ€ ๋งŒ๋“  HTML๊ณผ ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ Œ๋”๋งํ•˜๋Š” React ์ƒํƒœ๊ฐ€ ๋‹ค๋ฅด๋ฉด ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ์–ด์š”.
    • ์ด๋Ÿฐ ๋ถˆ์ผ์น˜๋ฅผ **"Hydration Mismatch"**๋ผ๊ณ  ํ•ด์š”.
  2. hydrate๋Š” ํด๋ผ์ด์–ธํŠธ์—์„œ๋งŒ ์‚ฌ์šฉ
    • ์„œ๋ฒ„์—์„œ๋Š” renderToString ๊ฐ™์€ ํ•จ์ˆ˜๋กœ HTML์„ ์ƒ์„ฑํ•˜๊ณ , ํด๋ผ์ด์–ธํŠธ์—์„œ hydrate๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

๐ŸŒŸ ํ•œ ์ค„ ์š”์•ฝ

**hydrate**๋Š” ์„œ๋ฒ„์—์„œ ๋งŒ๋“ค์–ด์ง„ ์ •์ ์ธ HTML์— React์˜ ์ƒ๋ช…์„ ๋ถˆ์–ด๋„ฃ์–ด ์ƒํ˜ธ์ž‘์šฉ์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ณผ์ •์ด์—์š”.

 

 

๐ŸŽ‰ ๋งˆ๋ฌด๋ฆฌ

React์˜ **hydrate**๋Š” **์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง(SSR)**์˜ ํ•ต์‹ฌ ๊ณผ์ • ์ค‘ ํ•˜๋‚˜์˜ˆ์š”.
์„œ๋ฒ„๊ฐ€ ํ™”๋ฉด์„ ๋น ๋ฅด๊ฒŒ ๋ณด์—ฌ์ฃผ๊ณ , React๊ฐ€ ๊ทธ ์œ„์— ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฑฐ์ฃ !
์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์ด ์ข‹์•„์ง€๊ณ  SEO๋„ ๊ฐœ์„ ๋  ์ˆ˜ ์žˆ์–ด์š”.

728x90
๋ฐ˜์‘ํ˜•

'web > react dom' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

prefetchDNS  (1) 2024.12.16
preconnect  (2) 2024.12.16
findDOMNode  (0) 2024.12.16
flushSync  (0) 2024.12.16
createPortal  (0) 2024.12.16
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
ยซ   2025/02   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
๊ธ€ ๋ณด๊ด€ํ•จ
๋ฐ˜์‘ํ˜•
250x250