์ํ์ ์ฌ์ ์ ์ธ ๋ป ์๋์ ๊ฐ๋ค.
์ฉ์ก ์์์ ์ฉ์ง ๋ถ์๋ ์ด์จ์ด ์ฉ๋งค์ธ ๋ฌผ ๋ถ์์ ๊ฒฐํฉํ์ฌ ํ๋์ ๋ถ์๊ตฐ์ ์ด๋ฃจ๊ฒ ๋จ. ๋๋ ๊ทธ๋ฐ ํ์
๊ฐ๋จํ ๋งํ๋ฉด ๋ฌผ์ ๋ น์ด๋๊ฑด๋ฐ ๊ทธ๋ผ ์ฐ๋ฆฌ๊ฐ ๋ฆฌ์กํธ์ ๋ฌผ์ ์ฃผ๋๊ฒ๋ ์๋๋ฐ ์ hydration์ด๋ ํํ์ ์ฐ๋๊ฑธ๊น?
์นํ์ด์ง๋ฅผ ๋๋๋งํ๋ ๊ณผ์ ์์ React์ ๊ฐ์ Client Side Redering(CSR) ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ฒ๋ค๋ js๋ฅผ ๊ฐ์ ธ์ DOM์ ๋๋๋งํ๋ค. ์ด๋ฌํ ๋ฐฉ์์ ๋ง์ ์ฅ์ ๊ณผ ํจ๊ป ์ด๊ธฐ ๋๋๋ง์ ์๋ ์ ํ, SEO์ ํ๊ณ ๋ฑ๊ณผ ๊ฐ์ ๋ฌธ์ ์ ๋ํ ๊ฐ์ง๊ณ ์๋ค. ๊ทธ๋์ ์ํฉ์ ๋ฐ๋ผ Server Side Rendering(SSR)์ ์ ํํ๊ณค ํ๋๋ฐ, SSR์ ์ฌ์ฉํ๋ฉด ์ฌ์ฉ์๋ ์ฌ์ดํธ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ JavaScript๊ฐ ์ฒ๋ฆฌ๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ์ง ์์๋ ๋๊ธฐ ๋๋ฌธ์ ๋น์ฉ์ ์ค์ผ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ์ด๋ ๊ฒ ๋ณด๋ฉด SSR์ด ๋ฌด์กฐ๊ฑด ์ข์๊ฒ ๊ฐ์ง๋ง SSR๊ณผ CSR๋ ๋ฌด์์ ์ค์ ์ ๋๋๋์ ๋ฐ๋ผ ์ฅ๋จ์ ์ด ์์ด ์๋ค. ๊ทธ๋์ ๊ฐ๋ฐ์๋ค์ Server Side ๋จ์์ ๋จผ์ ์ ์ ํ์ด์ง๋ฅผ ๋ ๋๋งํ๊ณ JSํ์ผ๋ค๋ ๋ฒ๋ค๋งํ ํ์ ๋๋ค Client Side๋ก ๋ณด๋ด์ฃผ๋ ๋ฐฉ๋ฒ์ ์๊ฐ์ ํด๋๋ค. ํ์ง๋ง ์ด๋์ DOM์ ๋์ ์ธ ์ด๋ฒคํธ๊ฐ ํ๋๋ ์๋ ์ ์ ์ธ(๋ฉ๋ง๋ฅธ) ์ํ(dehydration)์ผ ๊ฒ์ด๋ค. ๊ทธ๋์ HTML ์ฝ๋์ JS ์ฝ๋๋ฅผ ์๋ก ๋งค์นญ์์ผ ๋์ ์ธ ์น์ฌ์ดํธ๋ฅผ ๋ธ๋ผ์ฐ์ ์ ๋๋๋งํ๋ ๊ธฐ์ ์ด ๋ฑ์ฅํ๋๋ฐ ์ด๊ฒ ๋ฐ๋ก Hydration์ด๋ค.
์ฆ, Hydration์ ๋ธ๋ผ์ฐ์ ์ ์ฌ์ดํธ๋ฅผ ํํํ๋ ๊ณผ์ ์์ ์น์ฌ์ดํธ์ ๋์ ์ธ ์ํ์ ์ ์ ์ธ ์ํ๋ฅผ ๋น์ ์ ์ผ๋ก ํํํ๊ธฐ ์ํด ๋ฑ์ฅํ ๋ง์ด๋ค.
๊ทธ๋ผReactDOM.render
์ ReactDOM.hydrate
์ ์ฐจ์ด์ ์ ๋น๊ตํด๋ณด์.
์ผ๋จ render
๋ DOM์ ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งํด์ฃผ๋ ๋ฉ์๋์ด๋ค.
ReactDOM.render(element, container[, callback])
๋ฉ์๋๋ฅผ ์ดํด๋ณด๋ฉด ์ปจํ ์ด๋์ ์์์ผ๋ก react ์ปดํฌ๋ํธ๋ฅผ ๋ฃ์ด์ค๋ค. ๋ง์ฝ ๊ธฐ์กด์ ์ด๋ฏธ ๋ ๋๋ง๋ ์ปดํฌ๋ํธ๊ฐ ์๋ค๋ฉด ์๋ก ๋ ๋๋งํ๋ ๊ฒ์ด ์๋๋ผ ์ ๋ฐ์ดํธ๋ง ํด์ค๋ค. ๊ทธ๋ฆฌ๊ณ ๋ ๋๋ง์ด ์๋ฃ๋๋ฉด ์ธ๋ฒ์งธ ์ธ์๋ก ์ ๋ฌ๋ ์ฝ๋ฐฑ์ด ์คํ๋๊ฒ ํ ์ ์๋ค.
hydrate
๋ฉ์๋๋ฅผ ๋ณด๋ฉด
ReactDOM.hydrate(element, container[, callback])
ํํ๊ฐ render์ ๋๊ฐ๋ค. ํ์ง๋ง, hydrate๋ ๋ ๋๋ง์ ํ์ง ์๊ณ ํน์ ์ปดํฌ๋ํธ๋ฅผ ๋๋ฒ์งธ ํ๋ผ๋ฏธํฐ์ธ ์ง์ ๋ DOM ์์์ ํ์๋ก hydrate ์ฒ๋ฆฌ๋ง ํ๋ค. ์ด๋ ๋ ๋๋ง์ ํตํด ์๋ก์ด ์น ํ์ด์ง๋ฅผ ๊ตฌ์ฑํ DOM์ ์์ฑํ๋ ๊ฒ์ด ์๋๋ผ, ๊ธฐ์กด DOM Tree์์ ํด๋น๋๋ DOM ์์๋ฅผ ์ฐพ์ ์ ํด์ง ์๋ฐ์คํฌ๋ฆฝํธ ์์ฑ(์ด๋ฒคํธ ๋ฆฌ์ค๋ ๋ฑ)๋ค๋ง ๋ถ์ฐฉํ๋ค๋ ์๋ฏธ์ด๋ค.
์ด์ ์๋ฒ ๋ ๋๋ง๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋น ๋ฅธ First Contentful Paint๋ฅผ ๊ตฌํํ ๋ค์ ํด๋ผ์ด์ธํธ์์ hydration์ ์ฌ์ฉํ์ฌ ๋งค์นญํ ์ ์๋ ์ํคํ ์ณ๋ฅผ ์๋ก์ด ์๋ฃจ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๊ฒ๋์๋ค. ํ์ง๋ง, SSR์ ํ์ด์ง๋ ์ค์ ๋ก JS๊ฐ ์คํ๋๊ณ ์ด๋ฒคํธ ํธ๋ค๋ฌ๊ฐ ์ฒจ๋ถ๋ ๋๊น์ง ์ ๋ ฅ์ ์๋ตํ ์ ์์ ์ ์๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด React18๋ถํฐ HTML Streaming๊ณผ Selective Hydration์ด ๋์ ๋๋ค. ์ด ๋ฐฉ๋ฒ์ ์ด์ฉํ๋ฉด SSR์ ๋ฐ์ํ๋ ๋ณ๋ชฉ ํ์์ ์ค์ผ ์ ์๋ค. ๋๊ฐ์ง ๊ฐ๋ ์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋ด ๋ฒจ๋ก๊ทธ์ ๊ฐ๋จํ ์ ๋ฆฌํด๋์๋ค.
SSR์ ๋ณ๋ชฉํ์ ๊ฐ์ ๋ฌธ์ ๋ค์ ํด๊ฒฐํ ์ ์๋ ์ข์ ํ๊ฒฝ์ด ๋์์ง๋ง, ์ค๊ณ์ ๋ณต์ก์ฑ์ ํ ์ธต ๋ ์ฌ๋ผ๊ฐ๊ฑฐ ๊ฐ๊ธดํ๋ค..
Hydration์ ๊ดํ ์ข์ ๊ธ ๊ฐ์ฌ๋๋ฆฝ๋๋ค
๊ธ์ ์ฝ๋ค๊ฐ ๊ถ๊ธํ ์ ์ด ์๊ฒจ์ ์ง๋ฌธ ๋จ๊น๋๋ค.
"
๊ทธ๋์ ๊ฐ๋ฐ์๋ค์ Server Side ๋จ์์ ๋จผ์ ์ ์ ํ์ด์ง๋ฅผ ๋ ๋๋งํ๊ณ JSํ์ผ๋ค๋ ๋ฒ๋ค๋งํ ํ์ ๋๋ค Client Side๋ก ๋ณด๋ด์ฃผ๋ ๋ฐฉ๋ฒ์ ์๊ฐ์ ํด๋๋ค. ํ์ง๋ง ์ด๋์ DOM์ ๋์ ์ธ ์ด๋ฒคํธ๊ฐ ํ๋๋ ์๋ ์ ์ ์ธ(๋ฉ๋ง๋ฅธ) ์ํ(dehydration)์ผ ๊ฒ์ด๋ค.
"
์ ๋ฌธ์ฅ์์ ์ด๋ฏธ JSํ์ผ๋ค๋ ๋ฒ๋ค๋งํ ํ ๋ณด๋ด์ฃผ๋ฉด HTML์์๋ js ํจ์๋ฅผ ํธ์ถํ ์ ์๋ ์ํ ์๋๊ฑด๊ฐ์?? ์ด ๋์ DOM์ ๋์ ์ธ ์ด๋ฒคํธ๊ฐ ํ๋๋ ์๋ ์ํ ๋ผ๋๊ฒ ์ด๋ค ์๋ฏธ์ธ์ง ๊ถ๊ธํฉ๋๋ค