Skip to content

Latest commit

ย 

History

History
268 lines (182 loc) ยท 17.8 KB

overview.md

File metadata and controls

268 lines (182 loc) ยท 17.8 KB

1. React์˜ ๊ธฐ๋ณธ ๋ Œ๋”๋ง ๊ณผ์ •

React์—์„œ์˜ ๋ Œ๋”๋ง ๊ณผ์ •์€ ํฌ๊ฒŒ ์„ธ ๋‹จ๊ณ„๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์Œ:

  1. ๋ Œ๋” ๋‹จ๊ณ„ (Render Phase): ์ปดํฌ๋„ŒํŠธ ํŠธ๋ฆฌ๋ฅผ ํƒ์ƒ‰ํ•˜๊ณ , ์ƒˆ๋กœ์šด UI๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ€์ƒ DOM์„ ๋งŒ๋“œ๋Š” ๋‹จ๊ณ„
  2. ์กฐ์ • (Reconciliation Phase): ์ด์ „์˜ ๊ฐ€์ƒ DOM๊ณผ ์ƒˆ๋กœ์šด ๊ฐ€์ƒ DOM์„ ๋น„๊ตํ•˜์—ฌ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ฐพ์•„๋‚ด๋Š” ๋‹จ๊ณ„
  3. ์ปค๋ฐ‹ ๋‹จ๊ณ„ (Commit Phase): ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์‹ค์ œ DOM์— ๋ฐ˜์˜ํ•˜๋Š” ๋‹จ๊ณ„

์ด ๋ชจ๋“  ๊ณผ์ •์€ Fiber ์•„ํ‚คํ…์ฒ˜๋ฅผ ํ†ตํ•ด ๊ด€๋ฆฌ๋˜๋ฉฐ, Fiber๋Š” React๊ฐ€ ๋น„๋™๊ธฐ์ ์ด๊ณ  ํšจ์œจ์ ์ธ ๋ Œ๋”๋ง์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ํ•ต์‹ฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž„

๋ Œ๋”๋ง๊ณผ Commit

  1. ๋ Œ๋” ๋‹จ๊ณ„: ์ด ๋‹จ๊ณ„์—์„œ๋Š” ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜๊ฑฐ๋‚˜ ์ƒˆ๋กœ์šด ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ Œ๋”๋ง๋  ๋•Œ, React๋Š” ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ์˜ ์ƒˆ๋กœ์šด ๊ฐ€์ƒ DOM ํŠธ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•จ. ์ด ํŠธ๋ฆฌ๋Š” ์‹ค์ œ DOM์— ๋ฐ˜์˜๋˜๊ธฐ ์ „์˜ ์ดˆ์•ˆ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋จ.
  2. Commit ๋‹จ๊ณ„: ์ƒˆ๋กœ์šด ๊ฐ€์ƒ DOM ํŠธ๋ฆฌ๊ฐ€ ์ƒ์„ฑ๋œ ํ›„, ๊ทธ ๋ณ€ํ™”๊ฐ€ ์‹ค์ œ DOM์— ์ ์šฉ๋˜๋Š” ๋‹จ๊ณ„์ž„. ์ด๋•Œ React๋Š” ์‹ค์ œ๋กœ DOM์„ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ํ™”๋ฉด์— ๋ณ€ํ™”๋ฅผ ์ ์šฉํ•จ.

2. ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์™€ ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ์˜ ์ฐจ์ด

ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ:

class MyComponent extends React.Component {
  constructor(props) {
    super(props);
    this.state = { count: 0 };
  }

  componentDidMount() {
    // ๋งˆ์šดํŠธ ํ›„ ํ˜ธ์ถœ
  }

  render() {
    return <div>{this.state.count}</div>;
  }
}

