Hydration

Hydration์ด๋ž€?

JS ์ฝ”๋“œ๋“ค์ด DOM ์š”์†Œ ์œ„์— ๋ฌผ์„ ์ฑ„์šฐ๋“ฏ์ด ํ•„์š”๋กœ ํ•˜๋Š” ์š”์†Œ๋“ค์„ ์ฑ„์šด๋‹ค ํ•˜์—ฌ Hydrate(์ˆ˜ํ™”)๋ผ๋Š” ์šฉ์–ด๋ฅผ ์“ด๋‹ค.

Hydration์ด๋ž€ ์„œ๋ฒ„์—์„œ Pre-Rendering ๋œ ์ •์  ํŽ˜์ด์ง€๋ฅผ ๋‹ค์‹œ React Tree์— ๋งž๊ฒŒ ํŒŒ์‹ฑํ•˜๋Š” ํ–‰์œ„์ด๋‹ค.

์ด ๊ณผ์ •์€ 2๋‹จ๊ณ„๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค.

  1. ๋ Œ๋”๋ง๋œ ๊ฒฐ๊ณผ๋ฌผ์ด ์–ด๋–ค ์ปดํฌ๋„ŒํŠธ์™€ ๋งค์นญ๋˜๋Š”์ง€ ํ™•์ธ

  2. ๊ฐ ์ปดํฌ๋„ŒํŠธ์— ๊ฑธ๋ฆฐ Event๋ฅผ ์‹ค์ œ DOM์— ์—ฐ๊ฒฐ

๊ฐ DOM ์š”์†Œ์— JS์ฝ”๋“œ๋ฅผ ๋งค์นญ์‹œํ‚ค๊ธฐ ์œ„ํ•œ ๋ชฉ์ ์ด๋ฏ€๋กœ ํŽ˜์ด์ง€๋ฅผ ๋‹ค์‹œ ๊ทธ๋ฆฌ๋Š” Paint ๊ณผ์ •์€ ์ผ์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค.

ReactDOM.hydrateRoot()

import { hydrateRoot } from 'react-dom/client';

const container = document.getElementById('root');
const root = hydrateRoot(container);

root.render(<App/>);

Next.js ๋‚ด๋ถ€์ ์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ReactDOM.hydrateRoot()๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ผ์„ ํ•œ๋‹ค.

  • ์„œ๋ฒ„์—์„œ ํ”„๋ฆฌ ๋ Œ๋”๋ง๋œ DOM Tree์™€ ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ Œ๋”๋งํ•œ React Tree๋ฅผ ๋น„๊ตํ•œ๋‹ค.

  • ๋น„๊ตํ•˜๋ฉด์„œ ๊ฐ DOM์ด ์–ด๋–ค ์ปดํฌ๋„ŒํŠธ์™€ ๋งค์นญ๋˜๋Š”์ง€ ์ดํ•ดํ•œ๋‹ค.

  • ์ดํ•ดํ•œ ๋‚ด์šฉ์— ๋”ฐ๋ผ ์ด๋ฒคํŠธ๋ฅผ ์—ฐ๊ฒฐํ•˜๊ณ , CSR ๋™์ž‘์ด ์ด๋ฃจ์–ด์ง„๋‹ค.

๋งค์นญํ•˜๋Š” ๊ณผ์ •์—์„œ ์š”์†Œ์˜ Text๋‚˜ attribute๋Š” ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š๊ณ  ๋ Œ๋”๋ง๋œ ์š”์†Œ์˜ ํƒ€์ž…๊ณผ ์ˆœ์„œ๋งŒ์„ ๋น„๊ตํ•œ๋‹ค.

Last updated