React ReactDOM์ ๊ฐ๋ ฅํ DOM ๋ ๋๋ง ์ ํธ๋ฆฌํฐ๋ฅผ ์์๋ณด์ธ์. ReactDOM.render, hydrate, unmountComponentAtNode, findDOMNode๋ฅผ ๋ฐฐ์ ๋์ ์ธ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌ์ถํ๋ ๋ฐฉ๋ฒ์ ํ์ธํ์ธ์.
React ReactDOM: DOM ๋ ๋๋ง ์ ํธ๋ฆฌํฐ ์ข ํฉ ๊ฐ์ด๋
React๋ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌ์ถํ๊ธฐ ์ํ ๊ฐ๋ ฅํ ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. React์ ํต์ฌ์ DOM(Document Object Model)์ ์ง์ ์ ์ธ ์กฐ์์ ์ถ์ํํ์ฌ, ๊ฐ๋ฐ์๊ฐ UI์ ์ํ๋ ์ํ๋ฅผ ์ค๋ช ํ๋ ๋ฐ ์ง์คํ ์ ์๋๋ก ํ๋ ๊ฒ์ ๋๋ค. ํ์ง๋ง React ์์ฒด๋ ์ด๋ฌํ UI ์ค๋ช ์ ํ์ค๋ก ๋ง๋ค๊ธฐ ์ํด ๋ธ๋ผ์ฐ์ ์ DOM๊ณผ ์ํธ์์ฉํ ๋ฐฉ๋ฒ์ด ํ์ํฉ๋๋ค. ๋ฐ๋ก ์ด ์ง์ ์์ ReactDOM์ด ๋ฑ์ฅํฉ๋๋ค. ์ด ํจํค์ง๋ React ์ปดํฌ๋ํธ๋ฅผ DOM์ ๋ ๋๋งํ๊ณ ๊ทธ ์ํธ์์ฉ์ ๊ด๋ฆฌํ๋ ํน์ ๋ฉ์๋๋ฅผ ์ ๊ณตํฉ๋๋ค.
ReactDOM์ ์ญํ ์ดํดํ๊ธฐ
ReactDOM์ React์ ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ์ธ๊ณ์ ๋ธ๋ผ์ฐ์ ์ DOM ์ฌ์ด์ ๋ค๋ฆฌ ์ญํ ์ ํฉ๋๋ค. React ์ปดํฌ๋ํธ๋ฅผ ํน์ DOM ๋ ธ๋์ ๋ ๋๋งํ๊ณ , ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋ ๋ ์ ๋ฐ์ดํธํ๋ฉฐ, ๋ ์ด์ ํ์ ์์ ๋ ์ ๊ฑฐํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ๋ธ๋ผ์ฐ์ ์์ React ์ ํ๋ฆฌ์ผ์ด์ ์ ์๊ฐ์ ํํ์ ๊ตฌ๋ํ๋ ์์ง์ด๋ผ๊ณ ์๊ฐํ ์ ์์ต๋๋ค.
React์ ReactDOM์ ๊ตฌ๋ถํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. React๋ ์ปดํฌ๋ํธ๋ฅผ ์์ฑํ๊ณ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ ํต์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. ReactDOM์ ์ด๋ฌํ ์ปดํฌ๋ํธ๋ฅผ ๊ฐ์ ธ์ ๋ธ๋ผ์ฐ์ ์ DOM์ ๋ ๋๋งํ๋ ์ญํ ์ ๋ด๋นํฉ๋๋ค. React๋ ๋ค๋ฅธ ํ๊ฒฝ(์: ๋ชจ๋ฐ์ผ ๊ฐ๋ฐ์ ์ํ React Native, ๋ค๋ฅธ ๋ ๋๋ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ)์์๋ ์ฌ์ฉ๋ ์ ์์ง๋ง, ReactDOM์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํด ํน๋ณํ ์ค๊ณ๋์์ต๋๋ค.
์ฃผ์ ReactDOM ๋ฉ์๋
ReactDOM ํจํค์ง์์ ์ ๊ณตํ๋ ๊ฐ์ฅ ์ค์ํ ๋ฉ์๋ ๋ช ๊ฐ์ง๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค:
ReactDOM.render()
ReactDOM.render()
๋ฉ์๋๋ ๋ชจ๋ React ์ ํ๋ฆฌ์ผ์ด์
์ ๊ธฐ์ด์
๋๋ค. ์ด ๋ฉ์๋๋ React ์ปดํฌ๋ํธ(๋๋ ์ปดํฌ๋ํธ ํธ๋ฆฌ)๋ฅผ ์ง์ ๋ DOM ๋
ธ๋์ ๋ง์ดํธํ๋ ์ญํ ์ ํฉ๋๋ค. ์ด ๋
ธ๋๋ ์ผ๋ฐ์ ์ผ๋ก ํ์ด์ง ๋ด์ ๋น์ด์๋ HTML ์์์
๋๋ค.
๊ตฌ๋ฌธ:
ReactDOM.render(element, container[, callback])
element
: ๋ ๋๋งํ๋ ค๋ React ์๋ฆฌ๋จผํธ์ ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ์ต์์ ์ปดํฌ๋ํธ์ ๋๋ค.container
: ์ปดํฌ๋ํธ๋ฅผ ๋ง์ดํธํ๋ ค๋ DOM ์๋ฆฌ๋จผํธ์ ๋๋ค. HTML ๋ด์ ์ ํจํ DOM ๋ ธ๋์ฌ์ผ ํฉ๋๋ค.callback
(์ ํ ์ฌํญ): ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง๋ ํ ์คํ๋ ํจ์์ ๋๋ค.
์์ :
App
์ด๋ผ๋ ๊ฐ๋จํ React ์ปดํฌ๋ํธ๊ฐ ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค:
import React from 'react';
import ReactDOM from 'react-dom/client';
function App() {
return (
<div>
<h1>Hello, React!</h1>
<p>This is a simple React component.</p>
</div>
);
}
๊ทธ๋ฆฌ๊ณ ID๊ฐ "root"์ธ ์๋ฆฌ๋จผํธ๋ฅผ ๊ฐ์ง HTML ํ์ผ์ด ์์ต๋๋ค:
<div id="root"></div>
App
์ปดํฌ๋ํธ๋ฅผ "root" ์๋ฆฌ๋จผํธ์ ๋ ๋๋งํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํฉ๋๋ค:
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<App />);
์ค์ ์ฌํญ (React 18 ์ด์): React 18 ์ด์์์๋ ReactDOM.render
๊ฐ ๋ ๊ฑฐ์๋ก ๊ฐ์ฃผ๋ฉ๋๋ค. ์์์ ์ค๋ช
ํ ๋๋ก ReactDOM.createRoot
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ถ์ฅ๋๋ ์ ๊ทผ ๋ฐฉ์์
๋๋ค. ์ด๋ React 18์ ๋์
๋ ์๋ก์ด ๋์์ฑ ๊ธฐ๋ฅ์ ํ์ฑํํฉ๋๋ค.
์
๋ฐ์ดํธ ์ดํดํ๊ธฐ: ReactDOM.render()
๋ ์ปดํฌ๋ํธ์ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋ ๋ DOM์ ์
๋ฐ์ดํธํ๋ ์ญํ ๋ ํฉ๋๋ค. React๋ ๊ฐ์ DOM์ ์ฌ์ฉํ์ฌ ํ์ฌ ์ํ์ ์ํ๋ ์ํ๋ฅผ ํจ์จ์ ์ผ๋ก ๋น๊ตํ๊ณ ์ค์ DOM์ ํ์ํ ๋ถ๋ถ๋ง ์
๋ฐ์ดํธํ์ฌ ์ฑ๋ฅ ์ค๋ฒํค๋๋ฅผ ์ต์ํํฉ๋๋ค.
ReactDOM.hydrate()
ReactDOM.hydrate()
๋ ์ด๋ฏธ ์๋ฒ์์ ๋ ๋๋ง๋ React ์ ํ๋ฆฌ์ผ์ด์
์ ๋ ๋๋งํ ๋ ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์ด๊ธฐ ๋ก๋ฉ ์ฑ๋ฅ์ ๊ฐ์ ํ๊ณ SEO๋ฅผ ํฅ์์ํค๋ ํต์ฌ ๊ธฐ์ ์
๋๋ค.
์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง(SSR): SSR์์๋ React ์ปดํฌ๋ํธ๊ฐ ์๋ฒ์์ HTML๋ก ๋ ๋๋ง๋ฉ๋๋ค. ์ด HTML์ ๋ธ๋ผ์ฐ์ ๋ก ์ ์ก๋์ด ์ด๊ธฐ ์ฝํ
์ธ ๋ฅผ ์ฆ์ ํ์ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ธ๋ผ์ฐ์ ๋ ์ฌ์ ํ ์ ํ๋ฆฌ์ผ์ด์
์ "ํ์ด๋๋ ์ดํธ(hydrate)"ํด์ผ ํฉ๋๋ค. ์ฆ, ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ์ฒจ๋ถํ๊ณ ์ ํ๋ฆฌ์ผ์ด์
์ ์ํธ์์ฉ ๊ฐ๋ฅํ๊ฒ ๋ง๋ค์ด์ผ ํฉ๋๋ค. ReactDOM.hydrate()
๋ ์๋ฒ์์ ๋ ๋๋ง๋ HTML์ ๊ฐ์ ธ์ React ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ์ฒจ๋ถํ์ฌ ์ ํ๋ฆฌ์ผ์ด์
์ ์์ ํ ๊ธฐ๋ฅํ๊ฒ ๋ง๋ญ๋๋ค.
๊ตฌ๋ฌธ:
ReactDOM.hydrate(element, container[, callback])
๋งค๊ฐ๋ณ์๋ ReactDOM.render()
์ ๋์ผํฉ๋๋ค.
์์ :
์๋ฒ์์๋ React ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฌธ์์ด๋ก ๋ ๋๋งํฉ๋๋ค:
import React from 'react';
import ReactDOMServer from 'react-dom/server';
import App from './App';
const html = ReactDOMServer.renderToString(<App />);
์ด HTML์ ํด๋ผ์ด์ธํธ๋ก ์ ์ก๋ฉ๋๋ค.
ํด๋ผ์ด์ธํธ ์ธก์์๋ ReactDOM.hydrate()
๋ฅผ ์ฌ์ฉํ์ฌ React ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ์ฒจ๋ถํฉ๋๋ค:
import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';
const root = ReactDOM.createRoot(document.getElementById('root'));
root.hydrate(<App />);
ํ์ด๋๋ ์ด์ ์ ์ด์ :
- ์ด๊ธฐ ๋ก๋ฉ ์๊ฐ ๊ฐ์ : ์ฌ์ฉ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๊ฐ ์์ ํ ๋ก๋๋๊ธฐ ์ ์๋ ์ฝํ ์ธ ๋ฅผ ์ฆ์ ๋ณผ ์ ์์ต๋๋ค.
- SEO ํฅ์: ๊ฒ์ ์์ง์ด ์์ ํ ๋ ๋๋ง๋ HTML์ ํฌ๋กค๋งํ๊ณ ์ธ๋ฑ์ฑํ ์ ์์ต๋๋ค.
ReactDOM.unmountComponentAtNode()
ReactDOM.unmountComponentAtNode()
๋ ๋ง์ดํธ๋ ์ปดํฌ๋ํธ๋ฅผ DOM์์ ์ ๊ฑฐํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ UI์ ์ผ๋ถ๋ฅผ ๋์ ์ผ๋ก ์ ๊ฑฐํด์ผ ํ๊ฑฐ๋ ํ์ด์ง๋ฅผ ๋ฒ์ด๋๊ธฐ ์ ์ ๋ฆฌ์์ค๋ฅผ ์ ๋ฆฌํ ๋ ์ ์ฉํ ์ ์์ต๋๋ค.
๊ตฌ๋ฌธ:
ReactDOM.unmountComponentAtNode(container)
container
: ์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ๋ DOM ์๋ฆฌ๋จผํธ์ ๋๋ค.
์์ :
import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';
const rootElement = document.getElementById('root');
const root = ReactDOM.createRoot(rootElement);
root.render(<App />);
// ๋์ค์ ์ปดํฌ๋ํธ๋ฅผ ์ธ๋ง์ดํธํ๋ ค๋ฉด:
root.unmount();
ReactDOM.unmountComponentAtNode(rootElement)
๋ฅผ ํธ์ถํ๋ฉด App
์ปดํฌ๋ํธ๊ฐ DOM์์ ์ ๊ฑฐ๋๊ณ , ์ด์ ๊ด๋ จ๋ ๋ชจ๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋์ ๋ฆฌ์์ค๊ฐ ์ ๋ฆฌ๋ฉ๋๋ค.
์ฌ์ฉ ์์ :
- UI์์ ๋ชจ๋ฌ์ด๋ ๋ค์ด์ผ๋ก๊ทธ๋ฅผ ์ ๊ฑฐํ ๋.
- ๋ค๋ฅธ ํ์ด์ง๋ก ์ด๋ํ๊ธฐ ์ ์ ์ปดํฌ๋ํธ๋ฅผ ์ ๋ฆฌํ ๋.
- ์๋ก ๋ค๋ฅธ ์ปดํฌ๋ํธ ๊ฐ์ ๋์ ์ผ๋ก ์ ํํ ๋.
ReactDOM.findDOMNode() (๋ ๊ฑฐ์)
์ค์: ReactDOM.findDOMNode()
๋ ๋ ๊ฑฐ์๋ก ๊ฐ์ฃผ๋๋ฉฐ ์ต์ React ์ ํ๋ฆฌ์ผ์ด์
์์๋ ์ฌ์ฉ์ด ๊ถ์ฅ๋์ง ์์ต๋๋ค. ์ด์ ์๋ ๋ง์ดํธ๋ ์ปดํฌ๋ํธ์ ๊ธฐ๋ณธ DOM ๋
ธ๋์ ์ ๊ทผํ๋ ๋ฐ ์ฌ์ฉ๋์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด ๋ฐฉ๋ฒ์ React์ ์ถ์ํ๋ฅผ ๊นจ๋จ๋ฆฌ๊ณ , ํนํ ํจ์ํ ์ปดํฌ๋ํธ์ ํ
์ ๋์
์ผ๋ก ์ธํด ์์ธกํ ์ ์๋ ๋์์ ์ ๋ฐํ ์ ์์ด ์ฌ์ฉ์ด ์ง์๋ฉ๋๋ค.
๋์์ ์ธ ์ ๊ทผ ๋ฐฉ์:
ReactDOM.findDOMNode()
๋ฅผ ์ฌ์ฉํ๋ ๋์ ๋ค์๊ณผ ๊ฐ์ ๋์์ ์ธ ์ ๊ทผ ๋ฐฉ์์ ๊ณ ๋ คํ์ธ์:
- Ref ์ฌ์ฉ: React ref๋ฅผ ์ฌ์ฉํ์ฌ DOM ๋ ธ๋์ ์ง์ ์ ๊ทผํฉ๋๋ค. ์ด๊ฒ์ด DOM ์๋ฆฌ๋จผํธ์ ์ํธ์์ฉํ๋ ๊ถ์ฅ ๋ฐฉ๋ฒ์ ๋๋ค.
- ์ ์ด ์ปดํฌ๋ํธ: ์ปดํฌ๋ํธ์ ์ํ๋ฅผ React๋ก ๊ด๋ฆฌํ์ฌ "์ ์ด"๋๋๋ก ๋ง๋ญ๋๋ค. ์ด๋ฅผ ํตํด DOM์ ์ง์ ์ ๊ทผํ์ง ์๊ณ ๋ UI๋ฅผ ์กฐ์ํ ์ ์์ต๋๋ค.
- ์ด๋ฒคํธ ํธ๋ค๋ฌ: ์ปดํฌ๋ํธ์ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ์ฒจ๋ถํ๊ณ ์ด๋ฒคํธ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ๋์ DOM ์๋ฆฌ๋จผํธ์ ์ ๊ทผํฉ๋๋ค.
React 18์ ๋์์ฑ๊ณผ ReactDOM
React 18์ React๊ฐ ๋ ๋๋ง ์์ ์ ์ค๋จ, ์ผ์ ์ค์ง, ์ฌ๊ฐ ๋๋ ํฌ๊ธฐํ ์ ์๊ฒ ํ๋ ์๋ก์ด ๋ฉ์ปค๋์ฆ์ธ ๋์์ฑ์ ๋์ ํ์ต๋๋ค. ์ด๋ ํธ๋์ง์ ๋ฐ ์ ํ์ ํ์ด๋๋ ์ด์ ๊ณผ ๊ฐ์ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ๊ฐ๋ฅํ๊ฒ ํ์ฌ ๋ ๋ถ๋๋ฝ๊ณ ๋ฐ์์ฑ์ด ๋ฐ์ด๋ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํฉ๋๋ค.
ReactDOM์ ๋ฏธ์น๋ ์ํฅ: ReactDOM.createRoot
์ ์ฑํ์ ๋์์ฑ์ ์ด์ ์ ํ์ฉํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์ด ๋ฉ์๋๋ ์ ํ๋ฆฌ์ผ์ด์
์ด ๋ ๋๋ง๋๋ ๋ฃจํธ๋ฅผ ์์ฑํ์ฌ React๊ฐ ๋ ๋๋ง ์์
์ ๋ณด๋ค ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋๋ก ํฉ๋๋ค.
ํธ๋์ง์ (Transitions): ํธ๋์ง์ ์ ์ฌ์ฉํ๋ฉด ํน์ ์ํ ์ ๋ฐ์ดํธ๋ฅผ ๊ธด๊ธํ์ง ์์ ๊ฒ์ผ๋ก ํ์ํ์ฌ React๊ฐ ๋ ์ค์ํ ์ ๋ฐ์ดํธ๋ฅผ ์ฐ์ ์ฒ๋ฆฌํ๊ณ ๋ฐ์์ฑ์ ์ ์งํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ผ์ฐํธ ๊ฐ ์ด๋ ์ ๋ผ์ฐํธ ์ ํ์ ๊ธด๊ธํ์ง ์์ ์ ๋ฐ์ดํธ๋ก ํ์ํ์ฌ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ ์ค์๋ UI๊ฐ ๋ฐ์์ฑ์ ์ ์งํ๋๋ก ํ ์ ์์ต๋๋ค.
์ ํ์ ํ์ด๋๋ ์ด์ (Selective Hydration): ์ ํ์ ํ์ด๋๋ ์ด์ ์ ์ฌ์ฉํ๋ฉด React๋ ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์ ํ ๋ฒ์ ํ์ด๋๋ ์ด์ ํ๋ ๋์ , ํ์์ ๋ฐ๋ผ ๊ฐ๋ณ ์ปดํฌ๋ํธ๋ฅผ ํ์ด๋๋ ์ด์ ํ ์ ์์ต๋๋ค. ์ด๋ ๋๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด๊ธฐ ๋ก๋ฉ ์๊ฐ์ ํฌ๊ฒ ํฅ์์ํต๋๋ค.
React ReactDOM์ ๋ํ ๊ธ๋ก๋ฒ ๊ณ ๋ ค์ฌํญ
์ ์ธ๊ณ ์ฌ์ฉ์๋ฅผ ๋์์ผ๋ก React ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ๋๋ ๊ตญ์ ํ(i18n) ๋ฐ ํ์งํ(l10n)์ ๊ฐ์ ์์๋ฅผ ๊ณ ๋ คํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ReactDOM ์์ฒด๊ฐ ์ด๋ฌํ ์ธก๋ฉด์ ์ง์ ์ฒ๋ฆฌํ์ง๋ ์์ง๋ง, i18n ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก์ ํตํฉํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
- ๊ตญ์ ํ(i18n): ์์ง๋์ด๋ง ๋ณ๊ฒฝ ์์ด ๋ค์ํ ์ธ์ด์ ์ง์ญ์ ๋ง๊ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ์กฐ์ ํ ์ ์๋๋ก ์ค๊ณํ๊ณ ๊ฐ๋ฐํ๋ ๊ณผ์ ์ ๋๋ค.
- ํ์งํ(l10n): ๊ตญ์ ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ํน์ ์ธ์ด ๋๋ ์ง์ญ์ ๋ง๊ฒ ํ ์คํธ๋ฅผ ๋ฒ์ญํ๊ณ , ์์์ ์กฐ์ ํ๋ฉฐ, ๋ฌธํ์ ์ฐจ์ด๋ฅผ ์ฒ๋ฆฌํ์ฌ ์ ์์ํค๋ ๊ณผ์ ์ ๋๋ค.
i18n ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ:
react-i18next
๋ globalize
์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ฒ์ญ, ๋ ์ง ๋ฐ ์๊ฐ ํ์ ์ง์ , ๊ธฐํ ํ์งํ ๊ด๋ จ ์์
์ ๊ด๋ฆฌํ๋ ๋๊ตฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด๋ฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ผ๋ฐ์ ์ผ๋ก React ๋ฐ ReactDOM๊ณผ ์ํํ๊ฒ ํตํฉ๋ฉ๋๋ค.
react-i18next ์์ :
import React from 'react';
import { useTranslation } from 'react-i18next';
function MyComponent() {
const { t } = useTranslation();
return (
<div>
<h1>{t('greeting')}</h1>
<p>{t('description')}</p>
</div>
);
}
์ด ์์ ์์ useTranslation
ํ
์ ๋ฒ์ญ ํจ์ t
์ ๋ํ ์ ๊ทผ์ ์ ๊ณตํ๋ฉฐ, ์ด ํจ์๋ ์ฃผ์ด์ง ํค์ ๋ํ ์ ์ ํ ๋ฒ์ญ์ ๊ฒ์ํฉ๋๋ค. ๋ฒ์ญ ์์ฒด๋ ์ผ๋ฐ์ ์ผ๋ก ๊ฐ ์ธ์ด๋ณ๋ก ๋ณ๋์ ํ์ผ์ ์ ์ฅ๋ฉ๋๋ค.
์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ(RTL) ๋ ์ด์์:
์๋์ด ๋ฐ ํ๋ธ๋ฆฌ์ด์ ๊ฐ์ ์ผ๋ถ ์ธ์ด๋ ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ์ผ๋ก ์๋๋ค. ์ด๋ฌํ ์ธ์ด๋ฅผ ์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ๋๋ UI๊ฐ RTL ๋ ์ด์์์ ์ง์ํ๋์ง ํ์ธํด์ผ ํฉ๋๋ค. ์ด๋ ์ผ๋ฐ์ ์ผ๋ก ํ ์คํธ ๋ฐฉํฅ ์กฐ์ , ์ปดํฌ๋ํธ ๋ ์ด์์ ๋ฏธ๋ฌ๋ง ๋ฐ ์๋ฐฉํฅ ํ ์คํธ ์ฒ๋ฆฌ๋ฅผ ํฌํจํฉ๋๋ค.
ReactDOM ์ฌ์ฉ์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
ํจ์จ์ ์ด๊ณ ์ ์ง๋ณด์ ๊ฐ๋ฅํ React ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณด์ฅํ๋ ค๋ฉด ReactDOM์ ์ฌ์ฉํ ๋ ๋ค์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด์ธ์:
- React 18 ์ด์์์๋
ReactDOM.createRoot
์ฌ์ฉ: ์ด๊ฒ์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ ๋๋งํ๊ณ ๋์์ฑ์ ์ด์ ์ ํ์ฉํ๋ ๊ถ์ฅ ๋ฐฉ๋ฒ์ ๋๋ค. - ์ง์ ์ ์ธ DOM ์กฐ์ ํผํ๊ธฐ: React๊ฐ DOM์ ๊ด๋ฆฌํ๋๋ก ํ์ธ์. ์ง์ ์ ์ธ DOM ์กฐ์์ ๋ถ์ผ์น์ ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ์ ๋ฐํ ์ ์์ต๋๋ค.
- Ref๋ ๋๋ฌผ๊ฒ ์ฌ์ฉ: ์ ๋ ฅ ์์์ ํฌ์ปค์ค๋ฅผ ๋ง์ถ๋ ๋ฑ ํน์ ๋ชฉ์ ์ ์ํด DOM ๋ ธ๋์ ์ง์ ์ ๊ทผํด์ผ ํ ๋๋ง ref๋ฅผ ์ฌ์ฉํ์ธ์.
- ๋ ๋๋ง ์ฑ๋ฅ ์ต์ ํ: ๋ฉ๋ชจ์ด์ ์ด์ ๋ฐ shouldComponentUpdate์ ๊ฐ์ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ๋ถํ์ํ ๋ฆฌ๋ ๋๋ง์ ๋ฐฉ์งํ์ธ์.
- ์ฑ๋ฅ ๋ฐ SEO ํฅ์์ ์ํด ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง ๊ณ ๋ ค.
- ๊ตญ์ ํ ๋ฐ ํ์งํ๋ฅผ ์ํด i18n ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ.
- ๋ค์ํ ๋ธ๋ผ์ฐ์ ์ ์ฅ์น์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒ ์ ํ ํ ์คํธ.
๊ฒฐ๋ก
ReactDOM์ React ์ํ๊ณ์ ํ์์ ์ธ ๋ถ๋ถ์ผ๋ก, React ์ปดํฌ๋ํธ์ ๋ธ๋ผ์ฐ์ ์ DOM ์ฌ์ด์ ๋ค๋ฆฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. ReactDOM.render()
, ReactDOM.hydrate()
, ReactDOM.unmountComponentAtNode()
์ ๊ฐ์ ํต์ฌ ๋ฉ์๋๋ฅผ ์ดํดํ๊ณ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ฑํํจ์ผ๋ก์จ ์ฑ๋ฅ์ด ๋ฐ์ด๋๊ณ ์ ์ง๋ณด์ ๊ฐ๋ฅํ๋ฉฐ ์ ์ธ๊ณ์ ์ผ๋ก ์ ๊ทผ ๊ฐ๋ฅํ React ์ ํ๋ฆฌ์ผ์ด์
์ ๊ตฌ์ถํ ์ ์์ต๋๋ค. React 18์ ๋์์ฑ์ด ๋์
๋จ์ ๋ฐ๋ผ ReactDOM.createRoot
๋ฅผ ์์ฉํ๋ ๊ฒ์ ์๋ก์ด ์์ค์ ์ฑ๋ฅ๊ณผ ๋ฐ์์ฑ์ ์ฌ๋ ๋ฐ ์ค์ํฉ๋๋ค. ์ ์ธ๊ณ ์ฌ์ฉ์๋ฅผ ์ํด ๊ตฌ์ถํ ๋๋ ์ง์ ์ผ๋ก ํฌ์ฉ์ ์ด๊ณ ์ ๊ทผ ๊ฐ๋ฅํ ์ฌ์ฉ์ ๊ฒฝํ์ ๋ง๋ค๊ธฐ ์ํด ๊ตญ์ ํ ๋ฐ ํ์งํ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๊ณ ๋ คํ๋ ๊ฒ์ ์์ง ๋ง์ธ์.