๋™์ž‘ ์›๋ฆฌ:

  1. ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ: ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ๋Š” ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜๋ฉฐ, ๊ฐ ์ธ์Šคํ„ด์Šค๋Š” state์™€ props๋ฅผ ํฌํ•จํ•˜๋Š” ๊ณ ์œ ์˜ ๊ฐ์ฒด๋ฅผ ๊ฐ€์ง.
  2. ์ƒ๋ช…์ฃผ๊ธฐ ๋ฉ”์„œ๋“œ: ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ๋Š” componentDidMount, componentDidUpdate, componentWillUnmount ๋“ฑ ์ƒ๋ช…์ฃผ๊ธฐ ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ์™€ DOM์ด ์–ด๋–ป๊ฒŒ ์—…๋ฐ์ดํŠธ๋˜๋Š”์ง€๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Œ.
  3. 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์— ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ฐ˜์˜ํ•˜์—ฌ ํ™”๋ฉด์„ ์—…๋ฐ์ดํŠธ

๋™์ž‘ ์›๋ฆฌ:

  1. ๊ฐ„๋‹จํ•œ ํ•จ์ˆ˜ ํ˜ธ์ถœ: ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ๋Š” ๋‹จ์ˆœํžˆ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•จ. ์ƒํƒœ๋Š” React Hook(์˜ˆ: useState, useEffect)์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ด€๋ฆฌ๋จ.
  2. ์ƒ๋ช…์ฃผ๊ธฐ ๊ด€๋ฆฌ: ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ์˜ ์ƒ๋ช…์ฃผ๊ธฐ ๋ฉ”์„œ๋“œ์™€ ๋‹ฌ๋ฆฌ, ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ๋Š” Hooks๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ๋ช…์ฃผ๊ธฐ ๋™์ž‘์„ ๋Œ€์ฒดํ•จ.
    • useEffect๋Š” componentDidMount, componentDidUpdate, componentWillUnmount๋ฅผ ํ†ตํ•ฉํ•œ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉ๋จ.

์ฃผ์š” ํŠน์ง•:

  • Hooks: useState, useEffect ๊ฐ™์€ Hook์„ ํ†ตํ•ด ์ƒํƒœ ๋ฐ ์ƒ๋ช…์ฃผ๊ธฐ ๊ด€๋ จ ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•จ.
  • ๊ฐ„๊ฒฐ์„ฑ: ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ๋Š” ์ฝ”๋“œ๊ฐ€ ๋” ๊ฐ„๊ฒฐํ•˜๊ณ  ๊ตฌ์กฐ๊ฐ€ ๋ช…ํ™•ํ•จ.
  • ๋ฉ”๋ชจ๋ฆฌ ๋น„์šฉ์ด ์ƒ๋Œ€์ ์œผ๋กœ ์ ์Œ(ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š์Œ).

3. Fiber ์•„ํ‚คํ…์ฒ˜

Fiber๊ฐ€ ๋„์ž…๋œ ์ด์œ :

  • React 16์—์„œ ๋„์ž…๋œ Fiber๋Š” React์˜ ์ฝ”์–ด ์žฌ๊ตฌ์„ฑ์„ ํ†ตํ•ด ๋ Œ๋”๋ง ์ž‘์—…์„ ๋” ์„ธ๋ฐ€ํ•˜๊ฒŒ ์ œ์–ดํ•˜๊ณ , ๋น„๋™๊ธฐ์  ์—…๋ฐ์ดํŠธ๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜์—ฌ ๋ณด๋‹ค ํšจ์œจ์ ์ธ ๋ Œ๋”๋ง์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์กŒ์Œ.
  • Fiber์˜ ํ•ต์‹ฌ ๋ชฉํ‘œ๋Š” ์‹œ๊ฐ„ ๋ถ„ํ•  ๋ Œ๋”๋ง(time slicing)์ด๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ๋ฐฉ์‹์œผ๋กœ, ํฐ ๋ Œ๋”๋ง ์ž‘์—…์„ ์ž‘์€ ์ž‘์—… ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„์–ด ๋ธŒ๋ผ์šฐ์ €์˜ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ๋ฐ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์„ฑ๋Šฅ์„ ์ €ํ•˜์‹œํ‚ค์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž„.

