VirtualDOM

ํ•™์Šต ํ‚ค์›Œ๋“œ

  • Virtual Dom ๋ž€?

    • DOM์ด๋ž€?

    • ์›น ๋ธŒ๋ผ์šฐ์ €์˜ ๋ Œ๋”๋ง ๊ณผ์ •

      • ํŒŒ์‹ฑ, ๋ Œ๋”๋ง,DOM,CSSOM, Render Tree, ๋ฆฌ๋ Œ๋”๋ง, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์‹ฑ,

    • ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํ™”๋ฉด์„ ์—…๋ฐ์ดํŠธ ํ•˜๋Š” ๊ณผ์ •

    • Reconciliation(์žฌ์กฐ์ •) ๊ณผ์ •์€ ๋ฌด์—‡์ธ๊ฐ€?

  • React ์„ฑ๋Šฅ ์ตœ์ ํ™” ๋ฐฉ๋ฒ•

  • React Developer Tools

    • React StrictMode

Virtual Dom

๐ŸŒŽ Virtual DOM์˜ ํƒ„์ƒ ๋ฐฐ๊ฒฝ

1.DOM์ด๋ž€?

  • Document Object Model

  • ๋ธŒ๋ผ์šฐ์ €๋Š” ๋ฌธ์ž์—ด ํ˜•์‹์˜ HTML์„ ๊ณง๋ฐ”๋กœ ์ดํ•ดํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์—, ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ดํ•ดํ•˜๊ณ  ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ๋กœ์˜ ๋ณ€ํ™˜์ด ํ•„์š”ํ•˜๋‹ค. DOM(Document Object Model)์€ ๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ์—”์ง„์˜ HTML parser์— ์˜ํ•ด ์ƒ์„ฑ๋œ 'ํŠธ๋ฆฌ' ๊ตฌ์กฐ์˜ Node ๊ฐ์ฒด ๋ชจ๋ธ ์ด๋‹ค.

DOM

2. ์›น ๋ธŒ๋ผ์šฐ์ €์˜ ๋ Œ๋”๋ง ๊ณผ์ •

  • ๋ Œ๋”๋ง ์—”์ง„ ์ด URI๋ฅผ ํ†ตํ•ด ์š”์ฒญ์„ ๋ฐ›์•„ ํ•ด๋‹นํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ Œ๋”๋ง ํ•˜๋Š” ์—ญํ™œ์„ ์ˆ˜ํ–‰.

  • Critical Rendering path

    1. ๋ธŒ๋ผ์šฐ์ €๋Š” HTML,CSS, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ, ์ด๋ฏธ์ง€, ํฐํŠธ ํŒŒ์ผ ๋“ฑ ๋ Œ๋”๋ง์— ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•˜๊ณ  ์„œ๋ฒ„๋กœ ๋ถ€ํ„ฐ ์‘๋‹ต ๋ฐ›๋Š”๋‹ค.

    2. ๋ธŒ๋ผ์šฐ์ €์˜ ๋ Œ๋”๋ง ์—”์ง„์€ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์‘๋‹ต๋œ HTML,CSS๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ DOM(Document Object Model)๊ณผ CSSOM(CSS Object Model)๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ด๋“ค์„ ๊ฒฐํ•ฉํ•˜์—ฌ Render Tree๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

    3. ๋ธŒ๋ผ์šฐ์ €์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ ์„œ๋ฒ„๋กœ ๋ถ€ํ„ฐ ์‘๋‹ต๋œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ AST(Abstract Syntax Tree)๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์‹คํ–‰ํ•œ๋‹ค. ์ด๋•Œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” DOM API๋ฅผ ํ†ตํ•ด DOM์ด๋‚˜ CSSOM๋ฅผ ๋ณ€๊ฒฝ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ณ€๊ฒฝ๋œ DOM๊ณผ CSSOM์€ ๋‹ค์‹œ Render Tree๋กœ ๊ฒฐํ•ฉ๋œ๋‹ค.

    4. Render Tree๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ HTML์š”์†Œ์˜ ๋ ˆ์ด์•„์›ƒ์„ ๊ณ„์‚ฐํ•˜๊ณ  ๋ธŒ๋ผ์šฐ์ €์— ํ™”๋ฉด์— ํŽ˜์ธํŒ… ํ•œ๋‹ค.

