๋ณธ๋ฌธ์œผ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

๐Ÿ‘‰ React Fiber Architecture

Introductionโ€‹

React Fiber๋Š” React์˜ ํ•ต์‹ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ง€์†์ ์œผ๋กœ ์žฌ๊ตฌํ˜„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ React ํŒ€์ด 2๋…„ ๋„˜๊ฒŒ ์—ฐ๊ตฌํ•œ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค.

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

๋‹ค๋ฅธ ์ฃผ์š” ๊ธฐ๋Šฅ์—๋Š” ์ƒˆ ์—…๋ฐ์ดํŠธ๊ฐ€ ๋“ค์–ด์˜ฌ ๋•Œ ์ž‘์—…์„ ์ผ์‹œ ์ค‘์ง€, ์ค‘๋‹จ ๋˜๋Š” ์žฌ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์ด์™ธ์—๋„ ๋‹ค์–‘ํ•œ ์œ ํ˜•์˜ ์—…๋ฐ์ดํŠธ์— ์šฐ์„  ์ˆœ์œ„๋ฅผ ํ• ๋‹นํ•˜๋Š” ๊ธฐ๋Šฅ๊ณผ ์ƒˆ๋กœ์šด ๋™์‹œ์„ฑ ๋ชจ๋“œ๋ฅผ ์œ„ํ•œ ์ดˆ๊ธฐ ์ž‘์—…๋“ค์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

About this documentโ€‹

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

ํ•ต์‹ฌ ์šฉ์–ด๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ •์˜ํ•˜์—ฌ ์ „๋ฌธ ์šฉ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๊ฐ€๋Šฅํ•œ ๊ฐ€์žฅ ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ€๋Šฅํ•œ ์™ธ๋ถ€ ๋งํฌ ๋งŽ์ด ์—ฐ๊ฒฐํ•ด๋‘๊ฒ ์Šต๋‹ˆ๋‹ค.

์ €๋Š” React ํŒ€์— ์†Œ์†๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฉฐ ์–ด๋– ํ•œ ๊ถŒํ•œ์„ ๊ฐ–๊ณ  ๋งํ•˜์ง€ ์•Š์Œ์„ ์•Œ์•˜์œผ๋ฉด ํ•œ๋‹ค. ์ด๊ฒƒ์€ ๊ณต์‹ ๋ฌธ์„œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์ €๋Š” React ํŒ€์›๋“ค์—๊ฒŒ ์ •ํ™•์„ฑ์„ ๊ฒ€ํ† ํ•˜๋„๋ก ์š”์ฒญํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ด ๋ฌธ์„œ๋Š” ์ง„ํ–‰ ์ค‘์ธ ์ž‘์—…์ž…๋‹ˆ๋‹ค. Fiber๋Š” ์™„๋ฃŒ๋˜๊ธฐ ์ „์— ์ƒ๋‹นํ•œ ๋ฆฌํŒฉํ„ฐ๋ง์„ ๊ฑฐ์น  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์€ ์ง„ํ–‰ ์ค‘์ธ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ์—ฌ๊ธฐ์— ๋””์ž์ธ์„ ๋ฌธ์„œํ™”ํ•˜๋ ค๋Š” ์‹œ๋„๋„ ์ง„ํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค. ๊ฐœ์„  ๋ฐ ์ œ์•ˆ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ๋ชฉํ‘œ๋Š” ์ด ๋ฌธ์„œ๋ฅผ ์ฝ์€ ํ›„ Fiber๊ฐ€ ๊ตฌํ˜„๋˜๋Š” ๊ณผ์ •์„ ๋”ฐ๋ผ๊ฐˆ ์ˆ˜ ์žˆ์„ ๋งŒํผ ์ถฉ๋ถ„ํžˆ ์ž˜ ์ดํ•ดํ•˜๊ณ  ๊ฒฐ๊ตญ์—๋Š” React์— ๋‹ค์‹œ ๊ธฐ์—ฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Prerequisites(์ „์ œ ์กฐ๊ฑด)โ€‹