Fiber์˜ ๋™์ž‘ ์›๋ฆฌ:

  • Fiber๋Š” ๊ฐ€๋ฒผ์šด ์ž‘์—… ๋‹จ์œ„๋กœ, ๊ฐ ์ž‘์—…์„ ์™„๋ฃŒํ•˜๊ธฐ ์ „์— ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํ•ด์•ผ ํ•  ์ค‘์š”ํ•œ ์ž‘์—…(์˜ˆ: ์‚ฌ์šฉ์ž ์ž…๋ ฅ, ์• ๋‹ˆ๋ฉ”์ด์…˜)์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์ž‘์—…์„ ์ผ์‹œ ์ค‘๋‹จํ–ˆ๋‹ค๊ฐ€ ๋‹ค์‹œ ์žฌ๊ฐœํ•  ์ˆ˜ ์žˆ์Œ.
  • React๋Š” ์ด Fiber๋ฅผ ์‚ฌ์šฉํ•ด ๋ Œ๋”๋ง ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ •ํ•˜๊ณ , ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ์ž‘์—…์„ ๋จผ์ € ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•จ.

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๋Š” ๊ธด ๋ Œ๋”๋ง ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ฉด์„œ๋„ ์‚ฌ์šฉ์ž ์ธํ„ฐ๋ž™์…˜์— ๋น ๋ฅด๊ฒŒ ๋ฐ˜์‘ํ•  ์ˆ˜ ์žˆ์Œ.

Fiber ํŠธ๋ฆฌ์™€ ๋ Œ๋”๋ง ๊ณผ์ •:

  1. ํ˜„์žฌ ํŠธ๋ฆฌ(Current Tree): ํ˜„์žฌ ํ™”๋ฉด์— ๋ Œ๋”๋ง๋œ ํŠธ๋ฆฌ์ž„.
  2. ์ž‘์—… ์ค‘ ํŠธ๋ฆฌ(Work-in-progress Tree): ์ƒˆ๋กœ์šด ๋ Œ๋”๋ง ์ž‘์—…์ด ์ˆ˜ํ–‰๋˜๋Š” ํŠธ๋ฆฌ์ž„.
    • ๋ Œ๋”๋ง ๋‹จ๊ณ„์—์„œ React๋Š” ์ด ์ž‘์—… ์ค‘ ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•˜๋ฉด์„œ ์ƒˆ๋กญ๊ฒŒ ์—…๋ฐ์ดํŠธ๋œ ์ปดํฌ๋„ŒํŠธ๋“ค์„ ์ฒ˜๋ฆฌํ•จ.
    • ์ด ๊ณผ์ •์—์„œ ๊ฐ ์ปดํฌ๋„ŒํŠธ๋Š” Fiber ๋…ธ๋“œ๋กœ ๋ณ€ํ™˜๋˜๊ณ , ํ•„์š”ํ•œ ์ž‘์—…์ด ์ž‘์€ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„์–ด ์ฒ˜๋ฆฌ๋จ.
    • ๋ Œ๋”๋ง์ด ์™„๋ฃŒ๋˜๋ฉด ์ž‘์—… ์ค‘ ํŠธ๋ฆฌ๋Š” ํ˜„์žฌ ํŠธ๋ฆฌ๋กœ ๋Œ€์ฒด๋˜์–ด ์ปค๋ฐ‹ ๋‹จ๊ณ„๋กœ ๋„˜์–ด๊ฐ.