3๋ฒˆ ๊ณผ์ •์— ์˜ํ•ด์„œ 4๋ฒˆ์—์„œ ๋‹ค์‹œ ๋ ˆ์ด์•„์›ƒ์„ ์žฌ๊ณ„์‚ฐ ํ•˜๋Š” ์ƒํ™ฉ์„ Reflow๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

3. ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํ™”๋ฉด์„ ์—…๋ฐ์ดํŠธ ํ•˜๋Š” ๊ณผ์ •

๋ธŒ๋ผ์šฐ์ € ์—…๋ฐ์ดํŠธ ํ•˜๋Š” ๊ณผ์ •
  • DOM์„ ์ˆ˜์ •ํ•  ๋•Œ๋งˆ๋‹ค Render Tree์˜ ์ƒ์„ฑ๋ถ€ํ„ฐ Layout(Reflow),Painting(Repaint)์˜ ๊ณผ์ •์„ ๋‹ค์‹œ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค.

๋ธŒ๋ผ์šฐ์ € ์—…๋ฐ์ดํŠธ ์‹œ ์ฃผ์˜์‚ฌํ•ญ
  • ์„ฑ๋Šฅ ์ €ํ•˜์˜ ์ฃผ์š” ์›์ธ์€ DOM์„ ์ˆ˜์ •ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” Reflow, Repaint ๊ณผ์ •์— ์žˆ๋‹ค. Reflow๊ฐ€ ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” ์„ฑ๋Šฅ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉฐ, ์›น ํŽ˜์ด์ง€์˜ DOM์ด ๋ณต์žกํ•˜๊ฒŒ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๊ณ  CSS๊ฐ€ ๋งŽ์ด ์ ์šฉ๋œ ์‚ฌ์ดํŠธ์ผ์ˆ˜๋ก ๋”์šฑ ์‹ฌํ•ด์ง„๋‹ค.

Reflow ๋ ˆ์ด์•„์›ƒ ๊ณ„์‚ฐ์„ ๋‹ค์‹œ ํ•˜๋Š” ๊ฒƒ์œผ๋กœ, Reflow๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด Repaint๋Š” ํ•„์—ฐ์ ์œผ๋กœ ๋ฐœ์ƒ HTML ์š”์†Œ๋“ค์ด ์œ„์น˜์™€ ํฌ๊ธฐ๋ฅผ ๋‹ค์‹œ ๊ณ„์‚ฐํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋ฆฌํŽ˜์ธํŠธ์— ๋น„ํ•ด์„œ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค. ์ฆ‰, ๋ณ€๊ฒฝํ•˜๋ ค๋Š” ํŠน์ • ์š”์†Œ์˜ ์œ„์น˜์™€ ํฌ๊ธฐ๋ฟ ์•„๋‹ˆ๋ผ, ์—ฐ๊ด€๋œ ๋‹ค๋ฅธ ์š”์†Œ๋“ค์˜ ์œ„์น˜์™€ ํฌ๊ธฐ๊นŒ์ง€ ์žฌ๊ณ„์‚ฐ ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

Repaint ์žฌ๊ฒฐํ•ฉ๋œ Render Tree๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋‹ค์‹œ ํ™”๋ฉด์— ํŽ˜์ธํŠธ ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