๊ณ„์†ํ•˜๊ธฐ ์ „์— ๋‹ค์Œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ˆ™์ง€ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

  • React Components, Elements, and Instances: โ€œComponentโ€๋Š” ์ง€๋‚˜์น˜๊ฒŒ ๋‹ค์–‘ํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜๋Š” ๋‹จ์–ด์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฐ ์šฉ์–ด์— ๋Œ€ํ•œ ํ™•๊ณ ํ•œ ์ดํ•ด๋Š” ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.
  • Reconciliation(์žฌ์กฐ์ •): React์˜ ์žฌ์กฐ์ • ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•œ ๋†’์€ ์ˆ˜์ค€์˜ ์„ค๋ช…์ž…๋‹ˆ๋‹ค.
  • React Basic Theoretical Concepts: React์˜ ๊ฐœ๋…์  ๋ชจ๋ธ์— ๋Œ€ํ•œ ์„ค๋ช…. ์ด ์ค‘ ์ผ๋ถ€๋Š” ์ฒ˜์Œ ์ฝ์„ ๋•Œ ์ดํ•ด๊ฐ€ ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ๋” ์ดํ•ด๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  • React Design Principles: ์Šค์ผ€์ค„๋ง ์„น์…˜์— ํŠนํžˆ ์ง‘์ค‘ํ•ด์„œ ๋ณด์„ธ์š”. React Fiber์˜ why๋ฅผ ์ž˜ ์„ค๋ช…ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Reviewโ€‹

์•„์ง ์ „์ œ ์กฐ๊ฑด ํ•ญ๋ชฉ์„ ๋ณด๊ธฐ ์ „์ด๋ผ๋ฉด ๊ผญ ๋จผ์ € ๋ณด๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์‚ดํŽด๋ณด๊ธฐ ์ „์— ๋ช‡ ๊ฐ€์ง€ ์ปจ์…‰์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

reconciliation(์žฌ์กฐ์ •)์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?โ€‹

reconciliationโ€‹

  • React ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์–ด๋–ค ๋ถ€๋ถ„์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋Š”์ง€ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•ด ํ•œ ํŠธ๋ฆฌ๋ฅผ ๋‹ค๋ฅธ ํŠธ๋ฆฌ์™€ ๋น„๊ตํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

updateโ€‹

  • React ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ Œ๋”๋งํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ์˜ ๋ณ€๊ฒฝ. ์ผ๋ฐ˜์ ์œผ๋กœ setState์˜ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ ๋ฆฌ๋žœ๋”๋ง ๋ฉ๋‹ˆ๋‹ค.

React API์˜ ํ•ต์‹ฌ ์•„์ด๋””์–ด๋Š” ์—…๋ฐ์ดํŠธ๊ฐ€ ์ „์ฒด ์•ฑ์„ ๋ฆฌ๋žœ๋”๋งํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํŠน์ • ์ƒํƒœ์—์„œ ๋‹ค๋ฅธ ์ƒํƒœ๋กœ ํšจ์œจ์ ์œผ๋กœ ์ „ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๊ณ ๋ฏผํ•˜๋Š” ๋Œ€์‹  ์„ ์–ธ์ ์œผ๋กœ ์ถ”๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (A์—์„œ B๋กœ, B์—์„œ C๋กœ, C์—์„œ A๋กœ ๋“ฑ)

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