์ถ”๊ฐ€ ์„ค๋ช…:

  • ์šฐ์„ ์ˆœ์œ„ ์ฒ˜๋ฆฌ: Fiber๋Š” ๊ฐ ์ž‘์—…์— ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋ถ€์—ฌํ•˜์—ฌ ๊ธด ๋ Œ๋”๋ง ์ž‘์—…์ด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ํ•ด์น˜์ง€ ์•Š๋„๋ก ํ•จ. ์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์ด๋‚˜ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๊ฐ™์€ ๊ณ ์šฐ์„ ์ˆœ์œ„ ์ž‘์—…์€ ์ฆ‰์‹œ ์ฒ˜๋ฆฌ๋˜๊ณ , ๋‚˜๋จธ์ง€ ๋ Œ๋”๋ง ์ž‘์—…์€ ๋‚˜์ค‘์— ์ฒ˜๋ฆฌ๋จ.
  • Interruptible Rendering: Fiber ์•„ํ‚คํ…์ฒ˜ ๋•๋ถ„์— React๋Š” ๋ Œ๋”๋ง ์ž‘์—…์„ ์ค‘๋‹จํ•˜๊ณ  ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋‚˜์ค‘์— ์žฌ๊ฐœํ•  ์ˆ˜ ์žˆ์Œ. ์ด๋Š” ๋ธŒ๋ผ์šฐ์ €์˜ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์—์„œ ๊ธด ์ž‘์—…์œผ๋กœ ์ธํ•ด UI๊ฐ€ ์‘๋‹ตํ•˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•จ.
  • ํ˜‘๋ ฅ์  ์Šค์ผ€์ค„๋ง: React๋Š” ์ž‘์—…์„ ์ž‘์€ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„์–ด ์‹คํ–‰ํ•˜๊ณ , ๊ฐ ๋‹จ์œ„ ์ž‘์—…์ด ๋๋‚  ๋•Œ๋งˆ๋‹ค ๋ธŒ๋ผ์šฐ์ €์—๊ฒŒ ์ œ์–ด๊ถŒ์„ ๋„˜๊ฒจ์คŒ. ์ด๋ฅผ ํ†ตํ•ด ์ค‘์š”ํ•œ ๋ธŒ๋ผ์šฐ์ € ์ž‘์—…(์˜ˆ: ์‚ฌ์šฉ์ž ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ)์ด ์ง€์—ฐ๋˜์ง€ ์•Š๋„๋ก ํ•จ.

4. Reconciliation (์กฐ์ • ๊ณผ์ •)

React๋Š” Reconciliation์„ ํ†ตํ•ด, ๊ธฐ์กด์˜ ๊ฐ€์ƒ DOM๊ณผ ์ƒˆ๋กœ์šด ๊ฐ€์ƒ DOM์„ ๋น„๊ตํ•˜๊ณ  ์ตœ์†Œํ•œ์˜ ์—…๋ฐ์ดํŠธ๋งŒ ์‹ค์ œ DOM์— ์ ์šฉํ•จ. ์ด ๊ณผ์ •์„ ํ†ตํ•ด ๋ถˆํ•„์š”ํ•œ DOM ์—…๋ฐ์ดํŠธ๋ฅผ ์ค„์ด๊ณ  ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ด.

๋™์ž‘ ์›๋ฆฌ:

  1. ๋ณ€๊ฒฝ ์‚ฌํ•ญ ๊ฐ์ง€: ์ƒˆ๋กœ์šด ์ƒํƒœ๋‚˜ props๊ฐ€ ์ „๋‹ฌ๋˜๋ฉด, React๋Š” ๊ธฐ์กด ๊ฐ€์ƒ DOM๊ณผ ์ƒˆ๋กœ์šด ๊ฐ€์ƒ DOM์„ ๋น„๊ตํ•จ.
  2. Diffing ์•Œ๊ณ ๋ฆฌ์ฆ˜: React๋Š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋น ๋ฅด๊ฒŒ ์ฐพ์•„๋‚ด๊ธฐ ์œ„ํ•ด Diffing ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•จ. ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋‹ค์Œ ์›์น™์— ๋”ฐ๋ผ ๋™์ž‘ํ•จ:
    • ๊ฐ™์€ ํƒ€์ž…์˜ ์š”์†Œ๋Š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ๋งŒ ์—…๋ฐ์ดํŠธํ•จ.
    • ๋‹ค๋ฅธ ํƒ€์ž…์˜ ์š”์†Œ๋Š” ๊ธฐ์กด ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์ƒˆ๋กœ ๋ Œ๋”๋งํ•จ.
    • Key๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ์ŠคํŠธ ํ•ญ๋ชฉ์˜ ์ˆœ์„œ๋ฅผ ์ถ”์ ํ•จ.

