ReactDOMServer
ReactDOMServer
๊ฐ์ฒด๋ฅผ ํตํด ์ปดํฌ๋ํธ๋ฅผ ์ ์ ๋งํฌ์
์ผ๋ก ๋ ๋๋งํ ์ ์์ต๋๋ค. ๋์ฒด๋ก ์ด๊ฒ์ Node ์๋ฒ์์ ์ฌ์ฉ๋ฉ๋๋ค.
// ES modules
import ReactDOMServer from 'react-dom/server';
// CommonJS
var ReactDOMServer = require('react-dom/server');
๊ฐ์
๋ค์ ๋ฉ์๋๋ ์๋ฒ์ ๋ธ๋ผ์ฐ์ ํ๊ฒฝ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ค์ ์ถ๊ฐ ๋ฉ์๋๋ ์๋ฒ์์๋ง ์ฌ์ฉํ ์ ์๋ stream
ํจํค์ง์ ์์กด์ฑ์ด ์์ด ๋ธ๋ผ์ฐ์ ์์๋ ์๋ํ์ง ์์ต๋๋ค.
์ฐธ์กฐ
renderToString()
ReactDOMServer.renderToString(element)
React ์๋ฆฌ๋จผํธ์ ์ด๊ธฐ HTML์ ๋ ๋๋งํฉ๋๋ค. React๋ HTML ๋ฌธ์์ด์ ๋ฐํํฉ๋๋ค. ๋น ๋ฅธ ํ์ด์ง ๋ก๋๋ฅผ ์ํด ์ด๊ธฐ ์์ฒญ ์์ ์๋ฒ์์ HTML์ ์์ฑํ์ฌ ๋งํฌ์ ์ ๋ณด๋ด๊ฑฐ๋, ๊ฒ์ ์์ง ์ต์ ํ๋ฅผ ์ํด ๊ฒ์ ์์ง์ด ํ์ด์ง๋ฅผ ํฌ๋กค๋งํ ์ ์๋๋ก ํ๋๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ด๋ฏธ ์๋ฒ ๋ ๋๋ง ๋ ๋งํฌ์
์ด ์๋ ๋
ธ๋์์ ReactDOM.hydrate()
๋ฅผ ํธ์ถํ ๊ฒฝ์ฐ React๋ ์ด๋ฅผ ๋ณด์กดํ๊ณ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ง ์ฐ๊ฒฐํจ์ผ๋ก์จ ๋งค์ฐ ๋ฐ์ด๋ ์ฒซ ๋ก๋ ์ฑ๋ฅ์ ๋ณด์ฌ์ค๋๋ค.
renderToStaticMarkup()
ReactDOMServer.renderToStaticMarkup(element)
renderToString
๊ณผ ๋น์ทํ์ง๋ง data-reactroot
์ ๊ฐ์ด React์์ ๋ด๋ถ์ ์ผ๋ก ์ฌ์ฉํ๋ ์ถ๊ฐ์ ์ธ DOM ์ดํธ๋ฆฌ๋ทฐํธ๋ฅผ ๋ง๋ค์ง ์์ต๋๋ค. ์ฌ๋ถ์ ์ดํธ๋ฆฌ๋ทฐํธ๋ฅผ ์ ๊ฑฐํจ์ผ๋ก์จ ์ฝ๊ฐ์ ๋ฐ์ดํธ๋ฅผ ์ ์ฝํ ์ ์์ผ๋ฏ๋ก React๋ฅผ ๊ฐ๋จํ ์ ์ ํ์ด์ง ์์ฑ๊ธฐ๋ก ์ฌ์ฉํ๊ณ ์ถ์ ๊ฒฝ์ฐ์ ์ ์ฉํฉ๋๋ค.
ํด๋ผ์ด์ธํธ์์ React๋ฅผ ์ฌ์ฉํ์ฌ ์ํธ์์ฉ์ด ๊ฐ๋ฅํ ๋งํฌ์
์ ๋ง๋ค๋ ค๋ฉด ์ด ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ง ๋ง์ธ์. ๋์ ์๋ฒ์์ renderToString
์ ์ฌ์ฉํ๊ณ ํด๋ผ์ด์ธํธ์์ ReactDOM.hydrate()
๋ฅผ ์ฌ์ฉํด์ฃผ์ธ์.
renderToNodeStream()
ReactDOMServer.renderToNodeStream(element)
React ์๋ฆฌ๋จผํธ์ ์ด๊ธฐ HTML์ ๋ ๋๋งํฉ๋๋ค. HTML ๋ฌธ์์ด์ ์ถ๋ ฅํ๋ Readable ์คํธ๋ฆผ์ ๋ฐํํฉ๋๋ค. ์ด ์คํธ๋ฆผ์ด ์ถ๋ ฅํ๋ HTML ๋ฌธ์์ด์ ReactDOMServer.renderToString
์ด ๋ฐํํ๋ ๊ฐ๊ณผ ์ ํํ ์ผ์นํฉ๋๋ค. ๋น ๋ฅธ ํ์ด์ง ๋ก๋๋ฅผ ์ํด ์ด๊ธฐ ์์ฒญ ์์ ์๋ฒ์์ HTML์ ์์ฑํ์ฌ ๋งํฌ์
์ ๋ณด๋ด๊ฑฐ๋, ๊ฒ์ ์์ง ์ต์ ํ๋ฅผ ์ํด ๊ฒ์ ์์ง์ด ํ์ด์ง๋ฅผ ํฌ๋กค๋งํ ์ ์๋๋ก ํ๋๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ด๋ฏธ ์๋ฒ ๋ ๋๋ง ๋ ๋งํฌ์
์ด ์๋ ๋
ธ๋์์ ReactDOM.hydrate()
๋ฅผ ํธ์ถํ ๊ฒฝ์ฐ React๋ ์ด๋ฅผ ๋ณด์กดํ๊ณ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ง ์ฐ๊ฒฐํจ์ผ๋ก์จ ๋งค์ฐ ๋ฐ์ด๋ ์ฒซ ๋ก๋ ์ฑ๋ฅ์ ๋ณด์ฌ์ค๋๋ค.
์ฃผ์
์๋ฒ์์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด API๋ ๋ธ๋ผ์ฐ์ ์์ ์๋ํ์ง ์์ต๋๋ค.
๋ฐํ๋๋ ์คํธ๋ฆผ์ utf-8๋ก ์ธ์ฝ๋ฉ๋ ๋ฐ์ดํธ ์คํธ๋ฆผ์ ๋ฐํํฉ๋๋ค. ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ์ธ์ฝ๋ฉ๋ ์คํธ๋ฆผ์ด ํ์ํ ๊ฒฝ์ฐ, ํ ์คํธ ํธ๋์ค์ฝ๋ฉ์ ์ํ Transform ์คํธ๋ฆผ์ ์ ๊ณตํ๋ iconv-lite์ ๊ฐ์ ํ๋ก์ ํธ๋ฅผ ์ดํด๋ณด์ธ์.
renderToStaticNodeStream()
ReactDOMServer.renderToStaticNodeStream(element)
renderToNodeStream
๊ณผ ๋น์ทํ์ง๋ง data-reactroot
์ ๊ฐ์ด React์์ ๋ด๋ถ์ ์ผ๋ก ์ฌ์ฉํ๋ ์ถ๊ฐ์ ์ธ DOM ์ดํธ๋ฆฌ๋ทฐํธ๋ฅผ ๋ง๋ค์ง ์์ต๋๋ค. ์ฌ๋ถ์ ์ดํธ๋ฆฌ๋ทฐํธ๋ฅผ ์ ๊ฑฐํจ์ผ๋ก์จ ์ฝ๊ฐ์ ๋ฐ์ดํธ๋ฅผ ์ ์ฝํ ์ ์์ผ๋ฏ๋ก React๋ฅผ ๊ฐ๋จํ ์ ์ ํ์ด์ง ์์ฑ๊ธฐ๋ก ์ฌ์ฉํ๊ณ ์ถ์ ๊ฒฝ์ฐ์ ์ ์ฉํฉ๋๋ค.
์ด ์คํธ๋ฆผ์ด ์ถ๋ ฅํ๋ HTML ๋ฌธ์์ด์ ReactDOMServer.renderToStaticMarkup
์ด ๋ฐํํ๋ ๊ฐ๊ณผ ์ ํํ ์ผ์นํฉ๋๋ค.
ํด๋ผ์ด์ธํธ์์ React๋ฅผ ์ฌ์ฉํ์ฌ ์ํธ์์ฉ์ด ๊ฐ๋ฅํ ๋งํฌ์
์ ๋ง๋ค๋ ค๋ฉด ์ด ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ง ๋ง์ธ์. ๋์ ์๋ฒ์์ renderToNodeStream
์ ์ฌ์ฉํ๊ณ ํด๋ผ์ด์ธํธ์์ ReactDOM.hydrate()
๋ฅผ ์ฌ์ฉํด์ฃผ์ธ์.
์ฃผ์
์๋ฒ์์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด API๋ ๋ธ๋ผ์ฐ์ ์์ ์๋ํ์ง ์์ต๋๋ค.
๋ฐํ๋๋ ์คํธ๋ฆผ์ utf-8๋ก ์ธ์ฝ๋ฉ๋ ๋ฐ์ดํธ ์คํธ๋ฆผ์ ๋ฐํํฉ๋๋ค. ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ์ธ์ฝ๋ฉ๋ ์คํธ๋ฆผ์ด ํ์ํ ๊ฒฝ์ฐ, ํ ์คํธ ํธ๋์ค์ฝ๋ฉ์ ์ํ Transform ์คํธ๋ฆผ์ ์ ๊ณตํ๋ iconv-lite์ ๊ฐ์ ํ๋ก์ ํธ๋ฅผ ์ดํด๋ณด์ธ์.