์žฌ์กฐ์ •์€ "๊ฐ€์ƒ DOM(Virtual DOM)"์œผ๋กœ ์ผ๋ฐ˜์ ์œผ๋กœ ์ดํ•ด๋˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค. ๋†’์€ ์ˆ˜์ค€์˜ ์„ค๋ช…(high-level description)์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค: React ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ Œ๋”๋งํ•˜๋ฉด ์•ฑ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋…ธ๋“œ ํŠธ๋ฆฌ๊ฐ€ ์ƒ์„ฑ๋˜์–ด ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ด ํŠธ๋ฆฌ๋Š” ๋ Œ๋”๋ง ํ™˜๊ฒฝ์œผ๋กœ ํ”Œ๋Ÿฌ์‹œ๋ฉ๋‹ˆ๋‹ค. (์˜ˆ๋ฅผ ๋“ค์–ด, ๋ธŒ๋ผ์šฐ์ € ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฒฝ์šฐ DOM ์ž‘์—… ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.) ์•ฑ์ด ์—…๋ฐ์ดํŠธ๋˜๋ฉด(์ผ๋ฐ˜์ ์œผ๋กœ setState๋ฅผ ํ†ตํ•ด) ์ƒˆ ํŠธ๋ฆฌ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ƒˆ ํŠธ๋ฆฌ๋Š” ๋ Œ๋”๋ง๋œ ์•ฑ์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ž‘์—…์„ ๊ณ„์‚ฐํ•˜๊ธฐ ์œ„ํ•ด ์ด์ „ ํŠธ๋ฆฌ์™€ ๋น„๊ต๋ฉ๋‹ˆ๋‹ค.

Fiber๋Š” ์กฐ์ •์ž(reconciler)๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ์žฌ์ž‘์„ฑํ•œ ๊ฒƒ์ด์ง€๋งŒ, React ๋ฌธ์„œ์— ์„ค๋ช…๋œ ๊ณ ๊ธ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋Œ€์ฒด๋กœ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ํ‚ค ํฌ์ธํŠธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  • ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ ํƒ€์ž…์€ ์‹ค์งˆ์ ์œผ๋กœ ๋‹ค๋ฅธ ํŠธ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. React๋Š” ๊ทธ๊ฒƒ๋“ค์„ ๋น„๊ตํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜์ง€ ์•Š๊ณ  ์ด์ „ ํŠธ๋ฆฌ๋ฅผ ์™„์ „ํžˆ ๊ต์ฒดํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฆฌ์ŠคํŠธ ๋น„๊ต๋Š” ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ํ‚ค๋Š” "์•ˆ์ •์ ์ด๊ณ  ์˜ˆ์ธก ๊ฐ€๋Šฅํ•˜๋ฉฐ ๊ณ ์œ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค."

Reconciliation vs rendering(์žฌ์กฐ์ • vs ๋ Œ๋”๋ง)โ€‹

DOM์€ React๊ฐ€ ๋ Œ๋”๋งํ•  ์ˆ˜ ์žˆ๋Š” ๋ Œ๋”๋ง ํ™˜๊ฒฝ ์ค‘ ํ•˜๋‚˜์ผ ๋ฟ์ด๋ฉฐ, ์ด์™ธ์—๋„ React Native๋ฅผ ํ†ตํ•œ ๊ธฐ๋ณธ iOS ๋ฐ Android ๋ณด๊ธฐ(views)์ž…๋‹ˆ๋‹ค. (์ด๊ฒƒ์ด "๊ฐ€์ƒ DOM"์ด ์•ฝ๊ฐ„ ์ž˜๋ชป๋œ ์ด๋ฆ„์ธ ์ด์œ ์ž…๋‹ˆ๋‹ค.)

์ด๋ ‡๊ฒŒ ๋งŽ์€ ๋Œ€์ƒ์„ ์ง€์›ํ•  ์ˆ˜ ์žˆ๋Š” ์ด์œ ๋Š” React๊ฐ€ ์žฌ์กฐ์ •๊ณผ ๋ Œ๋”๋ง์ด ๋ณ„๋„์˜ ๋‹จ๊ณ„๋กœ ์„ค๊ณ„๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์กฐ์ •์ž(reconciler)๋Š” ํŠธ๋ฆฌ์˜ ์–ด๋–ค ๋ถ€๋ถ„์ด ๋ณ€๊ฒฝ๋˜์—ˆ๋Š”์ง€ ๊ณ„์‚ฐํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋ Œ๋”๋Ÿฌ(renderer)๋Š” ํ•ด๋‹น ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ Œ๋”๋ง๋œ ์•ฑ์„ ์‹ค์ œ๋กœ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ถ„๋ฆฌ๋Š” React DOM๊ณผ React Native๊ฐ€ React ์ฝ”์–ด์—์„œ ์ œ๊ณตํ•˜๋Š” ๋™์ผํ•œ ์กฐ์ •์ž(reconciler)๋ฅผ ๊ณต์œ ํ•˜๋ฉด์„œ ์ž์ฒด ๋ Œ๋”๋Ÿฌ(renderer)๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