์ถ”๊ฐ€ ์„ค๋ช…:

  • ํšจ์œจ์„ฑ: Reconciliation ๊ณผ์ •์—์„œ React๋Š” ๊ฐ€๋Šฅํ•œ ํ•œ ์ตœ์†Œํ•œ์˜ ์กฐ์ž‘์œผ๋กœ ์‹ค์ œ DOM์„ ์—…๋ฐ์ดํŠธํ•˜๋ ค๊ณ  ํ•จ. ์ด๋Š” DOM ์กฐ์ž‘์ด ๋น„์šฉ์ด ๋งŽ์ด ๋“ค๊ธฐ ๋•Œ๋ฌธ์ž„.
  • Key์˜ ์ค‘์š”์„ฑ: ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ Œ๋”๋งํ•  ๋•Œ key ์†์„ฑ์„ ์ œ๊ณตํ•˜๋ฉด React๊ฐ€ ๊ฐ ํ•ญ๋ชฉ์„ ๊ณ ์œ ํ•˜๊ฒŒ ์‹๋ณ„ํ•˜์—ฌ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋” ์ •ํ™•ํ•˜๊ฒŒ ์ถ”์ ํ•  ์ˆ˜ ์žˆ์Œ.

5. Commit ๋‹จ๊ณ„

Commit ๋‹จ๊ณ„์—์„œ๋Š” Reconciliation์„ ํ†ตํ•ด ์ฐพ์•„๋‚ธ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์‹ค์ œ DOM์— ์ ์šฉํ•จ. ์ด ๋‹จ๊ณ„์—์„œ๋Š” ์„ธ ๊ฐ€์ง€ ์ž‘์—…์ด ์ด๋ฃจ์–ด์ง:

  1. DOM ์—…๋ฐ์ดํŠธ: ๋ณ€๊ฒฝ๋œ ๋…ธ๋“œ๋ฅผ ์‹ค์ œ DOM์— ๋ฐ˜์˜ํ•จ.
  2. ref ์ฝœ๋ฐฑ ํ˜ธ์ถœ: ref ์ฝœ๋ฐฑ์„ ํ†ตํ•ด ์ฐธ์กฐ๋œ DOM ๋…ธ๋“œ๋ฅผ ์—…๋ฐ์ดํŠธํ•จ.
  3. ์ƒ๋ช…์ฃผ๊ธฐ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ: componentDidMount, componentDidUpdate ๊ฐ™์€ ์ƒ๋ช…์ฃผ๊ธฐ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•จ.

์ถ”๊ฐ€ ์„ค๋ช…:

  • ๋™๊ธฐ ์‹คํ–‰: Commit ๋‹จ๊ณ„๋Š” ๋ Œ๋” ๋‹จ๊ณ„์™€ ๋‹ฌ๋ฆฌ ๋™๊ธฐ์ ์œผ๋กœ ์‹คํ–‰๋จ. ์ด๋Š” DOM ์—…๋ฐ์ดํŠธ๊ฐ€ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ฆ‰๊ฐ์ ์œผ๋กœ ๋ฐ˜์˜๋˜์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž„.
  • ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ: ์ด ๋‹จ๊ณ„์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜๋Š” React์˜ ์˜ค๋ฅ˜ ๊ฒฝ๊ณ„(Error Boundary)์— ์˜ํ•ด ์ฒ˜๋ฆฌ๋  ์ˆ˜ ์žˆ์Œ.

6. ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์˜ ์ถ”๊ฐ€ ์ฃผ์ œ