VirtualDOM

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ DOM์กฐ์ž‘์‹œ ๋ณ€ํ™”๋œ ์ƒํƒœ๋ฅผ ๋ฐ˜์˜ํ•˜๊ธฐ ์œ„ํ•ด ๋ธŒ๋ผ์šฐ์ €๋Š” ๋‹ค์‹œ ๋ Œ๋”๋งํ•˜๊ฒŒ ๋œ๋‹ค. ๋ Œ๋”๋งํ•˜๋Š” ๊ณผ์ •์—์„œ Layout์„ ์žฌ๊ณ„์‚ฐํ•˜๋Š” ๊ณผ์ •์€ ๋น„์šฉ์ด ์†Œ์š”๋˜๊ณ  ์‹œ๊ฐ„ ์†Œ์š”๊ฐ€ ๋“œ๋Š” ๊ณผ์ •์ด๋‹ค. ์ดˆ๊ธฐ์˜ ์›นํŽ˜์ด์ง€์—์„œ๋Š” DOM์„ ์กฐ์ž‘ํ•˜๋Š” ๊ณผ์ •์ด ๋งŽ์ง€ ์•Š์•˜์ง€๋งŒ ํ˜„๋Œ€ ๋™์ ์ธ ์›น์€ ์‚ฌ์šฉ์ž์™€์˜ ๊ต๋ฅ˜๊ฐ€ ํ™œ๋ฐœํ•˜๊ฒŒ ์ผ์–ด๋‚˜๊ธฐ์— DOM์„ ์กฐ์ž‘ํ•ด์•ผํ•˜๋Š” ์ƒํ™ฉ์ด ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค. ์žฆ์€ ๋ Œ๋”๋ง์œผ๋กœ Reflow ํ˜„์ƒ ๊ณ„์† ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ์„ฑ๋Šฅ์ €ํ•˜์˜ ์›์ธ์ด ๋˜๊ฒŒ ๋œ๋‹ค. ์„ฑ๋Šฅ์ €ํ•˜๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ฒฐ๊ตญ DOM์„ ์ตœ์†Œํ•œ์œผ๋กœ ์ˆ˜์ •ํ•ด์•ผ ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ์ ์„ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด React๋Š” Virtual DOM์„ ํƒ„์ƒํ•˜๊ฒŒ ํ–ˆ๋‹ค.

๐Ÿ“– Virtual DOM๋ž€?

  • ์‹ค์ œ DOM์˜ ๊ตฌ์กฐ์™€ ๋น„์Šทํ•œ, React ๊ฐ์ฒด์˜ ํŠธ๋ฆฌ

  • Virtual DOM์— ๋ณ€๊ฒฝ ๋‚ด์—ญ์„ ํ•œ ๋ฒˆ์— ๋ชจ์œผ๊ณ (๋ฒ„ํผ๋ง) ์‹ค์ œ DOM๊ณผ ๋ณ€๊ฒฝ๋œ Virtual DOM์˜ ์ฐจ์ด๋ฅผ ํŒ๋‹จํ•œ ํ›„, ๊ตฌ์„ฑ์š”์†Œ์˜ ๋ณ€๊ฒฝ์ด ๋ถ€๋ถ„๋งŒ ์ฐพ์•„ ๋ณ€๊ฒฝํ•˜๊ณ  ๊ทธ์— ๋”ฐ๋ฅธ ๋ Œ๋”๋ง์„ ํ•œ ๋ฒˆ๋งŒ ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ Œ๋”๋ง ๋ฌธ์ œ๋ฅผ ๊ฐœ์„ ํ–ˆ๋‹ค.

Reconciliation(์žฌ์กฐ์ •)๊ณผ์ •์€ ๋ฌด์—‡์ธ๊ฐ€?

UI์˜ ๊ฐ€์ƒ์ ์ธ ํ‘œํ˜„์„ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜๊ณ  React DOM๊ณผ ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์˜ํ•ด ์‹ค์ œ DOM๊ณผ ๋™๊ธฐํ™”ํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜์ž„ ๊ฐœ๋…

