React์์์ ๋ ๋๋ง ๊ณผ์ ์ ํฌ๊ฒ ์ธ ๋จ๊ณ๋ก ๋๋ ์ ์์:
- ๋ ๋ ๋จ๊ณ (Render Phase): ์ปดํฌ๋ํธ ํธ๋ฆฌ๋ฅผ ํ์ํ๊ณ , ์๋ก์ด UI๋ฅผ ์์ฑํ๊ธฐ ์ํ ๊ฐ์ DOM์ ๋ง๋๋ ๋จ๊ณ
- ์กฐ์ (Reconciliation Phase): ์ด์ ์ ๊ฐ์ DOM๊ณผ ์๋ก์ด ๊ฐ์ DOM์ ๋น๊ตํ์ฌ ๋ณ๊ฒฝ ์ฌํญ์ ์ฐพ์๋ด๋ ๋จ๊ณ
- ์ปค๋ฐ ๋จ๊ณ (Commit Phase): ๋ณ๊ฒฝ ์ฌํญ์ ์ค์ DOM์ ๋ฐ์ํ๋ ๋จ๊ณ
์ด ๋ชจ๋ ๊ณผ์ ์ Fiber ์ํคํ ์ฒ๋ฅผ ํตํด ๊ด๋ฆฌ๋๋ฉฐ, Fiber๋ React๊ฐ ๋น๋๊ธฐ์ ์ด๊ณ ํจ์จ์ ์ธ ๋ ๋๋ง์ ๊ตฌํํ๊ธฐ ์ํ ํต์ฌ ๋ฉ์ปค๋์ฆ์
- ๋ ๋ ๋จ๊ณ: ์ด ๋จ๊ณ์์๋ ์ปดํฌ๋ํธ๊ฐ ์ ๋ฐ์ดํธ๋๊ฑฐ๋ ์๋ก์ด ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง๋ ๋, React๋ ํด๋น ์ปดํฌ๋ํธ์ ์๋ก์ด ๊ฐ์ DOM ํธ๋ฆฌ๋ฅผ ์์ฑํจ. ์ด ํธ๋ฆฌ๋ ์ค์ DOM์ ๋ฐ์๋๊ธฐ ์ ์ ์ด์์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋จ.
- Commit ๋จ๊ณ: ์๋ก์ด ๊ฐ์ DOM ํธ๋ฆฌ๊ฐ ์์ฑ๋ ํ, ๊ทธ ๋ณํ๊ฐ ์ค์ DOM์ ์ ์ฉ๋๋ ๋จ๊ณ์. ์ด๋ React๋ ์ค์ ๋ก DOM์ ์ ๋ฐ์ดํธํ๊ณ ํ๋ฉด์ ๋ณํ๋ฅผ ์ ์ฉํจ.
class MyComponent extends React.Component {
constructor(props) {
super(props);
this.state = { count: 0 };
}
componentDidMount() {
// ๋ง์ดํธ ํ ํธ์ถ
}
render() {
return <div>{this.state.count}</div>;
}
}
- ํด๋์ค ์ธ์คํด์ค ์์ฑ: ํด๋์คํ ์ปดํฌ๋ํธ๋ ํด๋์ค์ ์ธ์คํด์ค๊ฐ ์์ฑ๋๋ฉฐ, ๊ฐ ์ธ์คํด์ค๋
state
์props
๋ฅผ ํฌํจํ๋ ๊ณ ์ ์ ๊ฐ์ฒด๋ฅผ ๊ฐ์ง. - ์๋ช
์ฃผ๊ธฐ ๋ฉ์๋: ํด๋์คํ ์ปดํฌ๋ํธ๋
componentDidMount
,componentDidUpdate
,componentWillUnmount
๋ฑ ์๋ช ์ฃผ๊ธฐ ๋ฉ์๋๋ฅผ ํตํด ์ปดํฌ๋ํธ์ ์ํ์ DOM์ด ์ด๋ป๊ฒ ์ ๋ฐ์ดํธ๋๋์ง๋ฅผ ์ ์ดํ ์ ์์. - this: ํด๋์คํ ์ปดํฌ๋ํธ์์๋
this
๊ฐ ์ธ์คํด์ค๋ฅผ ์ฐธ์กฐํ๋ฏ๋ก,this.state
๋this.props
๋ฅผ ์ฌ์ฉํ์ฌ ์ํ์ props๋ฅผ ๋ค๋ฃธ.
- State ๊ด๋ฆฌ:
this.state
๋ก ์ํ๋ฅผ ๊ด๋ฆฌํ๊ณ ,setState
๋ก ์ํ๋ฅผ ์ ๋ฐ์ดํธํจ. - ์๋ช ์ฃผ๊ธฐ ๋ฉ์๋: ์ปดํฌ๋ํธ์ ๊ฐ ๋จ๊ณ(๋ง์ดํธ, ์ ๋ฐ์ดํธ, ์ธ๋ง์ดํธ)์์ ํน์ ๋์์ ์ ์ํ ์ ์์.
- ํด๋์ค ์ธ์คํด์ค์ ๋ฉ๋ชจ๋ฆฌ ๋น์ฉ์ด ๋ ํผ.
- ์ธ์คํด์ค ๊ฐ์ฒด ์์ฑ์ผ๋ก ์ธํ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ์ฆ๊ฐ: ๊ฐ ์ปดํฌ๋ํธ๋ง๋ค ์ธ์คํด์ค๊ฐ ์์ฑ๋์ด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐจ์งํจ.
- ๋ฉ์๋ ๋ฐ์ธ๋ฉ์ผ๋ก ์ธํ ์ค๋ณต ๋ฉ์๋ ์์ฑ: ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ๋ฉ์๋๋ฅผ ๋ฐ์ธ๋ฉํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ด ๋์ด๋จ.
- ํ๋กํ ํ์ ์ฒด์ธ๊ณผ ์์ ๊ตฌ์กฐ๋ก ์ธํ ์ค๋ฒํค๋: ์์๊ณผ ํ๋กํ ํ์ ์ฒด์ธ์ผ๋ก ์ธํด ์ถ๊ฐ์ ์ธ ๋ฉ๋ชจ๋ฆฌ์ ์๊ฐ์ด ์์๋จ.
- this ์ปจํ
์คํธ ๊ด๋ฆฌ๋ก ์ธํ ์ถ๊ฐ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ:
this
๋ฅผ ์ ์งํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ํ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ด ๋ฐ์ํจ.
function MyComponent() {
const [count, setCount] = useState(0);
useEffect(() => {
// ๋ง์ดํธ ํ ๋์
}, []);
return <div>{count}</div>;
}
- jsx๋ ํธ๋์คํ์ผ๋ฌ๋ฅผ ํตํด ์ผ๋ฐ์ ์ธ javascript ์ฝ๋๋ก ๋ณํ
// JSX ์ฝ๋
const element = <h1>Hello, world!</h1>;
// ๋ณํ๋ JavaScript ์ฝ๋
const element = React.createElement("h1", null, "Hello, world!");
- createElement ํจ์๋ฅผ ํตํด React ์๋ฆฌ๋จผํธ๋ฅผ ์์ฑํ๋ ํจ์ ํธ์ถ๋ก ๋ณํ
- ํจ์ํ ์ปดํฌ๋ํธ๋ฅผ ํตํด ์์ฑ๋ React ์๋ฆฌ๋จผํธ๋ค์ ํธ๋ฆฌ ๊ตฌ์กฐ๋ก ๊ฒฐํฉ๋์ด ๊ฐ์ DOM์ ํ์ฑ
- ๋์ overview
- JSX ์์ฑ: ๊ฐ๋ฐ์๋ ํจ์ํ ์ปดํฌ๋ํธ ๋ด์์ JSX๋ฅผ ๋ฐํ
- ํธ๋์คํ์ผ: ๋น๋ ๋๊ตฌ๋ฅผ ํตํด JSX๊ฐ React.createElement ํธ์ถ๋ก ๋ณํ
- React ์๋ฆฌ๋จผํธ ์์ฑ: React.createElement ํจ์ ํธ์ถ์ ํตํด React ์๋ฆฌ๋จผํธ ๊ฐ์ฒด๊ฐ ์์ฑ
- ๊ฐ์ DOM ํธ๋ฆฌ ๊ตฌ์ฑ: ์ด๋ฌํ React ์๋ฆฌ๋จผํธ๋ค์ด ๋ชจ์ฌ ๊ฐ์ DOM ํธ๋ฆฌ๋ฅผ ํ์ฑ
- ๋ ๋๋ง ๋ฐ ์กฐ์ : React๋ ๊ฐ์ DOM ํธ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ณ๊ฒฝ ์ฌํญ์ ํ์ ํ๊ณ , ์ค์ DOM ์ ๋ฐ์ดํธ๊ฐ ํ์ํ ๋ถ๋ถ์ ๊ฒฐ์
- ์ค์ DOM ์ ๋ฐ์ดํธ(Commit ๋จ๊ณ): ํ์ํ ๊ฒฝ์ฐ ์ค์ DOM์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ฐ์ํ์ฌ ํ๋ฉด์ ์ ๋ฐ์ดํธ
- ๊ฐ๋จํ ํจ์ ํธ์ถ: ํจ์ํ ์ปดํฌ๋ํธ๋ ๋จ์ํ ํจ์๋ฅผ ํธ์ถํ๋ ๋ฐฉ์์ผ๋ก ๋์ํจ. ์ํ๋ React Hook(์:
useState
,useEffect
)์ ์ฌ์ฉํ์ฌ ๊ด๋ฆฌ๋จ. - ์๋ช
์ฃผ๊ธฐ ๊ด๋ฆฌ: ํด๋์คํ ์ปดํฌ๋ํธ์ ์๋ช
์ฃผ๊ธฐ ๋ฉ์๋์ ๋ฌ๋ฆฌ, ํจ์ํ ์ปดํฌ๋ํธ๋ Hooks๋ฅผ ์ฌ์ฉํ์ฌ ์๋ช
์ฃผ๊ธฐ ๋์์ ๋์ฒดํจ.
useEffect
๋componentDidMount
,componentDidUpdate
,componentWillUnmount
๋ฅผ ํตํฉํ ํํ๋ก ์ฌ์ฉ๋จ.
- Hooks:
useState
,useEffect
๊ฐ์ Hook์ ํตํด ์ํ ๋ฐ ์๋ช ์ฃผ๊ธฐ ๊ด๋ จ ๋ก์ง์ ์ฒ๋ฆฌํจ. - ๊ฐ๊ฒฐ์ฑ: ํจ์ํ ์ปดํฌ๋ํธ๋ ์ฝ๋๊ฐ ๋ ๊ฐ๊ฒฐํ๊ณ ๊ตฌ์กฐ๊ฐ ๋ช ํํจ.
- ๋ฉ๋ชจ๋ฆฌ ๋น์ฉ์ด ์๋์ ์ผ๋ก ์ ์(ํด๋์ค ์ธ์คํด์ค๋ฅผ ์์ฑํ์ง ์์).
- React 16์์ ๋์ ๋ Fiber๋ React์ ์ฝ์ด ์ฌ๊ตฌ์ฑ์ ํตํด ๋ ๋๋ง ์์ ์ ๋ ์ธ๋ฐํ๊ฒ ์ ์ดํ๊ณ , ๋น๋๊ธฐ์ ์ ๋ฐ์ดํธ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ์ฌ ๋ณด๋ค ํจ์จ์ ์ธ ๋ ๋๋ง์ ์ ๊ณตํ๊ธฐ ์ํด ๋ง๋ค์ด์ก์.
- Fiber์ ํต์ฌ ๋ชฉํ๋ ์๊ฐ ๋ถํ ๋ ๋๋ง(time slicing)์ด๋ผ๊ณ ๋ถ๋ฆฌ๋ ๋ฐฉ์์ผ๋ก, ํฐ ๋ ๋๋ง ์์ ์ ์์ ์์ ๋จ์๋ก ๋๋์ด ๋ธ๋ผ์ฐ์ ์ ์ด๋ฒคํธ ์ฒ๋ฆฌ ๋ฐ ์ ๋๋ฉ์ด์ ์ฑ๋ฅ์ ์ ํ์ํค์ง ์๋๋ก ํ๋ ๊ฒ์.
- Fiber๋ ๊ฐ๋ฒผ์ด ์์ ๋จ์๋ก, ๊ฐ ์์ ์ ์๋ฃํ๊ธฐ ์ ์ ๋ธ๋ผ์ฐ์ ๊ฐ ํด์ผ ํ ์ค์ํ ์์ (์: ์ฌ์ฉ์ ์ ๋ ฅ, ์ ๋๋ฉ์ด์ )์ ์ฒ๋ฆฌํ ์ ์๋๋ก ์์ ์ ์ผ์ ์ค๋จํ๋ค๊ฐ ๋ค์ ์ฌ๊ฐํ ์ ์์.
- React๋ ์ด Fiber๋ฅผ ์ฌ์ฉํด ๋ ๋๋ง ์ฐ์ ์์๋ฅผ ์ ํ๊ณ , ์ฐ์ ์์๊ฐ ๋์ ์์ ์ ๋จผ์ ์ฒ๋ฆฌํ ์ ์๊ฒ ํจ.
1. Fiber ๋ ธ๋ ๊ตฌ์กฐ
- Fiber ๋ ธ๋๋ ์ปดํฌ๋ํธ์ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด์.
- ๊ฐ Fiber ๋
ธ๋๋ ๋ค์๊ณผ ๊ฐ์ ์ ๋ณด๋ฅผ ๊ฐ์ง:
- ํ์ (type): ์ด๋ค ์ปดํฌ๋ํธ์ธ์ง ๋ํ๋ (ํจ์ํ, ํด๋์คํ, DOM ๋ ธ๋ ๋ฑ).
- ํค(key): ๋ฆฌ์คํธ์์ ์์๋ฅผ ๊ณ ์ ํ๊ฒ ์๋ณํ๊ธฐ ์ํ ๊ฐ.
- ์ํ์ props: ํด๋น ์ปดํฌ๋ํธ์ ์ํ์ ์์ฑ ์ ๋ณด.
- ์์, ํ์ , ๋ถ๋ชจ ๋ ธ๋์ ๋ํ ์ฐธ์กฐ: ํธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๊ตฌ์ฑํ๊ธฐ ์ํด ๋ค๋ฅธ ๋ ธ๋๋ค๊ณผ ์ฐ๊ฒฐ๋จ.
2. ๋งํฌ๋ ๋ฆฌ์คํธ ํํ์ ํธ๋ฆฌ ๊ตฌ์ฑ
- Fiber ๋ ธ๋๋ค์ ๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ ํํ๋ก ํธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํจ.
- child, sibling, return(๋ถ๋ชจ) ํฌ์ธํฐ๋ฅผ ํตํด ๋ ธ๋๋ค์ด ์ฐ๊ฒฐ๋์ด ์์.
- ์ด๋ฌํ ๊ตฌ์กฐ๋ฅผ ํตํด React๋ ํธ๋ฆฌ๋ฅผ ์ํํ๋ฉด์ ํ์ํ ์์ ์ ์ํํจ.
3. ์์ ์ ๋ถํ ๊ณผ ์ค์ผ์ค๋ง
- Fiber ์ํคํ ์ฒ๋ ์์ ์ ์์ ๋จ์๋ก ๋ถํ ํ์ฌ ์ค์ผ์ค๋ฌ๊ฐ ๊ด๋ฆฌํ ์ ์๊ฒ ํจ.
- ๊ฐ ์์ ๋จ์๋ ์ฐ์ ์์๋ฅผ ๊ฐ์ง๋ฉฐ, React๋ ์ด ์ฐ์ ์์์ ๋ฐ๋ผ ์์ ์ ์ํํจ.
- ์ค์ผ์ค๋ฌ๋ ๋ธ๋ผ์ฐ์ ์ ๋น ์๊ฐ์ ๋ง์ถฐ ์์ ์ ์ํํ๊ณ , ๊ธด ์์ ์ผ๋ก ์ธํด UI๊ฐ ๋ฉ์ถ๋ ๊ฒ์ ๋ฐฉ์งํจ.
- ๋์ ์ฐ์ ์์์ ์์ ์ ์ฆ์ ์ฒ๋ฆฌํ๊ณ , ๋ฎ์ ์ฐ์ ์์์ ์์ ์ ๋ธ๋ผ์ฐ์ ๊ฐ ํ๊ฐํ ๋ ์ฒ๋ฆฌ
- React์ ์ค์ผ์ค๋ฌ๋ ๋ธ๋ผ์ฐ์ ์ ํ๋ ฅํ์ฌ ์์ ์ ๊ด๋ฆฌ, ์ด๋ ์์ ์ด ๋ธ๋ผ์ฐ์ ์ ์ด๋ฒคํธ ๋ฃจํ์ ์กฐํ๋กญ๊ฒ ๋์ํ๋๋ก ๋์์ค
- ์์ ์๋ณด(Yielding): ์์ ์ ์ํํ๋ค๊ฐ ์ผ์ ์๊ฐ์ด ์ง๋๋ฉด, React๋ ์์ ์ ์ค๋จํ๊ณ ๋ธ๋ผ์ฐ์ ์๊ฒ ์ ์ด๊ถ์ ๋๊น. ์ด๋ฅผ ํตํด ๋ธ๋ผ์ฐ์ ๋ ์ฌ์ฉ์ ์ ๋ ฅ ์ฒ๋ฆฌ๋ ๋ ๋๋ง ๋ฑ์ ์ค์ํ ์์ ์ ์ํํ ์ ์์
- ๋ธ๋ผ์ฐ์ ์ ๋น ์๊ฐ ํ์ฉ: Idle Callback ์ฌ์ฉ - ๋ธ๋ผ์ฐ์ ๊ฐ ์ ํด ์ํ์ผ ๋ ์คํ๋๋ requestIdleCallback API๋ฅผ ํ์ฉํ์ฌ ๋ฎ์ ์ฐ์ ์์์ ์์ ์ ์ํ. ํ์ง๋ง ์ด API๋ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ์์ ์ง์๋์ง ์์ผ๋ฏ๋ก, React๋ ํ์ด๋จธ์ ๋ฉ์์ง ์ฑ๋ ๋ฑ์ ์ฌ์ฉํ์ฌ ์ ์ฌํ ๊ธฐ๋ฅ์ ๊ตฌํ
- ํ์ ์ฌ๋ผ์ด์ค(Time Slice): ๊ฐ ์์ ์ ์ผ์ ์๊ฐ(์: 5ms) ๋ด์์๋ง ์คํ๋๊ณ , ์๊ฐ์ด ์ด๊ณผ๋๋ฉด ์์ ์ ์ค๋จํ๊ณ ๋ค์ ํ๋ ์์์ ์ด์ด์ ์คํ.
- ๊ธด ์์ ์ผ๋ก ์ธํ UI ๋ฉ์ถค ๋ฐฉ์ง: ๋ฉ์ธ ์ค๋ ๋ ๋ธ๋กํน ๋ฐฉ์ง: ๊ธด JavaScript ์คํ์ผ๋ก ์ธํด ๋ฉ์ธ ์ค๋ ๋๊ฐ ์ฐจ๋จ๋๋ฉด, ์ฌ์ฉ์ ์ธํฐํ์ด์ค๊ฐ ์๋ตํ์ง ์๊ฒ ๋๋ค. Fiber ์ํคํ ์ฒ๋ ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ์์ ์ ๋ถํ ํ๊ณ ์ค์ผ์ค๋งํ์ฌ ๋ฉ์ธ ์ค๋ ๋์ ๋ถ๋ด์ ์ค์
4. Stack ๊ธฐ๋ฐ ์ฌ๊ท์์ ๋ฐ๋ณต๋ฌธ์ผ๋ก ์ ํ
- ๊ธฐ์กด React๋ ์ฌ๊ท์ ์ผ๋ก ์ปดํฌ๋ํธ ํธ๋ฆฌ๋ฅผ ํ์ํ์ง๋ง, Fiber๋ ์ด๋ฅผ ๋ฐ๋ณต๋ฌธ์ผ๋ก ์ ํํจ.
- ์ด๋ฅผ ํตํด ํธ์ถ ์คํ์ ์ ํ ์์ด ํฐ ๊ท๋ชจ์ ํธ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ํ์ํ ์ ์์.
5. ์์ ์ค๋จ๊ณผ ์ฌ๊ฐ
- Fiber๋ ์์ ์ค๊ฐ์ ์ค๋จํ๊ณ ๋์ค์ ์ฌ๊ฐํ ์ ์์.
- ์ด๋ฅผ ํตํด React๋ ๊ธด ๋ ๋๋ง ์์ ์ ์ํํ๋ฉด์๋ ์ฌ์ฉ์ ์ธํฐ๋์ ์ ๋น ๋ฅด๊ฒ ๋ฐ์ํ ์ ์์.
- ํ์ฌ ํธ๋ฆฌ(Current Tree): ํ์ฌ ํ๋ฉด์ ๋ ๋๋ง๋ ํธ๋ฆฌ์.
- ์์
์ค ํธ๋ฆฌ(Work-in-progress Tree): ์๋ก์ด ๋ ๋๋ง ์์
์ด ์ํ๋๋ ํธ๋ฆฌ์.
- ๋ ๋๋ง ๋จ๊ณ์์ React๋ ์ด ์์ ์ค ํธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๋ฉด์ ์๋กญ๊ฒ ์ ๋ฐ์ดํธ๋ ์ปดํฌ๋ํธ๋ค์ ์ฒ๋ฆฌํจ.
- ์ด ๊ณผ์ ์์ ๊ฐ ์ปดํฌ๋ํธ๋ Fiber ๋ ธ๋๋ก ๋ณํ๋๊ณ , ํ์ํ ์์ ์ด ์์ ๋จ์๋ก ๋๋์ด ์ฒ๋ฆฌ๋จ.
- ๋ ๋๋ง์ด ์๋ฃ๋๋ฉด ์์ ์ค ํธ๋ฆฌ๋ ํ์ฌ ํธ๋ฆฌ๋ก ๋์ฒด๋์ด ์ปค๋ฐ ๋จ๊ณ๋ก ๋์ด๊ฐ.
- ์ฐ์ ์์ ์ฒ๋ฆฌ: Fiber๋ ๊ฐ ์์ ์ ์ฐ์ ์์๋ฅผ ๋ถ์ฌํ์ฌ ๊ธด ๋ ๋๋ง ์์ ์ด ์ฌ์ฉ์ ๊ฒฝํ์ ํด์น์ง ์๋๋ก ํจ. ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์์ ์ ๋ ฅ์ด๋ ์ ๋๋ฉ์ด์ ๊ฐ์ ๊ณ ์ฐ์ ์์ ์์ ์ ์ฆ์ ์ฒ๋ฆฌ๋๊ณ , ๋๋จธ์ง ๋ ๋๋ง ์์ ์ ๋์ค์ ์ฒ๋ฆฌ๋จ.
- Interruptible Rendering: Fiber ์ํคํ ์ฒ ๋๋ถ์ React๋ ๋ ๋๋ง ์์ ์ ์ค๋จํ๊ณ ํ์ํ ๊ฒฝ์ฐ ๋์ค์ ์ฌ๊ฐํ ์ ์์. ์ด๋ ๋ธ๋ผ์ฐ์ ์ ๋ฉ์ธ ์ค๋ ๋์์ ๊ธด ์์ ์ผ๋ก ์ธํด UI๊ฐ ์๋ตํ์ง ์๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํจ.
- ํ๋ ฅ์ ์ค์ผ์ค๋ง: React๋ ์์ ์ ์์ ๋จ์๋ก ๋๋์ด ์คํํ๊ณ , ๊ฐ ๋จ์ ์์ ์ด ๋๋ ๋๋ง๋ค ๋ธ๋ผ์ฐ์ ์๊ฒ ์ ์ด๊ถ์ ๋๊ฒจ์ค. ์ด๋ฅผ ํตํด ์ค์ํ ๋ธ๋ผ์ฐ์ ์์ (์: ์ฌ์ฉ์ ์ด๋ฒคํธ ์ฒ๋ฆฌ)์ด ์ง์ฐ๋์ง ์๋๋ก ํจ.
React๋ Reconciliation์ ํตํด, ๊ธฐ์กด์ ๊ฐ์ DOM๊ณผ ์๋ก์ด ๊ฐ์ DOM์ ๋น๊ตํ๊ณ ์ต์ํ์ ์ ๋ฐ์ดํธ๋ง ์ค์ DOM์ ์ ์ฉํจ. ์ด ๊ณผ์ ์ ํตํด ๋ถํ์ํ DOM ์ ๋ฐ์ดํธ๋ฅผ ์ค์ด๊ณ ์ฑ๋ฅ์ ํฅ์์ํด.
- ๋ณ๊ฒฝ ์ฌํญ ๊ฐ์ง: ์๋ก์ด ์ํ๋ props๊ฐ ์ ๋ฌ๋๋ฉด, React๋ ๊ธฐ์กด ๊ฐ์ DOM๊ณผ ์๋ก์ด ๊ฐ์ DOM์ ๋น๊ตํจ.
- Diffing ์๊ณ ๋ฆฌ์ฆ: React๋ ๋ณ๊ฒฝ ์ฌํญ์ ๋น ๋ฅด๊ฒ ์ฐพ์๋ด๊ธฐ ์ํด Diffing ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํจ. ์ด ์๊ณ ๋ฆฌ์ฆ์ ๋ค์ ์์น์ ๋ฐ๋ผ ๋์ํจ:
- ๊ฐ์ ํ์ ์ ์์๋ ๋ณ๊ฒฝ ์ฌํญ๋ง ์ ๋ฐ์ดํธํจ.
- ๋ค๋ฅธ ํ์ ์ ์์๋ ๊ธฐ์กด ์์๋ฅผ ์ ๊ฑฐํ๊ณ ์๋ก ๋ ๋๋งํจ.
- Key๋ฅผ ์ฌ์ฉํ์ฌ ๋ฆฌ์คํธ ํญ๋ชฉ์ ์์๋ฅผ ์ถ์ ํจ.
- ํจ์จ์ฑ: Reconciliation ๊ณผ์ ์์ React๋ ๊ฐ๋ฅํ ํ ์ต์ํ์ ์กฐ์์ผ๋ก ์ค์ DOM์ ์ ๋ฐ์ดํธํ๋ ค๊ณ ํจ. ์ด๋ DOM ์กฐ์์ด ๋น์ฉ์ด ๋ง์ด ๋ค๊ธฐ ๋๋ฌธ์.
- Key์ ์ค์์ฑ: ๋ฆฌ์คํธ๋ฅผ ๋ ๋๋งํ ๋
key
์์ฑ์ ์ ๊ณตํ๋ฉด React๊ฐ ๊ฐ ํญ๋ชฉ์ ๊ณ ์ ํ๊ฒ ์๋ณํ์ฌ ๋ณ๊ฒฝ ์ฌํญ์ ๋ ์ ํํ๊ฒ ์ถ์ ํ ์ ์์.
Commit ๋จ๊ณ์์๋ Reconciliation์ ํตํด ์ฐพ์๋ธ ๋ณ๊ฒฝ ์ฌํญ์ ์ค์ DOM์ ์ ์ฉํจ. ์ด ๋จ๊ณ์์๋ ์ธ ๊ฐ์ง ์์ ์ด ์ด๋ฃจ์ด์ง:
- DOM ์ ๋ฐ์ดํธ: ๋ณ๊ฒฝ๋ ๋ ธ๋๋ฅผ ์ค์ DOM์ ๋ฐ์ํจ.
- ref ์ฝ๋ฐฑ ํธ์ถ:
ref
์ฝ๋ฐฑ์ ํตํด ์ฐธ์กฐ๋ DOM ๋ ธ๋๋ฅผ ์ ๋ฐ์ดํธํจ. - ์๋ช
์ฃผ๊ธฐ ๋ฉ์๋ ํธ์ถ:
componentDidMount
,componentDidUpdate
๊ฐ์ ์๋ช ์ฃผ๊ธฐ ๋ฉ์๋๋ฅผ ํธ์ถํจ.
- ๋๊ธฐ ์คํ: Commit ๋จ๊ณ๋ ๋ ๋ ๋จ๊ณ์ ๋ฌ๋ฆฌ ๋๊ธฐ์ ์ผ๋ก ์คํ๋จ. ์ด๋ DOM ์ ๋ฐ์ดํธ๊ฐ ์ฌ์ฉ์์๊ฒ ์ฆ๊ฐ์ ์ผ๋ก ๋ฐ์๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์.
- ์ค๋ฅ ์ฒ๋ฆฌ: ์ด ๋จ๊ณ์์ ๋ฐ์ํ๋ ์ค๋ฅ๋ React์ ์ค๋ฅ ๊ฒฝ๊ณ(Error Boundary)์ ์ํด ์ฒ๋ฆฌ๋ ์ ์์.
- ์ต์์์์๋ง ํธ์ถ: Hooks๋ ์ปดํฌ๋ํธ์ ์ต์์ ์์ค์์๋ง ํธ์ถํด์ผ ํจ. ๋ฃจํ๋ ์กฐ๊ฑด๋ฌธ, ์ค์ฒฉ๋ ํจ์ ๋ด์์ ํธ์ถํ๋ฉด ์ ๋จ.
- React ํจ์ ๋ด์์๋ง ํธ์ถ: Hooks๋ React ํจ์ ์ปดํฌ๋ํธ๋ ์ปค์คํ Hook ๋ด์์๋ง ํธ์ถํด์ผ ํจ.
- ์ฌ์ฌ์ฉ์ฑ: ์ปค์คํ Hook์ ๋ง๋ค์ด ๋ก์ง์ ์ฌ์ฌ์ฉํ ์ ์์.
- ๋ช
๋ช
๊ท์น: ์ปค์คํ
Hook์ ์ด๋ฆ์
use
๋ก ์์ํด์ผ ํจ.
useMemo
์useCallback
: ํจ์๋ ๊ฐ์ ๋ฉ๋ชจ์ด์ ์ด์ ํ์ฌ ๋ถํ์ํ ์ฌ๋ ๋๋ง์ ๋ฐฉ์งํ ์ ์์.React.memo
: ์ปดํฌ๋ํธ๋ฅผ ๋ฉ๋ชจ์ด์ ์ด์ ํ์ฌ props๊ฐ ๋ณ๊ฒฝ๋์ง ์์ผ๋ฉด ์ฌ๋ ๋๋ง์ ๋ฐฉ์งํจ.- ์ฃผ์์ : ๋ฉ๋ชจ์ด์ ์ด์ ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฏ๋ก, ๋ถํ์ํ ๊ฒฝ์ฐ ์ฌ์ฉ์ ํผํ๋ ๊ฒ์ด ์ข์.
- ๋ถํ์ํ ์
๋ฐ์ดํธ ๋ฐฉ์ง:
React.PureComponent
๋ฅผ ์์ํ๋ฉดshouldComponentUpdate
๋ฅผ ๊ตฌํํ์ง ์์๋, ์์ ๋น๊ต๋ฅผ ํตํด ๋ถํ์ํ ์ ๋ฐ์ดํธ๋ฅผ ๋ฐฉ์งํจ.
- ์ค๋ฅ ์ฒ๋ฆฌ: ํด๋์คํ ์ปดํฌ๋ํธ์์๋ง ์๋ฌ ๊ฒฝ๊ณ๋ฅผ ๊ตฌํํ ์ ์์.
componentDidCatch
์getDerivedStateFromError
๋ฅผ ์ฌ์ฉํ์ฌ ํ์ ์ปดํฌ๋ํธ์์ ๋ฐ์ํ๋ ์ค๋ฅ๋ฅผ ์ก์ ์ ์์.
- ์ํ ์ ๋ฐ์ดํธ: ์ํ๋ฅผ ์ ๋ฐ์ดํธํ ๋ ๋ถ๋ณ์ฑ์ ์ ์งํ์ฌ React๊ฐ ๋ณ๊ฒฝ ์ฌํญ์ ์ ํํ ๊ฐ์งํ ์ ์๋๋ก ํด์ผ ํจ.
- Immutable ๋ฐ์ดํฐ ๊ตฌ์กฐ: Immutable.js ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ถ๋ณ์ฑ์ ์ ์งํ๋ ๋ฐ ๋์์ด ๋จ.
- ์ฑ๋ฅ ํฅ์: React๋ ์ฌ๋ฌ ์ํ ์ ๋ฐ์ดํธ๋ฅผ ํ๋์ ๋ ๋๋ง์ผ๋ก ๋ฐฐ์นํ์ฌ ์ฑ๋ฅ์ ํฅ์์ํด.
unstable_batchedUpdates
: ๋น๋๊ธฐ ์ฝ๋์์ ๋ฐฐ์น ์ ๋ฐ์ดํธ๋ฅผ ์๋์ผ๋ก ์ ์ดํ ์ ์์.
- ๋ฆฌ์คํธ ๋ ๋๋ง ์ต์ ํ: ๋ง์ ์์ ๋ฆฌ์คํธ๋ฅผ ๋ ๋๋งํ ๋ ๊ฐ์ํ ๊ธฐ๋ฒ์ ์ฌ์ฉํ์ฌ ์ฑ๋ฅ์ ๊ฐ์ ํ ์ ์์.
- React Window ๋ฐ React Virtualized: ์ด๋ฌํ ์์ ์ ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ด ์์.
- ๋ฒ๋ค ํฌ๊ธฐ ๊ฐ์: ์ฝ๋ ์คํ๋ฆฌํ ์ ํตํด ์ด๊ธฐ ๋ก๋ฉ ์๊ฐ์ ์ค์ผ ์ ์์.
React.lazy
์Suspense
: ๋์ ์ํฌํธ๋ฅผ ํ์ฉํ์ฌ ์ปดํฌ๋ํธ๋ฅผ ํ์ํ ๋๋ง ๋ก๋ํจ.
- React์ ํจ์ํ ์ปดํฌ๋ํธ๋ ๊ฐ๊ฒฐํ๋ฉฐ, Hooks๋ฅผ ํตํด ์ํ์ ์๋ช ์ฃผ๊ธฐ ๊ด๋ฆฌ๋ฅผ ์ํํจ.
- ํด๋์คํ ์ปดํฌ๋ํธ๋ ์๋ช
์ฃผ๊ธฐ ๋ฉ์๋์
this
๋ฅผ ์ฌ์ฉํ์ฌ ์ํ์ ๋์์ ๊ด๋ฆฌํ์ง๋ง ๋ ๋ณต์กํ ์ ์์. - Fiber ์ํคํ ์ฒ๋ ๋น๋๊ธฐ์ ๋ ๋๋ง์ ๊ฐ๋ฅํ๊ฒ ํ์ฌ React๊ฐ ํจ์จ์ ์ผ๋ก ๋ ๋๋ง์ ์ ์ดํ ์ ์๊ฒ ํจ.
- Reconciliation์ ๊ฐ์ DOM์ ํตํด ์ต์ํ์ DOM ์ ๋ฐ์ดํธ๋ฅผ ์ ์ฉํ๋ ๊ณผ์ ์ด๋ฉฐ, Commit ๋จ๊ณ์์ ๋ณ๊ฒฝ ์ฌํญ์ด ์ค์ DOM์ ๋ฐ์๋จ.
- ์ถ๊ฐ์ ์ผ๋ก, React์ ์ฑ๋ฅ๊ณผ ํจ์จ์ฑ์ ๋์ด๊ธฐ ์ํด ๋ค์ํ ๊ธฐ๋ฒ๊ณผ ์์น์ ์ดํดํ๊ณ ์ ์ฉํด์ผ ํจ.
์ ๋ฐ์ ์ผ๋ก ๋ ์ฝ๊ฒ ์ค๋ช ์ ์ถ๊ฐํ์๋ฉด:
- Fiber ์ํคํ
์ฒ๋ React๊ฐ ํฐ ์์
์ ์์ ์กฐ๊ฐ์ผ๋ก ๋๋์ด ์ฒ๋ฆฌํ ์ ์๊ฒ ํด์ฃผ๋ ์๋ก์ด ์์ง์ด๋ผ๊ณ ๋ณผ ์ ์์. ์ด๋ฅผ ํตํด React๋ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๋ ๋ถ๋๋ฝ๊ณ ๋น ๋ฅด๊ฒ ์
๋ฐ์ดํธํ ์ ์์.
- ์๋ฅผ ๋ค์ด, ํฐ ๋ฆฌ์คํธ๋ฅผ ๋ ๋๋งํ ๋ ์ด์ ์๋ ํ ๋ฒ์ ๋ชจ๋ ์์ ์ ์ฒ๋ฆฌํด์ผ ํ์ง๋ง, ์ด์ ๋ ๋ถ๋ถ์ ์ผ๋ก ์์ ์ ๋๋์ด ์ฌ์ฉ์์๊ฒ ๋ ๋น ๋ฅธ ์๋ต์ฑ์ ์ ๊ณตํ ์ ์์.
- ํจ์ํ ์ปดํฌ๋ํธ๋ ๋ ๊ฐ๋จํ๊ณ ์ฝ๋๋์ด ์ ์ด ๊ฐ๋ฐ์๊ฐ ์ดํดํ๊ณ ์ ์ง๋ณด์ํ๊ธฐ ์ฌ์.
Hooks
๋ฅผ ์ฌ์ฉํ๋ฉด ์ํ ๊ด๋ฆฌ์ ์๋ช ์ฃผ๊ธฐ ๋ฉ์๋๋ฅผ ํจ์ ๋ด์์ ๊ฐ๋จํ๊ฒ ์ฒ๋ฆฌํ ์ ์์.
- ํด๋์คํ ์ปดํฌ๋ํธ๋ ๋ ๋ง์ ์ฝ๋์ ๋ณต์ก์ฑ์ ๊ฐ์ง์ง๋ง, ๊ธฐ์กด์ ์๋ช
์ฃผ๊ธฐ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ํ์ ๋์์ ๊ด๋ฆฌํจ.
this
ํค์๋๋ฅผ ์ฌ์ฉํด์ผ ํ๊ณ , ๋ฉ์๋ ๋ฐ์ธ๋ฉ ๋ฑ ์ถ๊ฐ ์์ ์ด ํ์ํจ.
๊ฒฐ๋ก ์ ์ผ๋ก, React์ ๋ด๋ถ ์๋ ๋ฐฉ์์ ์ดํดํ๋ฉด ๋๋ฒ๊น ์ด ์ฌ์์ง ๋ฟ๋ง ์๋๋ผ ๋ ํจ์จ์ ์ด๊ณ ์ฑ๋ฅ ์ข์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ์ ์์. ํนํ Fiber ์ํคํ ์ฒ์ ๊ตฌํ ๋ฐฉ์๊ณผ ๊ทธ๋ก ์ธํ ์ด์ ์ ์๋ฉด React์ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ์ต๋ํ ํ์ฉํ ์ ์๊ฒ ๋ค!