Hooks์˜ ๊ทœ์น™

  • ์ตœ์ƒ์œ„์—์„œ๋งŒ ํ˜ธ์ถœ: Hooks๋Š” ์ปดํฌ๋„ŒํŠธ์˜ ์ตœ์ƒ์œ„ ์ˆ˜์ค€์—์„œ๋งŒ ํ˜ธ์ถœํ•ด์•ผ ํ•จ. ๋ฃจํ”„๋‚˜ ์กฐ๊ฑด๋ฌธ, ์ค‘์ฒฉ๋œ ํ•จ์ˆ˜ ๋‚ด์—์„œ ํ˜ธ์ถœํ•˜๋ฉด ์•ˆ ๋จ.
  • React ํ•จ์ˆ˜ ๋‚ด์—์„œ๋งŒ ํ˜ธ์ถœ: Hooks๋Š” React ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ๋‚˜ ์ปค์Šคํ…€ Hook ๋‚ด์—์„œ๋งŒ ํ˜ธ์ถœํ•ด์•ผ ํ•จ.

์ปค์Šคํ…€ Hooks

  • ์žฌ์‚ฌ์šฉ์„ฑ: ์ปค์Šคํ…€ Hook์„ ๋งŒ๋“ค์–ด ๋กœ์ง์„ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ.
  • ๋ช…๋ช… ๊ทœ์น™: ์ปค์Šคํ…€ Hook์˜ ์ด๋ฆ„์€ use๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•จ.

์„ฑ๋Šฅ ์ตœ์ ํ™”

  • useMemo์™€ useCallback: ํ•จ์ˆ˜๋‚˜ ๊ฐ’์„ ๋ฉ”๋ชจ์ด์ œ์ด์…˜ํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ์žฌ๋ Œ๋”๋ง์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Œ.
  • React.memo: ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ฉ”๋ชจ์ด์ œ์ด์…˜ํ•˜์—ฌ props๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์œผ๋ฉด ์žฌ๋ Œ๋”๋ง์„ ๋ฐฉ์ง€ํ•จ.
  • ์ฃผ์˜์ : ๋ฉ”๋ชจ์ด์ œ์ด์…˜์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ, ๋ถˆํ•„์š”ํ•œ ๊ฒฝ์šฐ ์‚ฌ์šฉ์„ ํ”ผํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Œ.

7. ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ์˜ ์ถ”๊ฐ€ ์ฃผ์ œ

PureComponent

  • ๋ถˆํ•„์š”ํ•œ ์—…๋ฐ์ดํŠธ ๋ฐฉ์ง€: React.PureComponent๋ฅผ ์ƒ์†ํ•˜๋ฉด shouldComponentUpdate๋ฅผ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•„๋„, ์–•์€ ๋น„๊ต๋ฅผ ํ†ตํ•ด ๋ถˆํ•„์š”ํ•œ ์—…๋ฐ์ดํŠธ๋ฅผ ๋ฐฉ์ง€ํ•จ.

์—๋Ÿฌ ๊ฒฝ๊ณ„(Error Boundaries)

  • ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ: ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ๋งŒ ์—๋Ÿฌ ๊ฒฝ๊ณ„๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Œ. componentDidCatch์™€ getDerivedStateFromError๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜๋ฅผ ์žก์„ ์ˆ˜ ์žˆ์Œ.

8. React์˜ ํšจ์œจ์ ์ธ ๋ Œ๋”๋ง์„ ์œ„ํ•œ ์ถ”๊ฐ€ ๊ณ ๋ ค์‚ฌํ•ญ

๋ถˆ๋ณ€์„ฑ ์œ ์ง€

  • ์ƒํƒœ ์—…๋ฐ์ดํŠธ: ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธํ•  ๋•Œ ๋ถˆ๋ณ€์„ฑ์„ ์œ ์ง€ํ•˜์—ฌ 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์˜ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๊ฒ ๋‹ค!

Reference