Virtual DOM์„ ์‚ฌ์šฉํ•˜๋ฉด ์‹ค์ œ DOM์— ์ ‘๊ทผํ•˜๋ฉฐ ์กฐ์ž‘ํ•˜๋Š” ๋Œ€์‹ , ์ด๋ฅผ ์ถ”์ƒํ™”ํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด๋ฅผ ๊ตฌ์„ฑํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค. DOM์˜ ์ƒํƒœ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜๊ณ , ๋ณ€๊ฒฝ ์ „๊ณผ ๋ณ€๊ฒฝ ํ›„์˜ ์ƒํƒœ๋ฅผ ๋น„๊ต ํ•œ๋’ค ์ตœ์†Œํ•œ์˜ ๋‚ด์šฉ๋งŒ ๋ฐ˜์˜ํ•˜์—ฌ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์ด๋Œ์–ด๋‚ธ๋‹ค. DOM์˜ ์ƒํƒœ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ ์œ„์— ๊ณ„์† ์˜ฌ๋ ค๋‘๊ณ , DOM์— ๋ณ€๊ฒฝ ์žˆ์„ ๊ฒฝ์šฐ ํ•ด๋‹น ๋ณ€๊ฒฝ ์‚ฌํ•ญ๋งŒ ๋ฐ˜์˜ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

โœ๐Ÿป VirtualDOM์— ๋Œ€ํ•œ ์ •๋ฆฌ

  • React์˜ VirtualDOM์€ ์‹ค์ œ DOM ๋ Œ๋”๋ง ๊ณผ์ •์„ ์ตœ์†Œํ•œ์œผ๋กœ ์—ฐ์‚ฐํ•˜๊ฒŒ ํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ €์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ ํ•ด์ค€๋‹ค.

    • Virtual DOM์€ ๋น„๊ต(DIFF)๋ฅผ ํ†ตํ•ด ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„๋งŒ ์ผ๋ถ€๋ถ„์„ ์‹ค์ œ DOM์— ๋ฐ˜์˜ํ•˜์—ฌ ๋ Œ๋”๋งํ•˜๊ฒŒ ํ•œ๋‹ค.

  • VirtualDOM์€ ์ถ”์ƒํ™”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ง๊ด€์ ์œผ๋กœ ํ™•์ธ ํ•  ์ˆœ ์—†์ง€๋งŒ, DOM์ด ๋ณ€ํ™”๋œ ๋ถ€๋ถ„์„ ๊ฐ์ง€ํ•˜๊ณ  ์‹ค์ œ DOM์— ๋™๊ธฐํ™” ํ•ด์คŒ์œผ๋กœ์„œ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ๊ฐ€๋Šฅํ•œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“œ๋Š”๊ฒƒ์„ ๋„์™€์ฃผ๊ณ  ์ถฉ๋ถ„ํžˆ ๋น ๋ฅด๊ฒŒ ํ•ด์ค€๋‹ค.

  • ๋ฆฌ์•กํŠธ์˜ ์ƒ์‚ฐ์„ฑ(์ž๋™ํ™”๋ฐ์ถ”์ƒํ™”)์„ ๊ทน๋Œ€ํ™” ํ•˜๊ธฐ ์œ„ํ•ด์„  ์ตœ์ ํ™” ํ•˜๋Š” ์ž‘์—…์ด ํ•„์š”ํ•˜๋””.

๐Ÿ”— ์ฐธ๊ณ 