Fiber๋Š” ์กฐ์ •์ž๋ฅผ ๋‹ค์‹œ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. ๋ Œ๋”๋ง ๊ณผ์ •์—๋Š” ํฌ๊ฒŒ ๊ด€์—ฌํ•˜์ง€ ์•Š์ง€๋งŒ, ๋ Œ๋”๋Ÿฌ๊ฐ€ ์ƒˆ๋กœ์šด ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ง€์›ํ•˜๊ณ  ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋ณ€ํ™”ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

Schedulingโ€‹

scheduling(์Šค์ผ€์ฅด๋ง)โ€‹

  • ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ์‹œ๊ธฐ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค์ž…๋‹ˆ๋‹ค.

work(์ž‘์—…)โ€‹

  • ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ๋ชจ๋“  ๊ณ„์‚ฐ. ์ž‘์—…์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ(์˜ˆ: setState)์˜ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค.

React์˜ ๋””์ž์ธ ์›์น™ ๋ฌธ์„œ๋Š” ์ด ์ฃผ์ œ์— ๋Œ€ํ•ด ๋„ˆ๋ฌด ์ž˜ ์ž‘์„ฑ๋˜์–ด ์žˆ์–ด์„œ ๊ทธ๋Œ€๋กœ ์ธ์šฉํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ ๊ตฌํ˜„์—์„œ React๋Š” ์žฌ๊ท€์ ์œผ๋กœ ํŠธ๋ฆฌ๋ฅผ ํƒ์ƒ‰ํ•˜๊ณ  ํ•œ ๋ฒˆ์˜ ํ‹ฑ(tick) ๋™์•ˆ ์ „์ฒด ์—…๋ฐ์ดํŠธ๋œ ํŠธ๋ฆฌ์˜ ๋ Œ๋”๋ง ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฏธ๋ž˜์— ํ”„๋ ˆ์ž„ ๋“œ๋กญ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ผ๋ถ€ ์—…๋ฐ์ดํŠธ๊ฐ€ ์ง€์—ฐ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๊ฒƒ์€ React ๋””์ž์ธ์˜ ๊ณตํ†ต ์ฃผ์ œ์ž…๋‹ˆ๋‹ค. ์ผ๋ถ€ ์ธ๊ธฐ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์ƒˆ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„ ๋•Œ ๊ณ„์‚ฐ์ด ์ˆ˜ํ–‰๋˜๋Š” "push" ์ ‘๊ทผ ๋ฐฉ์‹์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ React๋Š” ๊ณ„์‚ฐ์ด ํ•„์š”ํ•  ๋•Œ๊นŒ์ง€ ์ง€์—ฐ๋  ์ˆ˜ ์žˆ๋Š” "๋‹น๊ธฐ๊ธฐ(pull)" ์ ‘๊ทผ ๋ฐฉ์‹์„ ๊ณ ์ˆ˜ํ•ฉ๋‹ˆ๋‹ค.
React๋Š” ์ œ๋„ค๋ฆญํ•œ(generic / ์ผ๋ฐ˜์ ์ธ) ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. React๋Š” ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ํ˜„์žฌ ์–ด๋–ค ๊ณ„์‚ฐ์ด ๊ด€๋ จ์ด ์žˆ๊ณ  ๊ทธ๋ ‡์ง€ ์•Š์€์ง€ ์•Œ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ์•ฑ์—์„œ ๊ณ ์œ ํ•œ ์œ„์น˜์— ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
๋ฌด์–ธ๊ฐ€๊ฐ€ ํ™”๋ฉด ๋ฐ–์— ์žˆ๋Š” ๊ฒฝ์šฐ ๊ด€๋ จ ๋กœ์ง์„ ์ง€์—ฐ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๋ฐ์ดํ„ฐ๊ฐ€ ํ”„๋ ˆ์ž„ ์†๋„๋ณด๋‹ค ๋น ๋ฅด๊ฒŒ ๋„์ฐฉํ•˜๋ฉด ๋ณ‘ํ•ฉํ•˜๊ณ  ์—…๋ฐ์ดํŠธ๋ฅผ ์ผ๊ด„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋ ˆ์ž„ ์†์‹ค์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋œ ์ค‘์š”ํ•œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—…(์˜ˆ: ๋„คํŠธ์›Œํฌ์—์„œ ๋ฐฉ๊ธˆ ๋กœ๋“œ๋œ ์ƒˆ ์ฝ˜ํ…์ธ  ๋ Œ๋”๋ง)๋ณด๋‹ค ์‚ฌ์šฉ์ž ์ƒํ˜ธ ์ž‘์šฉ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์ž‘์—…(์˜ˆ: ๋ฒ„ํŠผ ํด๋ฆญ์œผ๋กœ ์ธํ•œ ์• ๋‹ˆ๋ฉ”์ด์…˜)์— ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋‘˜ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ‚คํฌ์ธํŠธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • UI์—์„œ ๋ชจ๋“  ์—…๋ฐ์ดํŠธ๋ฅผ ์ฆ‰์‹œ ์ ์šฉํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ๋‚ญ๋น„๊ฐ€ ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ ํ”„๋ ˆ์ž„์ด ๋–จ์–ด์ง€๊ณ  ์‚ฌ์šฉ์ž ๊ฒฝํ—˜(user experience)์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์—…๋ฐ์ดํŠธ ์œ ํ˜•์— ๋”ฐ๋ผ ์šฐ์„  ์ˆœ์œ„๊ฐ€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์• ๋‹ˆ๋ฉ”์ด์…˜ ์—…๋ฐ์ดํŠธ๋Š” ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ(data store)์˜ ์—…๋ฐ์ดํŠธ๋ณด๋‹ค ๋” ๋นจ๋ฆฌ ์™„๋ฃŒ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ํ‘ธ์‹œ ๊ธฐ๋ฐ˜(push-based) ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์•ฑ(๋‹น์‹ , ํ”„๋กœ๊ทธ๋ž˜๋จธ)์ด ์ž‘์—… ์˜ˆ์•ฝ ๋ฐฉ๋ฒ•(how to schedule work)์„ ๊ฒฐ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ’€ ๊ธฐ๋ฐ˜(pull-based) ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ํ”„๋ ˆ์ž„์›Œํฌ(React)๊ฐ€ ๋˜‘๋˜‘ํ•˜๊ฒŒ ์ด๋Ÿฌํ•œ ๊ฒฐ์ •์„ ๋‚ด๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

