ํฐ์คํ ๋ฆฌ ๋ทฐ
๐ฏ hydrate๋ ๋ฌด์์ธ๊ฐ์?
**hydrate**๋ ์๋ฒ์์ ๋ง๋ค์ด์ง HTML์ React๊ฐ ๋ค์ ํ์ฑํํ๋ ๊ณผ์ ์ด์์.
- ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง(SSR)์์ ์๋ฒ๊ฐ ์ด๋ฏธ ๋ง๋ค์ด๋์ HTML์ ํด๋ผ์ด์ธํธ(๋ธ๋ผ์ฐ์ )์์ React๊ฐ ์ฝ๊ณ ,
- React์ ๊ธฐ๋ฅ์ ์ฐ๊ฒฐํด์ ์ํธ์์ฉ์ด ๊ฐ๋ฅํ ํ๋ฉด์ผ๋ก ๋ง๋ค์ด์ฃผ๋ ๊ฑฐ์์.
์ฝ๊ฒ ๋งํ๋ฉด, **"์ ์ ์ธ HTML์ React์ ์๋ช ์ ๋ถ์ด๋ฃ๋ ๊ณผ์ "**์ ๋๋ค.
๐ ๋น์ ๋ก ์ดํดํ๊ธฐ: ๋์ด๊ณต์ ์ธํ ์ด์ผ๊ธฐ
์ฌ๋ฌ๋ถ์ด ๋์ด๊ณต์์์ ์์ง์ด๋ ์ธํ์ ๋ง๋ค๊ณ ์๋ค๊ณ ์๊ฐํด ๋ณด์ธ์. ๐
- ์๋ฒ์์ ๋ฏธ๋ฆฌ ๋ง๋ค์ด์ง ์ธํ
- ์๋ฒ๋ **์ ์ ์ธ ์ธํ(HTML)**์ ๋จผ์ ๋ง๋ค์ด ๋์.
- ์ด ์ธํ์ ๋์ผ๋ก ๋ณผ ์ ์์ง๋ง ์์ง ์์ง์ด์ง ์์์.
- 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 />);
๐ ์ฝ๋ ์ค๋ช
- ์๋ฒ ๋ ๋๋ง
- ์๋ฒ์์ **renderToString**์ผ๋ก React ์ปดํฌ๋ํธ๋ฅผ HTML ๋ฌธ์์ด๋ก ๋ณํํด ๋ธ๋ผ์ฐ์ ์ ์ ๋ฌํฉ๋๋ค.
- hydrateRoot ์ฌ์ฉ
- ๋ธ๋ผ์ฐ์ ๋ ์ด๋ฏธ ๋ง๋ค์ด์ง HTML์ ๋ฐ์ ํ๋ฉด์ ํ์ํด์.
- ๊ทธ๋ค์ hydrateRoot๊ฐ React์ ์ด๋ฒคํธ ํธ๋ค๋ฌ์ ์ํ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ HTML์ ์ฐ๊ฒฐํด์ค์.
- ๊ฒฐ๊ณผ
- ์ฌ์ฉ์๊ฐ ํ๋ฉด์ ๋ณด์๋ง์ ๋ฒํผ ํด๋ฆญ, ํผ ์ ๋ ฅ ๊ฐ์ React ์ํธ์์ฉ์ด ๋ฐ๋ก ๊ฐ๋ฅํด์ง๋๋ค. ๐
๐ hydrate๋ฅผ ์ฌ์ฉํ๋ ์ด์
- ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง(SSR)์ ํต์ฌ
- ์๋ฒ๊ฐ ๋ฏธ๋ฆฌ HTML์ ๋ง๋ค์ด์ฃผ๊ธฐ ๋๋ฌธ์ ํ๋ฉด ๋ก๋ฉ ์๋๊ฐ ๋นจ๋ผ์ ธ์.
- ํนํ ์ด๊ธฐ ํ๋ฉด์ ๋น ๋ฅด๊ฒ ๋ณด์ฌ์ค ์ ์์ด์ ์ฌ์ฉ์ ๊ฒฝํ์ด ์ข์์ง๋๋ค.
- ์ํธ์์ฉ ์ถ๊ฐ
- hydrate๋ฅผ ์ฌ์ฉํ๋ฉด ์๋ฒ์์ ์ ๋ฌ๋ ์ ์ ์ธ HTML์ด React์ ๊ธฐ๋ฅ์ ๊ฐ์ ธ์์
**์ธํฐ๋ํฐ๋ธ(์ํธ์์ฉ์ด ๊ฐ๋ฅํ)**ํ ํ๋ฉด์ด ๋ผ์.
- hydrate๋ฅผ ์ฌ์ฉํ๋ฉด ์๋ฒ์์ ์ ๋ฌ๋ ์ ์ ์ธ HTML์ด React์ ๊ธฐ๋ฅ์ ๊ฐ์ ธ์์
- SEO์ ์ ๋ฆฌ
- ์๋ฒ๊ฐ ๋จผ์ HTML์ ์์ฑํด์ฃผ๊ธฐ ๋๋ฌธ์ ๊ฒ์ ์์ง์ด ๋ ์ ์ฝ์ ์ ์์ด์.
โ ๏ธ ์ฃผ์ํ ์
- HTML๊ณผ React ์ํ๊ฐ ์ผ์นํด์ผ ํด์
- ์๋ฒ๊ฐ ๋ง๋ HTML๊ณผ ํด๋ผ์ด์ธํธ์์ ๋ ๋๋งํ๋ React ์ํ๊ฐ ๋ค๋ฅด๋ฉด ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์์ด์.
- ์ด๋ฐ ๋ถ์ผ์น๋ฅผ **"Hydration Mismatch"**๋ผ๊ณ ํด์.
- hydrate๋ ํด๋ผ์ด์ธํธ์์๋ง ์ฌ์ฉ
- ์๋ฒ์์๋ renderToString ๊ฐ์ ํจ์๋ก HTML์ ์์ฑํ๊ณ , ํด๋ผ์ด์ธํธ์์ hydrate๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๐ ํ ์ค ์์ฝ
**hydrate**๋ ์๋ฒ์์ ๋ง๋ค์ด์ง ์ ์ ์ธ HTML์ React์ ์๋ช ์ ๋ถ์ด๋ฃ์ด ์ํธ์์ฉ์ด ๊ฐ๋ฅํ๊ฒ ๋ง๋๋ ๊ณผ์ ์ด์์.
๐ ๋ง๋ฌด๋ฆฌ
React์ **hydrate**๋ **์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง(SSR)**์ ํต์ฌ ๊ณผ์ ์ค ํ๋์์.
์๋ฒ๊ฐ ํ๋ฉด์ ๋น ๋ฅด๊ฒ ๋ณด์ฌ์ฃผ๊ณ , React๊ฐ ๊ทธ ์์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ ๊ฑฐ์ฃ !
์ด๋ ๊ฒ ํ๋ฉด ์ฌ์ฉ์ ๊ฒฝํ์ด ์ข์์ง๊ณ SEO๋ ๊ฐ์ ๋ ์ ์์ด์.
'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
- react dom hook
- ์ธ๋ถํฐํธ
- experimental
- state
- ๋ฒ ํ
- ์ํ๊ด๋ฆฌ
- ๋ฐ์ดํฐ์ ์ง
- react hook
- Store
- useid
- experimental_taintuniquevalue
- preconnect
- dns-prefetch
- flushsync
- ์ ์ฅ์
- ์ต์ ๋ฐ์ดํฐ
- useRef
- zustand
- experimental_taintobjectreference
- component
- useinsertioneffect
- usedeferredvalue
- useformstatus
- react dom
- finddomnode
- Nextjs
- react
- ์คํ์
- Props
- prefetchdns
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |