์ ์ธ๊ณ ๊ฐ๋ฐ์๋ฅผ ์ํ React ์ปดํฌ๋ํธ ๋ ๋๋ง ์ข ํฉ ๊ฐ์ด๋. ํต์ฌ ๊ฐ๋ , ์๋ช ์ฃผ๊ธฐ, ์ต์ ํ ์ ๋ต์ ์ค๋ช ํฉ๋๋ค.
React ์ปดํฌ๋ํธ ๋ ๋๋ง ์์ ์ ๋ณต: ๊ธ๋ก๋ฒ ๊ด์
๋ณํ๊ฐ ๋น ๋ฅธ ํ๋ก ํธ์๋ ๊ฐ๋ฐ ์ธ๊ณ์์ React ์ปดํฌ๋ํธ๊ฐ ์ด๋ป๊ฒ ๋ ๋๋ง๋๋์ง ์ดํดํ๋ ๊ฒ์ ํจ์จ์ ์ด๊ณ ํ์ฅ ๊ฐ๋ฅํ๋ฉฐ ๋งค๋ ฅ์ ์ธ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌ์ถํ๋ ๋ฐ ํ์์ ์ ๋๋ค. ์์น๋ ์ฃผ๋ ฅ ๊ธฐ์ ์คํ์ ๊ด๊ณ์์ด ์ ์ธ๊ณ ๊ฐ๋ฐ์๋ค์๊ฒ React์ ์ ์ธ์ ์ธ UI ๊ด๋ฆฌ ๋ฐฉ์์ ๊ฐ๋ ฅํ ํจ๋ฌ๋ค์์ ์ ๊ณตํฉ๋๋ค. ์ด ์ข ํฉ ๊ฐ์ด๋๋ React ์ปดํฌ๋ํธ ๋ ๋๋ง์ ๋ณต์ก์ฑ์ ๋ช ํํ ์ค๋ช ํ๊ณ , ํต์ฌ ๋ฉ์ปค๋์ฆ, ์๋ช ์ฃผ๊ธฐ, ์ต์ ํ ๊ธฐ๋ฒ์ ๋ํ ๊ธ๋ก๋ฒ ๊ด์ ์ ์ ๊ณตํ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค.
React ๋ ๋๋ง์ ํต์ฌ: ์ ์ธํ UI์ ๊ฐ์ DOM
React์ ํต์ฌ์ ์ ์ธํ ํ๋ก๊ทธ๋๋ฐ ์คํ์ผ์ ์งํฅํ๋ค๋ ๊ฒ์ ๋๋ค. ๊ฐ๋ฐ์๋ ๋ธ๋ผ์ฐ์ ์ UI๋ฅผ ๋จ๊ณ๋ณ๋ก ์ด๋ป๊ฒ ์ ๋ฐ์ดํธํ ์ง ๋ช ๋ น์ ์ผ๋ก ์ง์ํ๋ ๋์ , ํน์ ์ํ(state)๊ฐ ์ฃผ์ด์ก์ ๋ UI๊ฐ ์ด๋ป๊ฒ ๋ณด์ฌ์ผ ํ๋์ง๋ฅผ ๊ธฐ์ ํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด React๋ ์ด ๊ธฐ์ ์ ๋ฐ์ ๋ธ๋ผ์ฐ์ ์ ์ค์ ๋ฌธ์ ๊ฐ์ฒด ๋ชจ๋ธ(DOM)์ ํจ์จ์ ์ผ๋ก ์ ๋ฐ์ดํธํฉ๋๋ค. ์ด๋ฌํ ์ ์ธ์ ํน์ฑ์ ๋ณต์กํ UI ๊ฐ๋ฐ์ ํฌ๊ฒ ๋จ์ํํ์ฌ, ๊ฐ๋ฐ์๊ฐ UI ์์์ ์ธ์ธํ ์กฐ์๋ณด๋ค๋ ์ํ๋ ์ต์ข ์ํ์ ์ง์คํ ์ ์๋๋ก ํฉ๋๋ค.
React์ ํจ์จ์ ์ธ UI ์ ๋ฐ์ดํธ ๋น๊ฒฐ์ ๊ฐ์ DOM(Virtual DOM) ์ฌ์ฉ์ ์์ต๋๋ค. ๊ฐ์ DOM์ ์ค์ DOM์ ๊ฐ๋ณ๊ฒ ๋ฉ๋ชจ๋ฆฌ์ ํํํ ๊ฒ์ ๋๋ค. ์ปดํฌ๋ํธ์ state๋ props๊ฐ ๋ณ๊ฒฝ๋ ๋, React๋ ๋ธ๋ผ์ฐ์ ์ DOM์ ์ง์ ์กฐ์ํ์ง ์์ต๋๋ค. ๋์ , ์ ๋ฐ์ดํธ๋ UI๋ฅผ ๋ํ๋ด๋ ์๋ก์ด ๊ฐ์ DOM ํธ๋ฆฌ๋ฅผ ์์ฑํฉ๋๋ค. ์ด ์๋ก์ด ํธ๋ฆฌ๋ ๋ํ(diffing)์ด๋ผ๋ ๊ณผ์ ์์ ์ด์ ๊ฐ์ DOM ํธ๋ฆฌ์ ๋น๊ต๋ฉ๋๋ค.
๋ํ ์๊ณ ๋ฆฌ์ฆ์ ์ค์ DOM์ ์๋ก์ด ๊ฐ์ DOM๊ณผ ๋๊ธฐํํ๋ ๋ฐ ํ์ํ ์ต์ํ์ ๋ณ๊ฒฝ ์ฌํญ์ ์๋ณํฉ๋๋ค. ์ด ๊ณผ์ ์ ์ฌ์กฐ์ (reconciliation)์ด๋ผ๊ณ ํฉ๋๋ค. ์ค์ ๋ก ๋ณ๊ฒฝ๋ ๋ถ๋ถ๋ง DOM์ ์ ๋ฐ์ดํธํจ์ผ๋ก์จ, React๋ ์ ๋ช ๋๊ฒ ๋๋ฆฌ๊ณ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์ ๋ฐํ ์ ์๋ ์ง์ ์ ์ธ DOM ์กฐ์์ ์ต์ํํฉ๋๋ค. ์ด ํจ์จ์ ์ธ ์ฌ์กฐ์ ๊ณผ์ ์ React ์ฑ๋ฅ์ ์ด์์ด๋ฉฐ, ์ ์ธ๊ณ ๊ฐ๋ฐ์์ ์ฌ์ฉ์ ๋ชจ๋์๊ฒ ์ด์ ์ ์ ๊ณตํฉ๋๋ค.
์ปดํฌ๋ํธ ๋ ๋๋ง ์๋ช ์ฃผ๊ธฐ ์ดํดํ๊ธฐ
React ์ปดํฌ๋ํธ๋ ์ปดํฌ๋ํธ๊ฐ ์์ฑ๋์ด DOM์ ์ฝ์ ๋๋ ์๊ฐ๋ถํฐ ์ ๊ฑฐ๋ ๋๊น์ง ๋ฐ์ํ๋ ์ผ๋ จ์ ์ด๋ฒคํธ ๋๋ ๋จ๊ณ์ธ ์๋ช ์ฃผ๊ธฐ(lifecycle)๋ฅผ ๊ฑฐ์นฉ๋๋ค. ์ด ์๋ช ์ฃผ๊ธฐ๋ฅผ ์ดํดํ๋ ๊ฒ์ ์ปดํฌ๋ํธ์ ๋์์ ๊ด๋ฆฌํ๊ณ , ๋ถ์ ํจ๊ณผ(side effects)๋ฅผ ์ฒ๋ฆฌํ๋ฉฐ, ์ฑ๋ฅ์ ์ต์ ํํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค. ํด๋์ค ์ปดํฌ๋ํธ๋ ๋ ๋ช ์์ ์ธ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ฐ์ง์ง๋ง, ํ (Hooks)์ ์ฌ์ฉํ๋ ํจ์ํ ์ปดํฌ๋ํธ๋ ๋ ํ๋์ ์ด๊ณ ์ข ์ข ๋ ์ง๊ด์ ์ธ ๋ฐฉ์์ผ๋ก ์ ์ฌํ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ต๋๋ค.
๋ง์ดํ (Mounting)
๋ง์ดํ ๋จ๊ณ๋ ์ปดํฌ๋ํธ๊ฐ ์์ฑ๋์ด ์ฒ์์ผ๋ก DOM์ ์ฝ์ ๋ ๋์ ๋๋ค. ํด๋์ค ์ปดํฌ๋ํธ์ ๊ฒฝ์ฐ ๊ด๋ จ๋ ์ฃผ์ ๋ฉ์๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- `constructor()`: ๊ฐ์ฅ ๋จผ์ ํธ์ถ๋๋ ๋ฉ์๋์ ๋๋ค. state๋ฅผ ์ด๊ธฐํํ๊ณ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ๋ฐ์ธ๋ฉํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ปดํฌ๋ํธ์ ์ด๊ธฐ ๋ฐ์ดํฐ๋ฅผ ์ค์ ํ๋ ๊ณณ์ ๋๋ค.
- `static getDerivedStateFromProps(props, state)`: `render()` ์ ์ ํธ์ถ๋ฉ๋๋ค. props ๋ณ๊ฒฝ์ ๋ฐ๋ผ state๋ฅผ ์ ๋ฐ์ดํธํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ํ์ง๋ง ๊ฐ๋ฅํ๋ฉด ์ด ๋ฉ์๋ ์ฌ์ฉ์ ํผํ๊ณ ์ง์ ์ ์ธ ์ํ ๊ด๋ฆฌ๋ ๋ค๋ฅธ ์๋ช ์ฃผ๊ธฐ ๋ฉ์๋๋ฅผ ์ ํธํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
- `render()`: ์ ์ผํ ํ์ ๋ฉ์๋์ ๋๋ค. UI๊ฐ ์ด๋ป๊ฒ ๋ณด์ฌ์ผ ํ๋์ง๋ฅผ ์ค๋ช ํ๋ JSX๋ฅผ ๋ฐํํฉ๋๋ค.
- `componentDidMount()`: ์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ๋(DOM์ ์ฝ์ ๋) ์งํ์ ํธ์ถ๋ฉ๋๋ค. ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ, ๊ตฌ๋ ์ค์ , ๋ธ๋ผ์ฐ์ DOM API์์ ์ํธ์์ฉ๊ณผ ๊ฐ์ ๋ถ์ ํจ๊ณผ๋ฅผ ์ํํ๊ธฐ์ ์ด์์ ์ธ ์ฅ์์ ๋๋ค. ์๋ฅผ ๋ค์ด, ๊ธ๋ก๋ฒ API ์๋ํฌ์ธํธ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ์์ ์ด ์ผ๋ฐ์ ์ผ๋ก ์ฌ๊ธฐ์ ๋ฐ์ํฉ๋๋ค.
ํ ์ ์ฌ์ฉํ๋ ํจ์ํ ์ปดํฌ๋ํธ์ ๊ฒฝ์ฐ, ๋น ์์กด์ฑ ๋ฐฐ์ด(`[]`)์ ๊ฐ์ง `useEffect()`๊ฐ `componentDidMount()`์ ์ ์ฌํ ๋ชฉ์ ์ ์ํํ์ฌ, ์ด๊ธฐ ๋ ๋๋ง ๋ฐ DOM ์ ๋ฐ์ดํธ ํ์ ์ฝ๋๋ฅผ ์คํํ ์ ์๊ฒ ํด์ค๋๋ค.
์ ๋ฐ์ดํธ(Updating)
์ ๋ฐ์ดํธ ๋จ๊ณ๋ ์ปดํฌ๋ํธ์ state๋ props๊ฐ ๋ณ๊ฒฝ๋์ด ๋ฆฌ๋ ๋๋ง์ด ๋ฐ์ํ ๋ ์ผ์ด๋ฉ๋๋ค. ํด๋์ค ์ปดํฌ๋ํธ์ ๊ฒฝ์ฐ ๋ค์ ๋ฉ์๋๋ค์ด ๊ด๋ จ๋ฉ๋๋ค:
- `static getDerivedStateFromProps(props, state)`: ์์ ์ธ๊ธํ๋ฏ์ด, props๋ก๋ถํฐ state๋ฅผ ํ์์ํค๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- `shouldComponentUpdate(nextProps, nextState)`: ์ด ๋ฉ์๋๋ฅผ ํตํด ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง๋ ์ง ์ฌ๋ถ๋ฅผ ์ ์ดํ ์ ์์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก `true`๋ฅผ ๋ฐํํ๋ฉฐ, ์ด๋ ๋ชจ๋ state ๋๋ props ๋ณ๊ฒฝ ์ ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง๋๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. `false`๋ฅผ ๋ฐํํ๋ฉด ๋ถํ์ํ ๋ฆฌ๋ ๋๋ง์ ๋ฐฉ์งํ๊ณ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
- `render()`: ์ ๋ฐ์ดํธ๋ JSX๋ฅผ ๋ฐํํ๊ธฐ ์ํด ๋ค์ ํธ์ถ๋ฉ๋๋ค.
- `getSnapshotBeforeUpdate(prevProps, prevState)`: DOM์ด ์ ๋ฐ์ดํธ๋๊ธฐ ์ง์ ์ ํธ์ถ๋ฉ๋๋ค. DOM์ด ๋ณ๊ฒฝ๋๊ธฐ ์ ์ DOM์์ ์ผ๋ถ ์ ๋ณด(์: ์คํฌ๋กค ์์น)๋ฅผ ์บก์ฒํ ์ ์์ต๋๋ค. ๋ฐํ๋ ๊ฐ์ `componentDidUpdate()`์ ์ ๋ฌ๋ฉ๋๋ค.
- `componentDidUpdate(prevProps, prevState, snapshot)`: ์ปดํฌ๋ํธ๊ฐ ์ ๋ฐ์ดํธ๋๊ณ DOM์ด ๋ฆฌ๋ ๋๋ง๋ ์งํ์ ํธ์ถ๋ฉ๋๋ค. ์ ๋ฐ์ดํธ๋ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก API ํธ์ถ์ ํ๋ ๋ฑ, props ๋๋ state ๋ณ๊ฒฝ์ ๋ํ ๋ถ์ ํจ๊ณผ๋ฅผ ์ํํ๊ธฐ ์ข์ ๊ณณ์ ๋๋ค. ๋ฆฌ๋ ๋๋ง์ ๋ฐฉ์งํ๊ธฐ ์ํ ์กฐ๊ฑด๋ถ ๋ก์ง์ ํฌํจํ์ฌ ๋ฌดํ ๋ฃจํ๋ฅผ ํผํ๋๋ก ์ฃผ์ํด์ผ ํฉ๋๋ค.
ํ ์ ์ฌ์ฉํ๋ ํจ์ํ ์ปดํฌ๋ํธ์์๋ `useState`๋ `useReducer`๋ก ๊ด๋ฆฌ๋๋ state์ ๋ณ๊ฒฝ, ๋๋ ๋ฆฌ๋ ๋๋ง์ ์ ๋ฐํ๋ props์ ๋ณ๊ฒฝ์ด ๋ฐ์ํ๋ฉด, ์์กด์ฑ์ด ์ด๋ฅผ ๋ง์ง ์๋ ํ `useEffect` ์ฝ๋ฐฑ์ด ์คํ๋ฉ๋๋ค. `useMemo`์ `useCallback` ํ ์ ๊ฐ๊ณผ ํจ์๋ฅผ ๋ฉ๋ชจ์ด์ ์ด์ ํ์ฌ ๋ถํ์ํ ์ฌ๊ณ์ฐ์ ๋ฐฉ์งํจ์ผ๋ก์จ ์ ๋ฐ์ดํธ๋ฅผ ์ต์ ํํ๋ ๋ฐ ์ค์ํฉ๋๋ค.
์ธ๋ง์ดํ (Unmounting)
์ธ๋ง์ดํ ๋จ๊ณ๋ ์ปดํฌ๋ํธ๊ฐ DOM์์ ์ ๊ฑฐ๋ ๋ ๋ฐ์ํฉ๋๋ค. ํด๋์ค ์ปดํฌ๋ํธ์ ๊ฒฝ์ฐ ์ฃผ์ ๋ฉ์๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- `componentWillUnmount()`: ์ปดํฌ๋ํธ๊ฐ ์ธ๋ง์ดํธ๋๊ณ ํ๊ดด๋๊ธฐ ์ง์ ์ ํธ์ถ๋ฉ๋๋ค. ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ํ์ด๋จธ ํด์ , ๋คํธ์ํฌ ์์ฒญ ์ทจ์, ์ด๋ฒคํธ ๋ฆฌ์ค๋ ์ ๊ฑฐ ๋ฑ ํ์ํ ๋ชจ๋ ์ ๋ฆฌ ์์ ์ ์ํํ๋ ๊ณณ์ ๋๋ค. ๊ธ๋ก๋ฒ ์ฑํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ํด๋ณด์ธ์. ์ปดํฌ๋ํธ๋ฅผ ์ธ๋ง์ดํธํ๋ ๊ฒ์ WebSocket ์๋ฒ์์ ์ฐ๊ฒฐ์ ๋๋ ๊ฒ์ ํฌํจํ ์ ์์ต๋๋ค.
ํจ์ํ ์ปดํฌ๋ํธ์์๋ `useEffect`์์ ๋ฐํ๋ ์ ๋ฆฌ(cleanup) ํจ์๊ฐ ๋์ผํ ๋ชฉ์ ์ ์ํํฉ๋๋ค. ์๋ฅผ ๋ค์ด, `useEffect`์์ ํ์ด๋จธ๋ฅผ ์ค์ ํ๋ค๋ฉด, ํด๋น ํ์ด๋จธ๋ฅผ ํด์ ํ๋ ํจ์๋ฅผ `useEffect`์์ ๋ฐํํด์ผ ํฉ๋๋ค.
Keys: ํจ์จ์ ์ธ ๋ฆฌ์คํธ ๋ ๋๋ง์ ํ์ ์์
๊ตญ์ ์ ์ธ ์ด์ปค๋จธ์ค ํ๋ซํผ์ ์ํ ๋ชฉ๋ก์ด๋ ๊ธ๋ก๋ฒ ํ์ ๋๊ตฌ์ ์ฌ์ฉ์ ๋ชฉ๋ก๊ณผ ๊ฐ์ด ์ปดํฌ๋ํธ ๋ฆฌ์คํธ๋ฅผ ๋ ๋๋งํ ๋, ๊ฐ ํญ๋ชฉ์ ๊ณ ์ ํ๊ณ ์์ ์ ์ธ key prop์ ์ ๊ณตํ๋ ๊ฒ์ด ๋งค์ฐ ์ค์ํฉ๋๋ค. Key๋ React๊ฐ ์ด๋ค ํญ๋ชฉ์ด ๋ณ๊ฒฝ, ์ถ๊ฐ ๋๋ ์ ๊ฑฐ๋์๋์ง ์๋ณํ๋ ๋ฐ ๋์์ ์ค๋๋ค. Key๊ฐ ์์ผ๋ฉด React๋ ์ ๋ฐ์ดํธ๋ง๋ค ์ ์ฒด ๋ฆฌ์คํธ๋ฅผ ๋ค์ ๋ ๋๋งํด์ผ ํ๋ฏ๋ก ์๋นํ ์ฑ๋ฅ ์ ํ๋ฅผ ์ด๋ํ ์ ์์ต๋๋ค.
Key ์ฌ์ฉ์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก:
- Key๋ ํ์ ์์๋ค ์ฌ์ด์์ ๊ณ ์ ํด์ผ ํฉ๋๋ค.
- Key๋ ์์ ์ ์ด์ด์ผ ํฉ๋๋ค. ์ฆ, ๋ ๋๋ง ์ฌ์ด์ ๋ณ๊ฒฝ๋์ด์๋ ์ ๋ฉ๋๋ค.
- ๋ฆฌ์คํธ์ ์์๊ฐ ๋ฐ๋๊ฑฐ๋, ํํฐ๋ง๋๊ฑฐ๋, ํญ๋ชฉ์ด ๋ชฉ๋ก์ ์์์ด๋ ์ค๊ฐ์ ์ถ๊ฐ๋ ์ ์๋ ๊ฒฝ์ฐ ๋ฐฐ์ด ์ธ๋ฑ์ค๋ฅผ key๋ก ์ฌ์ฉํ๋ ๊ฒ์ ํผํด์ผ ํฉ๋๋ค. ์ด๋ ๋ฆฌ์คํธ ์์๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์ธ๋ฑ์ค๋ ๋ณ๊ฒฝ๋์ด React์ ์ฌ์กฐ์ ์๊ณ ๋ฆฌ์ฆ์ ํผ๋์ค๋ฝ๊ฒ ๋ง๋ค๊ธฐ ๋๋ฌธ์ ๋๋ค.
- ๋ฐ์ดํฐ์ ๊ณ ์ ID(์: `product.id`, `user.uuid`)๋ฅผ key๋ก ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋ค๋ฅธ ๋๋ฅ์ ์ฌ์ฉ์๋ค์ด ๊ณต์ ์ฅ๋ฐ๊ตฌ๋์ ์ํ์ ์ถ๊ฐํ๋ ์๋๋ฆฌ์ค๋ฅผ ์๊ฐํด๋ณด์ธ์. ๊ฐ ์ํ์ ๊ณ ์ ํ key๋ฅผ ๊ฐ์ ธ์ผ React๊ฐ ํญ๋ชฉ์ด ์ถ๊ฐ๋๊ฑฐ๋ ์ ๊ฑฐ๋๋ ์์์ ๊ด๊ณ์์ด ํ์๋ ์ฅ๋ฐ๊ตฌ๋๋ฅผ ํจ์จ์ ์ผ๋ก ์ ๋ฐ์ดํธํ ์ ์์ต๋๋ค.
React ๋ ๋๋ง ์ฑ๋ฅ ์ต์ ํ
์ฑ๋ฅ์ ์ ์ธ๊ณ ๊ฐ๋ฐ์๋ค์ ๊ณตํต๋ ๊ด์ฌ์ฌ์ ๋๋ค. React๋ ๋ ๋๋ง์ ์ต์ ํํ๊ธฐ ์ํ ์ฌ๋ฌ ๋๊ตฌ์ ๊ธฐ์ ์ ์ ๊ณตํฉ๋๋ค:
1. ํจ์ํ ์ปดํฌ๋ํธ๋ฅผ ์ํ `React.memo()`
React.memo()
๋ ํจ์ํ ์ปดํฌ๋ํธ๋ฅผ ๋ฉ๋ชจ์ด์ ์ด์
ํ๋ ๊ณ ์ฐจ ์ปดํฌ๋ํธ(HOC)์
๋๋ค. ์ปดํฌ๋ํธ์ props์ ๋ํด ์์ ๋น๊ต(shallow comparison)๋ฅผ ์ํํฉ๋๋ค. Props๊ฐ ๋ณ๊ฒฝ๋์ง ์์๋ค๋ฉด, React๋ ์ปดํฌ๋ํธ์ ๋ฆฌ๋ ๋๋ง์ ๊ฑด๋๋ฐ๊ณ ๋ง์ง๋ง์ผ๋ก ๋ ๋๋ง๋ ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฌ์ฉํฉ๋๋ค. ์ด๋ ํด๋์ค ์ปดํฌ๋ํธ์ `shouldComponentUpdate`์ ์ ์ฌํ์ง๋ง, ์ฃผ๋ก ํจ์ํ ์ปดํฌ๋ํธ์ ์ฌ์ฉ๋ฉ๋๋ค.
์์:
const ProductCard = React.memo(function ProductCard(props) {
/* render using props */
});
์ด๋ ๊ตญ์ ๋ด์ค ๊ธฐ์ฌ์ ๊ธด ์คํฌ๋กค ๋ชฉ๋ก์ ์๋ ๊ฐ๋ณ ํญ๋ชฉ์ฒ๋ผ ๋์ผํ props๋ก ์์ฃผ ๋ ๋๋ง๋๋ ์ปดํฌ๋ํธ์ ํนํ ์ ์ฉํฉ๋๋ค.
2. `useMemo()`์ `useCallback()` ํ
- `useMemo()`: ๊ณ์ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ฉ๋ชจ์ด์ ์ด์ ํฉ๋๋ค. ํจ์์ ์์กด์ฑ ๋ฐฐ์ด์ ์ธ์๋ก ๋ฐ์ต๋๋ค. ํจ์๋ ์์กด์ฑ ์ค ํ๋๊ฐ ๋ณ๊ฒฝ๋์์ ๋๋ง ๋ค์ ์คํ๋ฉ๋๋ค. ์ด๋ ๋น์ฉ์ด ๋ง์ด ๋๋ ๊ณ์ฐ์ด๋ ์์ ์ปดํฌ๋ํธ์ props๋ก ์ ๋ฌ๋๋ ๊ฐ์ฒด๋ ๋ฐฐ์ด์ ๋ฉ๋ชจ์ด์ ์ด์ ํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค.
- `useCallback()`: ํจ์๋ฅผ ๋ฉ๋ชจ์ด์ ์ด์ ํฉ๋๋ค. ํจ์์ ์์กด์ฑ ๋ฐฐ์ด์ ์ธ์๋ก ๋ฐ์ต๋๋ค. ์์กด์ฑ ์ค ํ๋๊ฐ ๋ณ๊ฒฝ๋์์ ๋๋ง ๋ณ๊ฒฝ๋๋ ๋ฉ๋ชจ์ด์ ์ด์ ๋ ๋ฒ์ ์ ์ฝ๋ฐฑ ํจ์๋ฅผ ๋ฐํํฉ๋๋ค. ์ด๋ ํจ์๋ฅผ props๋ก ๋ฐ๋ ์์ ์ปดํฌ๋ํธ์ ๋ถํ์ํ ๋ฆฌ๋ ๋๋ง์ ๋ฐฉ์งํ๋ ๋ฐ ๋งค์ฐ ์ค์ํ๋ฉฐ, ํนํ ๋ถ๋ชจ ์ปดํฌ๋ํธ ๋ด์ ์ ์๋ ํจ์์ผ ๊ฒฝ์ฐ์ ๋์ฑ ๊ทธ๋ ์ต๋๋ค.
๋ค์ํ ๊ธ๋ก๋ฒ ์ง์ญ์ ๋ฐ์ดํฐ๋ฅผ ํ์ํ๋ ๋ณต์กํ ๋์๋ณด๋๋ฅผ ์์ํด๋ณด์ธ์. `useMemo`๋ ์ง๊ณ๋ ๋ฐ์ดํฐ(์: ๋ชจ๋ ๋๋ฅ์ ์ด๋งค์ถ) ๊ณ์ฐ์ ๋ฉ๋ชจ์ด์ ์ด์ ํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์๊ณ , `useCallback`์ ํน์ ์ง์ญ ๋ฐ์ดํฐ๋ฅผ ํ์ํ๋ ๋ ์์ ๋ฉ๋ชจ์ด์ ์ด์ ๋ ์์ ์ปดํฌ๋ํธ์ ์ ๋ฌ๋๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ ํจ์๋ฅผ ๋ฉ๋ชจ์ด์ ์ด์ ํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
3. ์ง์ฐ ๋ก๋ฉ(Lazy Loading)๊ณผ ์ฝ๋ ๋ถํ (Code Splitting)
๋๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์ , ํนํ ๋ค์ํ ๋คํธ์ํฌ ํ๊ฒฝ์ ๊ฐ์ง ๊ธ๋ก๋ฒ ์ฌ์ฉ์ ๊ธฐ๋ฐ์ด ์ฌ์ฉํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ, ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ํ ๋ฒ์ ๋ก๋ํ๋ ๊ฒ์ ์ด๊ธฐ ๋ก๋ฉ ์๊ฐ์ ํด๋ก์ธ ์ ์์ต๋๋ค. ์ฝ๋ ๋ถํ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๋ฅผ ๋ ์์ ์ฒญํฌ๋ก ๋ถํ ํ์ฌ ํ์ํ ๋ ๋ก๋ํ ์ ์๊ฒ ํด์ค๋๋ค.
React๋ `React.lazy()`์ `Suspense`๋ฅผ ์ ๊ณตํ์ฌ ์ฝ๋ ๋ถํ ์ ์ฝ๊ฒ ๊ตฌํํ ์ ์๋๋ก ํฉ๋๋ค:
- `React.lazy()`: ๋์ ์ผ๋ก ๊ฐ์ ธ์จ(import) ์ปดํฌ๋ํธ๋ฅผ ์ผ๋ฐ ์ปดํฌ๋ํธ์ฒ๋ผ ๋ ๋๋งํ ์ ์๊ฒ ํด์ค๋๋ค.
- `Suspense`: ์ง์ฐ ๋ก๋ฉ๋๋ ์ปดํฌ๋ํธ๊ฐ ๋ก๋๋๋ ๋์ ๋ก๋ฉ ํ์๊ธฐ(ํด๋ฐฑ UI)๋ฅผ ์ง์ ํ ์ ์๊ฒ ํด์ค๋๋ค.
์์:
const OtherComponent = React.lazy(() => import('./OtherComponent'));
function MyComponent() {
return (
Loading... }>
์ด๋ ์ฌ์ฉ์๊ฐ ํน์ ์์ ์ ๊ธฐ๋ฅ์ ์ผ๋ถ๋ง ํ์๋ก ํ ์ ์๋ ๋ง์ ๊ธฐ๋ฅ์ ๊ฐ์ง ์ ํ๋ฆฌ์ผ์ด์ ์ ๋งค์ฐ ์ ์ฉํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๊ธ๋ก๋ฒ ํ๋ก์ ํธ ๊ด๋ฆฌ ๋๊ตฌ๋ ์ฌ์ฉ์๊ฐ ํ์ฌ ์ฌ์ฉ ์ค์ธ ํน์ ๋ชจ๋(์: ์์ ๊ด๋ฆฌ, ๋ณด๊ณ , ํ ์ปค๋ฎค๋์ผ์ด์ )๋ง ๋ก๋ํ ์ ์์ต๋๋ค.
4. ๋๊ท๋ชจ ๋ฆฌ์คํธ๋ฅผ ์ํ ๊ฐ์ํ(Virtualization)
์๋ฐฑ ๋๋ ์์ฒ ๊ฐ์ ํญ๋ชฉ์ ๋ฆฌ์คํธ์ ๋ ๋๋งํ๋ ๊ฒ์ ๋ธ๋ผ์ฐ์ ์ ํฐ ๋ถ๋ด์ ์ค ์ ์์ต๋๋ค. ๊ฐ์ํ(์ฐฝ๋ฌธํ(windowing)๋ผ๊ณ ๋ ํจ)๋ ํ์ฌ ๋ทฐํฌํธ์ ๋ณด์ด๋ ํญ๋ชฉ๋ง ๋ ๋๋งํ๋ ๊ธฐ์ ์ ๋๋ค. ์ฌ์ฉ์๊ฐ ์คํฌ๋กคํ๋ฉด ์๋ก์ด ํญ๋ชฉ์ด ๋ ๋๋ง๋๊ณ , ๋ทฐ์์ ๋ฒ์ด๋ ํญ๋ชฉ์ ์ธ๋ง์ดํธ๋ฉ๋๋ค. `react-window` ๋ฐ `react-virtualized`์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ด๋ฅผ ์ํ ๊ฐ๋ ฅํ ์๋ฃจ์ ์ ์ ๊ณตํฉ๋๋ค.
์ด๋ ๊ธ๋ก๋ฒ ๊ธ์ต ์์ฅ ๋ฐ์ดํฐ, ๋ฐฉ๋ํ ์ฌ์ฉ์ ๋๋ ํ ๋ฆฌ ๋๋ ํฌ๊ด์ ์ธ ์ ํ ์นดํ๋ก๊ทธ์ ๊ฐ์ ๊ด๋ฒ์ํ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ํ์ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ๊ธฐ์ ์ธ ๊ธฐ์ ์ ๋๋ค.
๋ ๋๋ง์์ State์ Props ์ดํดํ๊ธฐ
React ์ปดํฌ๋ํธ์ ๋ ๋๋ง์ ๊ทผ๋ณธ์ ์ผ๋ก state์ props์ ์ํด ๊ตฌ๋๋ฉ๋๋ค.
- Props (Properties): Props๋ ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์์ ์ปดํฌ๋ํธ๋ก ์ ๋ฌ๋ฉ๋๋ค. ์์ ์ปดํฌ๋ํธ ๋ด์์๋ ์ฝ๊ธฐ ์ ์ฉ์ด๋ฉฐ, ์์ ์ปดํฌ๋ํธ๋ฅผ ๊ตฌ์ฑํ๊ณ ์ปค์คํฐ๋ง์ด์งํ๋ ๋ฐฉ๋ฒ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค. ๋ถ๋ชจ ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง๋์ด ์๋ก์ด props๋ฅผ ์ ๋ฌํ๋ฉด, ์์ ์ปดํฌ๋ํธ๋ ์ผ๋ฐ์ ์ผ๋ก ์ด๋ฌํ ๋ณ๊ฒฝ ์ฌํญ์ ๋ฐ์ํ๊ธฐ ์ํด ๋ฆฌ๋ ๋๋ง๋ฉ๋๋ค.
- State: State๋ ์ปดํฌ๋ํธ ์์ฒด ๋ด์์ ๊ด๋ฆฌ๋๋ ๋ฐ์ดํฐ์ ๋๋ค. ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๋ณ๊ฒฝ๋ ์ ์๊ณ ์ปดํฌ๋ํธ์ ๋ ๋๋ง์ ์ํฅ์ ๋ฏธ์น๋ ์ ๋ณด๋ฅผ ๋ํ๋ ๋๋ค. ์ปดํฌ๋ํธ์ state๊ฐ ๋ณ๊ฒฝ๋๋ฉด(ํด๋์ค ์ปดํฌ๋ํธ์ `setState` ๋๋ ํจ์ํ ์ปดํฌ๋ํธ์ `useState`์์ ๋ฐํ๋ ์ ๋ฐ์ดํฐ ํจ์๋ฅผ ํตํด), React๋ ํด๋น ์ปดํฌ๋ํธ์ ๊ทธ ์์๋ค์ ๋ฆฌ๋ ๋๋ง์ ์์ฝํฉ๋๋ค(์ต์ ํ ๊ธฐ์ ๋ก ๋ฐฉ์ง๋์ง ์๋ ํ).
๋ค๊ตญ์ ๊ธฐ์ ์ ๋ด๋ถ ๋์๋ณด๋๋ฅผ ์๊ฐํด๋ณด์ธ์. ๋ถ๋ชจ ์ปดํฌ๋ํธ๋ ์ ์ธ๊ณ ๋ชจ๋ ์ง์์ ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค. ์ด ๋ฐ์ดํฐ๋ ํน์ ํ ์ ๋ณด๋ฅผ ํ์ํ๋ ์์ ์ปดํฌ๋ํธ์ props๋ก ์ ๋ฌ๋ ์ ์์ต๋๋ค. ํน์ ํ์ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋๋ฉด, ์ ์ ํ prop ๊ด๋ฆฌ๋ฅผ ๊ฐ์ ํ ๋ ํด๋น ํ์ ์ปดํฌ๋ํธ(์ ๊ทธ ์์๋ค)๋ง ๋ฆฌ๋ ๋๋ง๋ฉ๋๋ค.
์ฌ์กฐ์ ์์ `key`์ ์ญํ
์์ ์ธ๊ธํ๋ฏ์ด, key๋ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์ฌ์กฐ์ ์ค์ React๋ key๋ฅผ ์ฌ์ฉํ์ฌ ์ด์ ํธ๋ฆฌ์ ์์์ ํ์ฌ ํธ๋ฆฌ์ ์์๋ฅผ ์ผ์น์ํต๋๋ค.
React๊ฐ key๊ฐ ์๋ ์์ ๋ชฉ๋ก์ ๋ง์ฃผ์ณค์ ๋:
- ํน์ key๋ฅผ ๊ฐ์ง ์์๊ฐ ์ด์ ํธ๋ฆฌ์ ์กด์ฌํ๊ณ ํ์ฌ ํธ๋ฆฌ์๋ ์ฌ์ ํ ์กด์ฌํ๋ค๋ฉด, React๋ ํด๋น ์์๋ฅผ ์ ์๋ฆฌ์์ ์ ๋ฐ์ดํธํฉ๋๋ค.
- ํน์ key๋ฅผ ๊ฐ์ง ์์๊ฐ ํ์ฌ ํธ๋ฆฌ์๋ ์์ง๋ง ์ด์ ํธ๋ฆฌ์๋ ์๋ค๋ฉด, React๋ ์๋ก์ด ์ปดํฌ๋ํธ ์ธ์คํด์ค๋ฅผ ์์ฑํฉ๋๋ค.
- ํน์ key๋ฅผ ๊ฐ์ง ์์๊ฐ ์ด์ ํธ๋ฆฌ์๋ ์์์ง๋ง ํ์ฌ ํธ๋ฆฌ์๋ ์๋ค๋ฉด, React๋ ์ด์ ์ปดํฌ๋ํธ ์ธ์คํด์ค๋ฅผ ํ๊ดดํ๊ณ ์ ๋ฆฌํฉ๋๋ค.
์ด๋ฌํ ์ ๋ฐํ ๋งค์นญ์ React๊ฐ DOM์ ํจ์จ์ ์ผ๋ก ์ ๋ฐ์ดํธํ๊ณ ํ์ํ ๋ณ๊ฒฝ๋ง ์ํํ๋๋ก ๋ณด์ฅํฉ๋๋ค. ์์ ์ ์ธ key๊ฐ ์์ผ๋ฉด React๋ ๋ถํ์ํ๊ฒ DOM ๋ ธ๋์ ์ปดํฌ๋ํธ ์ธ์คํด์ค๋ฅผ ์ฌ์์ฑํ์ฌ ์ฑ๋ฅ ์ ํ์ ์ ์ฌ์ ์ธ ์ปดํฌ๋ํธ state ์์ค(์: ์ ๋ ฅ ํ๋ ๊ฐ)์ ์ด๋ํ ์ ์์ต๋๋ค.
React๋ ์ธ์ ์ปดํฌ๋ํธ๋ฅผ ๋ค์ ๋ ๋๋งํ ๊น์?
React๋ ๋ค์๊ณผ ๊ฐ์ ์ํฉ์์ ์ปดํฌ๋ํธ๋ฅผ ๋ค์ ๋ ๋๋งํฉ๋๋ค:
- State ๋ณ๊ฒฝ: ์ปดํฌ๋ํธ์ ๋ด๋ถ state๊ฐ `setState()` (ํด๋์ค ์ปดํฌ๋ํธ) ๋๋ `useState()`๊ฐ ๋ฐํํ ์ธํฐ ํจ์(ํจ์ํ ์ปดํฌ๋ํธ)๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋ฐ์ดํธ๋ ๋.
- Prop ๋ณ๊ฒฝ: ๋ถ๋ชจ ์ปดํฌ๋ํธ๊ฐ ์์ ์ปดํฌ๋ํธ์ ์๋กญ๊ฑฐ๋ ์ ๋ฐ์ดํธ๋ props๋ฅผ ์ ๋ฌํ ๋.
- ๊ฐ์ ์ ๋ฐ์ดํธ(Force Update): ๋๋ฌธ ๊ฒฝ์ฐ์ง๋ง, ํด๋์ค ์ปดํฌ๋ํธ์์ `forceUpdate()`๋ฅผ ํธ์ถํ์ฌ ์ผ๋ฐ์ ์ธ ๊ฒ์ฌ๋ฅผ ๊ฑด๋๋ฐ๊ณ ๊ฐ์ ๋ก ๋ฆฌ๋ ๋๋ง์ ์ ๋ฐํ ์ ์์ต๋๋ค. ์ด๋ ์ผ๋ฐ์ ์ผ๋ก ๊ถ์ฅ๋์ง ์์ต๋๋ค.
- Context ๋ณ๊ฒฝ: ์ปดํฌ๋ํธ๊ฐ context๋ฅผ ์ฌ์ฉํ๊ณ ์๊ณ ํด๋น context์ ๊ฐ์ด ๋ณ๊ฒฝ๋ ๋.
- `shouldComponentUpdate` ๋๋ `React.memo`์ ๊ฒฐ์ : ์ด๋ฌํ ์ต์ ํ ๋ฉ์ปค๋์ฆ์ด ์ฌ์ฉ๋ ๊ฒฝ์ฐ, prop ๋๋ state ๋ณ๊ฒฝ์ ๋ฐ๋ผ ๋ฆฌ๋ ๋๋ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ ์ ์์ต๋๋ค.
์ด๋ฌํ ํธ๋ฆฌ๊ฑฐ๋ฅผ ์ดํดํ๋ ๊ฒ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ๊ณผ ๋์์ ๊ด๋ฆฌํ๋ ๋ฐ ํต์ฌ์ ๋๋ค. ์๋ฅผ ๋ค์ด, ๊ธ๋ก๋ฒ ์ด์ปค๋จธ์ค ์ฌ์ดํธ์์ ์ ํ๋ ํตํ๋ฅผ ๋ณ๊ฒฝํ๋ฉด ๊ธ๋ก๋ฒ context๊ฐ ์ ๋ฐ์ดํธ๋์ด ๋ชจ๋ ๊ด๋ จ ์ปดํฌ๋ํธ(์: ๊ฐ๊ฒฉ ํ์, ์ฅ๋ฐ๊ตฌ๋ ์ด์ก)๊ฐ ์ ํตํ๋ก ๋ค์ ๋ ๋๋ง๋ ์ ์์ต๋๋ค.
์ผ๋ฐ์ ์ธ ๋ ๋๋ง ํจ์ ๊ณผ ํด๊ฒฐ ๋ฐฉ๋ฒ
๋ ๋๋ง ๊ณผ์ ์ ์ ์ดํดํ๋๋ผ๋ ๊ฐ๋ฐ์๋ ์ผ๋ฐ์ ์ธ ํจ์ ์ ๋น ์ง ์ ์์ต๋๋ค:
- ๋ฌดํ ๋ฃจํ: `componentDidUpdate` ๋๋ `useEffect` ๋ด์์ ์ ์ ํ ์กฐ๊ฑด ์์ด state๋ props๋ฅผ ์ ๋ฐ์ดํธํ์ฌ ์ง์์ ์ธ ๋ฆฌ๋ ๋๋ง ์ฌ์ดํด์ด ๋ฐ์ํ๋ ๊ฒฝ์ฐ์ ๋๋ค. ํญ์ ์์กด์ฑ ๊ฒ์ฌ๋ ์กฐ๊ฑด๋ถ ๋ก์ง์ ํฌํจํด์ผ ํฉ๋๋ค.
- ๋ถํ์ํ ๋ฆฌ๋ ๋๋ง: props๋ state๊ฐ ์ค์ ๋ก ๋ณ๊ฒฝ๋์ง ์์๋๋ฐ๋ ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง๋๋ ๊ฒฝ์ฐ์ ๋๋ค. ์ด๋ `React.memo`, `useMemo`, `useCallback`์ ์ฌ์ฉํ์ฌ ํด๊ฒฐํ ์ ์์ต๋๋ค.
- ๋ถ์ ํํ Key ์ฌ์ฉ: ์์๊ฐ ๋ฐ๋๊ฑฐ๋ ํํฐ๋ง๋ ์ ์๋ ๋ฆฌ์คํธ์ ๋ฐฐ์ด ์ธ๋ฑ์ค๋ฅผ key๋ก ์ฌ์ฉํ์ฌ ๋ถ์ ํํ UI ์ ๋ฐ์ดํธ์ state ๊ด๋ฆฌ ๋ฌธ์ ๋ฅผ ์ด๋ํ๋ ๊ฒฝ์ฐ์ ๋๋ค.
- `forceUpdate()`์ ๋จ์ฉ: `forceUpdate()`์ ์์กดํ๋ ๊ฒ์ ์ข ์ข state ๊ด๋ฆฌ์ ๋ํ ์คํด๋ฅผ ๋ํ๋ด๋ฉฐ ์์ธกํ ์ ์๋ ๋์์ผ๋ก ์ด์ด์ง ์ ์์ต๋๋ค.
- ์ ๋ฆฌ ์์ ๋ฌด์: `componentWillUnmount` ๋๋ `useEffect`์ ์ ๋ฆฌ ํจ์์์ ๋ฆฌ์์ค(ํ์ด๋จธ, ๊ตฌ๋ , ์ด๋ฒคํธ ๋ฆฌ์ค๋)๋ฅผ ์ ๋ฆฌํ๋ ๊ฒ์ ์์ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋์๋ก ์ด์ด์ง ์ ์์ต๋๋ค.
๊ฒฐ๋ก
React ์ปดํฌ๋ํธ ๋ ๋๋ง์ ๊ฐ๋ฐ์๊ฐ ๋์ ์ด๊ณ ์ฑ๋ฅ์ด ๋ฐ์ด๋ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌ์ถํ ์ ์๋๋ก ์ง์ํ๋ ์ ๊ตํ๋ฉด์๋ ์ฐ์ํ ์์คํ ์ ๋๋ค. ๊ฐ์ DOM, ์ฌ์กฐ์ ๊ณผ์ , ์ปดํฌ๋ํธ ์๋ช ์ฃผ๊ธฐ, ๊ทธ๋ฆฌ๊ณ ์ต์ ํ ๋ฉ์ปค๋์ฆ์ ์ดํดํจ์ผ๋ก์จ ์ ์ธ๊ณ ๊ฐ๋ฐ์๋ค์ ๊ฒฌ๊ณ ํ๊ณ ํจ์จ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ์ ์์ต๋๋ค. ์ง์ญ ์ปค๋ฎค๋ํฐ๋ฅผ ์ํ ์์ ์ ํธ๋ฆฌํฐ๋ฅผ ๋ง๋ค๋ , ์ ์ธ๊ณ ์๋ฐฑ๋ง ๋ช ์๊ฒ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ๋๊ท๋ชจ ํ๋ซํผ์ ๊ตฌ์ถํ๋ , React ๋ ๋๋ง์ ๋ง์คํฐํ๋ ๊ฒ์ ์ ๋ฅํ ํ๋ก ํธ์๋ ์์ง๋์ด๊ฐ ๋๊ธฐ ์ํ ํ์์ ์ธ ๋จ๊ณ์ ๋๋ค.
React์ ์ ์ธ์ ์ธ ํน์ฑ์ ๋ฐ์๋ค์ด๊ณ , ํ ๊ณผ ์ต์ ํ ๊ธฐ์ ์ ํ์ ํ์ฉํ๋ฉฐ, ํญ์ ์ฑ๋ฅ์ ์ต์ฐ์ ์ผ๋ก ์๊ฐํ์ธ์. ๋์งํธ ํ๊ฒฝ์ด ๊ณ์ ์งํํจ์ ๋ฐ๋ผ, ์ด๋ฌํ ํต์ฌ ๊ฐ๋ ์ ๋ํ ๊น์ ์ดํด๋ ํ์ํ ์ฌ์ฉ์ ๊ฒฝํ์ ๋ง๋ค๊ณ ์ ํ๋ ๋ชจ๋ ๊ฐ๋ฐ์์๊ฒ ๊ท์คํ ์์ฐ์ผ๋ก ๋จ์ ๊ฒ์ ๋๋ค.