๐Ÿ“ˆ React ์„ฑ๋Šฅ ์ตœ์ ํ™”

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

  1. ๋ถˆํ•„์š”ํ•œ ๋ฆฌ๋ Œ๋”๋ง ํ”ผํ•˜๊ธฐ

    • shouldComponentUpdate๋ผ์ดํ”„ ์‚ฌ์ดํด ๋ฉ”์†Œ๋“œ,React.memo ์‚ฌ์šฉํ•ด์„œ ๋ถˆํ•„์š”ํ•œ ๋ฆฌ๋ Œ๋”๋ง ๋ฐฉ์ง€

  2. list ๋ Œ๋”๋ง ์‹œ key ์†์„ฑ ์‚ฌ์šฉ

    • key๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ณ€๊ฒฝ๋œ ํ•ญ๋ชฉ, ์ƒˆ๋กœ์šด ํ•ญ๋ชฉ ๋˜๋Š” ์‚ญ์ œ๋œ ํ•ญ๋ชฉ์„ ๋น ๋ฅด๊ฒŒ ์‹๋ณ„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

  3. ์ปดํฌ๋„ŒํŠธ์˜ ์ง€์—ฐ ๋กœ๋”ฉ

    • ํ•„์š”ํ•˜์ง€ ์•Š์€ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ React.lazy()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง€์—ฐ ๋กœ๋”ฉ ์ดˆ๊ธฐ๋กœ๋“œํ•ด์•ผ ํ•˜๋Š” ์ฝ”๋“œ์–‘์„ ์ค„์–ด๋“ค์–ด ๋” ๋น ๋ฅธ ๋กœ๋“œ ์‹œ๊ฐ„์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

  4. ๋ฐฐํฌ ์‹œ ํ”„๋กœ๋•์…˜ ๋นŒ๋“ฑ ์‚ฌ์šฉ

    • ๊ฐœ๋ฐœ์šฉ React ๋นŒ๋“œ์—๋Š” ๊ฐœ๋ฐœ ์ค‘์— ๋„์›€์ด ๋˜๋Š” ์ถ”๊ฐ€ ๊ฒฝ๊ณ ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์ง€๋งŒ, ์‹ค์ œ๋กœ ์•ฑ์„ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ๋ถˆํ•„์š”ํ•˜๋ฉฐ ์•ฑ ์„ฑ๋Šฅ์„ ์ €ํ•˜์‹œํ‚ด

  5. ์•ฑ์˜ ์„ฑ๋Šฅ ํ”„๋กœํŒŒ์ผ๋ง

    • React DevTools์˜ Profiler ํƒญ์„ ์‚ฌ์šฉํ•˜์—ฌ ์•ฑ์˜ ๋ Œ๋”๋ง "๋น„์šฉ"์„ ์ธก์ •ํ•˜๊ณ  ์ตœ์ ํ™”๊ฐ€ ํ•„์š”ํ•œ ๋ถ€๋ถ„์„ ์‹๋ณ„

๐Ÿ”ฅ ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•œ ์ „๋žต

  • ๋ณ‘๋ชฉ ํ˜„์ƒ ์‹๋ณ„ ๋ฐ ์ˆ˜์ •

    • React Developer Tools์˜ Profiler ์‚ฌ์šฉํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ๋ฆฌ๋ Œ๋”๋ง์ด๋‚˜ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ๋“ฑ์˜ ๋ณ‘๋ชฉ ํ˜„์ƒ์„ ์‹๋ณ„ํ•œ๋‹ค.

  • ๋ฉ”๋ชจ์ด์ œ์ด์…˜

    • ๋™์ผํ•œ props๋ฅผ ๊ฐ€์ง„ ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ์˜ ๋ถˆํ•„์š”ํ•œ ๋‹ค์‹œ ๋ Œ๋”๋ง์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด React.memo๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

  • useCallback

    • ์˜์กด์„ฑ ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ๋งŒ ๋ณ€๊ฒฝ๋˜๋Š” ๋ฉ”๋ชจ์ด์ œ์ด์…˜๋œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด useCallback์„ ์‚ฌ์šฉํ•œ๋‹ค.

  • useMemo

    • ์˜์กด์„ฑ ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ๋งŒ ๋‹ค์‹œ ๊ณ„์‚ฐ๋˜๋Š” ๋ฉ”๋ชจ์ด์ œ์ด์…˜๋œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด useMemo์„ ์‚ฌ์šฉํ•œ๋‹ค.

  • ์ง€์—ฐ ๋กœ๋”ฉ๊ณผ ์ฝ”๋“œ ๋ถ„ํ• 

    • React.lazy์™€ Suspense๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ ๋ถ„ํ• ๊ณผ ์ง€์—ฐ ๋กœ๋”ฉ์„ ๊ตฌํ˜„ํ•˜์—ฌ ์ดˆ๊ธฐ ๋ฒˆ๋“ค ํฌ๊ธฐ๋ฅผ ์ค„์ด๊ณ  ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