React๋Š” ํ˜„์žฌ ์ค‘์š”ํ•œ ๋ฐฉ์‹์œผ๋กœ ์Šค์ผ€์ค„๋ง์˜ ์žฅ์ ์„ ํ™œ์šฉํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ์—…๋ฐ์ดํŠธํ•˜๋ฉด ์ „์ฒด ํ•˜์œ„ ํŠธ๋ฆฌ๊ฐ€ ์ฆ‰์‹œ ๋ฆฌ๋ Œ๋”๋ง๋ฉ๋‹ˆ๋‹ค. ์Šค์ผ€์ค„๋ง์„ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด React์˜ ํ•ต์‹ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ •๋น„ํ•˜๋Š” ๊ฒƒ์ด Fiber์˜ ํ•ต์‹ฌ ์•„์ด๋””์–ด์ž…๋‹ˆ๋‹ค.


์ด์ œ Fiber ๊ตฌํ˜„์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณผ ์ค€๋น„๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ์„น์…˜์€ ์ง€๊ธˆ๊นŒ์ง€ ๋…ผ์˜ํ•œ ๊ฒƒ๋ณด๋‹ค ๋” ๊ธฐ์ˆ ์ ์ธ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. ๊ณ„์† ์ง„ํ–‰ํ•˜๊ธฐ ์ „์— ์ด์ „ ์ž๋ฃŒ์— ์ต์ˆ™ํ•ด์กŒ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.