React Hydration

Hydration๋Š” React๊ฐ€ SSR์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก, HTML ์ฝ”๋“œ์™€ JS ์ฝ”๋“œ๋ฅผ ์„œ๋กœ ๋งค์นญ์‹œ์ผœ ๋™์ ์ธ ์›น์‚ฌ์ดํŠธ๋ฅผ ๋ธŒ๋ผ์šฐ์ €์— ๋ Œ๋”๋งํ•˜๋Š” ๊ธฐ์ˆ ์ด๋‹ค.

Next.js๋Š” React์—์„œ v16๋ถ€ํ„ฐ ์ œ๊ณตํ•˜๋Š” hydrate ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•ด์„œ ์ด๋Ÿฌํ•œ ์†”๋ฃจ์…˜์„ ์„ฑ๊ณต์ ์œผ๋กœ ์ œ๊ณตํ–ˆ๋‹ค.

๋‹ค๋ฅธ ๋ง๋กœ๋Š” ์„œ๋ฒ„ ์ธก์—์„œ ์ œ๊ณต๋œ HTML์„ ์žฌ์‚ฌ์šฉํ•˜๊ณ  ํ•ด๋‹น DOM ์š”์†Œ์— ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ์ž‘์—…์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

hydrate๋Š” ReactDOM์˜ ํ•จ์ˆ˜์ธ๋ฐ ๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ ๊ตฌ์ถ• ์‹œ, ์ดˆ๋ฐ˜์— ๊ผญ ์ž‘์„ฑํ•ด์ฃผ๋Š” render ํ•จ์ˆ˜์™€ ์ž ๊น ๋น„๊ตํ•ด๋ณด๋ฉด

ReactDOM.render๋Š” hydration์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์ง€๋งŒ ReactDOM.hydrate๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ hydration์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

import { App } from './src/app';

ReactDOM.hydrate(<App />, document.getElementById('app'));

ReactDOM.hydrate๋Š” ReactDOM.render์™€ ๋™์ผํ•˜๊ฒŒ ๋™์ž‘ํ•˜์ง€๋งŒ ์„œ๋ฒ„ ์ธก์—์„œ ์ „๋‹ฌ๋ฐ›์€ HTML์„ ์‚ฌ์šฉํ•œ๋‹ค.


React Helmet

React๋Š” ์‹ฑ๊ธ€ ํŽ˜์ด์ง€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(Single Page Application, SPA)์ด๋ผ, React๋กœ ๊ตฌ์ถ•๋œ ์›น ์‚ฌ์ดํŠธ์˜ ๊ฒฝ์šฐ ํฌ๋กค๋Ÿฌ๋“ค์ด ๋‹จ ํ•˜๋‚˜์˜ ํŒŒ์ผ public/index.html ๋งŒ์„ ์ฝ๊ฒŒ ๋œ๋‹ค.

์ด์ฒ˜๋Ÿผ ์‹ฑ๊ธ€ ํŽ˜์ด์ง€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฒฝ์šฐ ๊ฐ๊ฐ์˜ ํŽ˜์ด์ง€์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ฝ์ง€ ๋ชปํ•œ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋‹จ์ ์„ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” react-helmet ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•˜์—ฌ ์‚ฌ์ดํŠธ์— ๋Œ€ํ•œ ๋ฉ”ํƒ€ ํƒœ๊ทธ๋“ค์„ ์ฝ์„ ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.


ํ•จ๊ป˜๋ณด๋ฉด ์ข‹์€ ๊ธ€

Semantic Markup ์ด๋ž€?

๊ฒ€์ƒ‰์—”์ง„์ตœ์ ํ™”(Search Engine Optimization, SEO)


์ฐธ๊ณ ๋งํฌ

React Docs- - hydrate

React Helmet - npm

React์˜ Hydration์— ๋Œ€ํ•˜์—ฌ

Next.js์˜ Hydrate๋ž€?

react-helmet์œผ๋กœ ํŽ˜์ด์ง€๋ณ„ SEO ๋ฉ”ํƒ€ํƒœ๊ทธ ์„ค์ •ํ•˜๊ธฐ