๐Ÿ”— ์ฐธ๊ณ 

React Developer Tools

๐Ÿ› ๏ธ React Developer Tools

  • ํ™•์žฅํ”„๋กœ๊ทธ๋žจ์„ ํ†ตํ•ด React ์ปดํฌ๋„ŒํŠธ์˜ ๊ตฌ์กฐ๋ฅผ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋Š” profiler๋ฅผ ํ†ตํ•ด ์„ฑ๋Šฅ ์ฒดํฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋Š” ๋„๊ตฌ์ด๋‹ค.

React Devloper Tools

๐Ÿ“– React StrictMode๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ์—„๊ฒฉ ๋ชจ๋“œ๊ฐ€ ์žˆ๋‹ค. ์ฝ”๋“œ ํŒŒ์ผ ์ƒ๋‹จ์— "use strict"๋ฅผ ์จ ๋†“์œผ๋ฉด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์กฐ๊ธˆ ๋” ์—„๊ฒฉํ•˜๊ฒŒ ์ฝ”๋“œ๋ฅผ ๊ฒ€์‚ฌํ•œ๋‹ค. ๋ฆฌ์•กํŠธ์—๋„ ์ด์™€ ์œ ์‚ฌํ•œ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” <StrictMode />๋ผ๋Š” ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์žˆ๋‹ค.

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด์˜ ์ž ์žฌ์ ์ธ ๋ฌธ์ œ๋ฅผ ์•Œ์•„๋‚ด๊ธฐ ์œ„ํ•œ ๋„๊ตฌ

  • Fragment์™€ ๊ฐ™์ด UI๋ฅผ ๋ Œ๋”๋งํ•˜์ง€ ์•Š์œผ๋ฉฐ, ์ž์†๋“ค์— ๋Œ€ํ•œ ๋ถ€๊ฐ€์ ์ธ ๊ฒ€์‚ฌ์™€ ๊ฒฝ๊ณ ๋ฅผ ํ™œ์„ฑํ™”ํ•œ๋‹ค.

  • Strict ๋ชจ๋“œ๋Š” ๊ฐœ๋ฐœ ๋ชจ๋“œ์—์„œ๋งŒ ํ™œ์„ฑํ™”๋˜๊ธฐ ๋•Œ๋ฌธ์—, ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ์—๋Š” ์˜ํ–ฅ์„ ๋ผ์น˜์ง€ ์•Š๋Š”๋‹ค.

  • StrictMode๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ๋ถ€๋ถ„์—์„œ ๋„์›€์ด ๋œ๋‹ค.

    • ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ ๋ฐœ๊ฒฌ

    • ๋ ˆ๊ฑฐ์‹œ ๋ฌธ์ž์—ด ref ์‚ฌ์šฉ์— ๋Œ€ํ•œ ๊ฒฝ๊ณ 

    • ๊ถŒ์žฅ๋˜์ง€ ์•Š๋Š” findDOMNode ์‚ฌ์šฉ์— ๋Œ€ํ•œ ๊ฒฝ๊ณ 

    • ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋ถ€์ž‘์šฉ ๊ฒ€์‚ฌ

    • ๋ ˆ๊ฑฐ์‹œ context API ๊ฒ€์‚ฌ

    • Ensuring reusable state

Strict ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฆฌ์•กํŠธ๊ฐ€ ์ž์‹ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฒ€์‚ฌํ•˜๊ณ  ์ž˜๋ชป ์‚ฌ์šฉ๋œ ๋ถ€๋ถ„์„ ์šฐ๋ฆฌ์—๊ฒŒ ์•Œ๋ ค์ค€๋‹ค. ์ด๋Ÿฐ ๊ฒฝ๊ณ  ๋ฉ”์„ธ์ง€๋“ค์€ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ž ์žฌ๋œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค.

๐Ÿ”— ์ฐธ๊ณ 

Last updated