React 18 useDeferredValue ์‹ฌํ™”: ๊ฒ€์ƒ‰ ์ž๋™์™„์„ฑ์—์„œ ๋””๋ฐ”์šด์‹ฑ์„ ์ œ๊ฑฐํ•˜๋Š” ์ด์œ 

React 18 useDeferredValue ์‹ฌํ™”: ๊ฒ€์ƒ‰ ์ž๋™์™„์„ฑ์—์„œ ๋””๋ฐ”์šด์‹ฑ์„ ์ œ๊ฑฐํ•˜๋Š” ์ด์œ 

๐Ÿš€ Chrome DevTools๋กœ ์›น ์„ฑ๋Šฅ ๋ณ‘๋ชฉํ˜„์ƒ ์žก์•„๋‚ด๊ธฐ

์ด๋ฒคํŠธ ๋ถ€ํ•˜ ์ธก์ •๋ถ€ํ„ฐ ๋ถ„์„๊นŒ์ง€, Performance ํƒญ ์ •๋ณต ๊ฐ€์ด๋“œ

"๋‚ด๊ฐ€ ๋งŒ๋“  ์›น ์‚ฌ์ดํŠธ, ์™œ ํด๋ฆญ๋งŒ ํ•˜๋ฉด ๋ฒ„๋ฒ…๊ฑฐ๋ฆด๊นŒ?"
์›น ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค ๋ณด๋ฉด ๋ˆ„๊ตฌ๋‚˜ ํ•œ ๋ฒˆ์ฏค ๋งˆ์ฃผํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.
๋‹จ์ˆœํžˆ ์ฝ”๋“œ๊ฐ€ ๊ธธ์–ด์„œ์ผ๊นŒ์š”, ์•„๋‹ˆ๋ฉด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํž˜๊ฒจ์›Œํ•˜๋Š” ๊ฑธ๊นŒ์š”?
์ •๋‹ต์€ ํฌ๋กฌ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ(Chrome DevTools)์˜ Performance ํƒญ์— ์ˆจ์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
์˜ค๋Š˜์€ ๋ˆˆ์— ๋ณด์ด์ง€ ์•Š๋Š” ์ด๋ฒคํŠธ ๋ถ€ํ•˜๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ํ™•์ธํ•˜๊ณ  ๋ถ„์„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ˆ„๊ตฌ๋‚˜ ๋”ฐ๋ผ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ •๋ฆฌํ•ด ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.



๐Ÿ› ️ 1. Performance ํƒญ ์ค€๋น„ ๋ฐ ์„ค์ •ํ•˜๊ธฐ

์„ฑ๋Šฅ ๋ถ„์„์„ ์œ„ํ•ด์„œ๋Š” ๊ฐ€์žฅ ๋จผ์ € ์ •ํ™•ํ•œ ์ธก์ • ํ™˜๊ฒฝ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.
ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ์ด๋‚˜ ์บ์‹œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ธก์ • ๊ฒฐ๊ณผ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋„๋ก ์‹œํฌ๋ฆฟ ๋ชจ๋“œ(Incognito Mode)์—์„œ ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ ๊ธฐ๋ณธ ์„ค์ • ์ฒดํฌ๋ฆฌ์ŠคํŠธ

  • Screenshots ์ฒดํฌ: ๋…นํ™” ๋„์ค‘ ํ™”๋ฉด ๋ณ€ํ™”๋ฅผ ์Šคํฌ๋ฆฐ์ƒท์œผ๋กœ ๋‚จ๊ฒจ ์‹œ๊ฐ์  ๋ฒ„๋ฒ…์ž„(Jank)์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • Memory ์ฒดํฌ: ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํž™(Heap) ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๊ฐ€ ์—†๋Š”์ง€ ํ•จ๊ป˜ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • CPU Throttling: ๊ณ ์‚ฌ์–‘ PC์—์„œ๋Š” ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ์ž˜ ์•ˆ ๋ณด์ผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, 4x ๋˜๋Š” 6x slowdown์œผ๋กœ ์„ค์ •ํ•˜์—ฌ ๋ชจ๋ฐ”์ผ ํ™˜๊ฒฝ์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•ฉ๋‹ˆ๋‹ค.

์„ค์ •์ด ์™„๋ฃŒ๋˜์—ˆ๋‹ค๋ฉด, ์ด์ œ ์‹ค์ œ ์‚ฌ์šฉ์ž๊ฐ€ ๊ฒช๋Š” ์ƒํ™ฉ์„ ์žฌ์—ฐํ•  ์ค€๋น„๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ”ด 2. ์ด๋ฒคํŠธ ๋ถ€ํ•˜ ๊ธฐ๋ก(Recording) ์‹ค์ „

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

๐Ÿ’ก ์ค‘์š” ํŒ:
๋…นํ™” ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๊ธฐ ์ „, ์ธก์ •ํ•˜๊ณ ์ž ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๋ฏธ๋ฆฌ ์ค€๋น„ํ•ด๋‘์„ธ์š”.
๋ถˆํ•„์š”ํ•œ ๋งˆ์šฐ์Šค ์›€์ง์ž„์ด๋‚˜ ๋Œ€๊ธฐ ์‹œ๊ฐ„์€ ๊ทธ๋ž˜ํ”„ ๋ถ„์„์„ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

๐Ÿ‘ฃ ๋‹จ๊ณ„๋ณ„ ์ธก์ • ๊ฐ€์ด๋“œ

  1. ์ขŒ์ธก ์ƒ๋‹จ์˜ 'Record' (๋™๊ทธ๋ผ๋ฏธ ๋ฒ„ํŠผ)์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  2. ์ธก์ •ํ•˜๋ ค๋Š” ๋™์ž‘(์˜ˆ: ๋ฒ„ํŠผ ํด๋ฆญ, ๋ฆฌ์ŠคํŠธ ์Šคํฌ๋กค ๋“ฑ)์„ 2~3ํšŒ ๋ฐ˜๋ณต ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  3. ๋‹ค์‹œ 'Stop' ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ๋…นํ™”๋ฅผ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.
  4. ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌ(Processing)ํ•˜๋Š” ๋™์•ˆ ์ž ์‹œ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค.

๐Ÿ“Š 3. ๋ถˆ๊ฝƒ ์ฐจํŠธ(Flame Chart) ๋ถ„์„ํ•˜๊ธฐ

๋…นํ™”๊ฐ€ ๋๋‚˜๋ฉด ์•Œ๋ก๋‹ฌ๋กํ•œ ๋ง‰๋Œ€๊ทธ๋ž˜ํ”„๋“ค์ด ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.
์ฒ˜์Œ ๋ณด๋ฉด ๋ณต์žกํ•ด ๋ณด์ด์ง€๋งŒ, ์šฐ๋ฆฌ๊ฐ€ ๋ด์•ผ ํ•  ๊ณณ์€ 'Main' ์„น์…˜์ž…๋‹ˆ๋‹ค.

๐Ÿ” ์ฃผ์š” ์ƒ‰์ƒ๋ณ„ ์˜๋ฏธ

์ƒ‰์ƒ ์˜๋ฏธ ํ•ด๊ฒฐ ๋ฐฉํ–ฅ
๐ŸŸจ ๋…ธ๋ž€์ƒ‰ Scripting (์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰) ์ฝ”๋“œ ์ตœ์ ํ™”, ๋ถˆํ•„์š”ํ•œ ์—ฐ์‚ฐ ์ œ๊ฑฐ
๐ŸŸช ๋ณด๋ผ์ƒ‰ Rendering (์Šคํƒ€์ผ ๊ณ„์‚ฐ, ๋ ˆ์ด์•„์›ƒ) DOM ๋ณ€๊ฒฝ ์ตœ์†Œํ™”, Reflow ๋ฐฉ์ง€
๐ŸŸฉ ์ดˆ๋ก์ƒ‰ Painting (ํ™”๋ฉด ๊ทธ๋ฆฌ๊ธฐ) ํŽ˜์ธํŠธ ์˜์—ญ ์ตœ์ ํ™”, ๋ ˆ์ด์–ด ๋ถ„๋ฆฌ

์ด๋ฒคํŠธ ๋ถ€ํ•˜๊ฐ€ ์‹ฌํ•œ ๊ตฌ๊ฐ„์€ ๊ทธ๋ž˜ํ”„์˜ ๋ง‰๋Œ€๊ฐ€ ๊นŠ๊ณ (Call Stack์ด ๊นŠ์Œ) ๋„“๊ฒŒ(์‹คํ–‰ ์‹œ๊ฐ„์ด ๊ธบ) ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
ํŠนํžˆ ๋ง‰๋Œ€ ์œ„์— ๋นจ๊ฐ„์ƒ‰ ์‚ผ๊ฐํ˜•์ด ํ‘œ์‹œ๋œ๋‹ค๋ฉด, ํ•ด๋‹น ์ž‘์—…์ด ํ”„๋ ˆ์ž„ ๋“œ๋กญ(Frame Drop)์„ ์œ ๋ฐœํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฐ•๋ ฅํ•œ ๊ฒฝ๊ณ ์ž…๋‹ˆ๋‹ค.


๐Ÿฐ 4. Summary ํƒญ์œผ๋กœ ๋ฒ”์ธ ์ƒ‰์ถœํ•˜๊ธฐ

๊ทธ๋ž˜ํ”„์—์„œ ํŠน์ • ๊ตฌ๊ฐ„์„ ๋“œ๋ž˜๊ทธํ•˜์—ฌ ์„ ํƒํ•˜๋ฉด, ํ•˜๋‹จ Summary ํƒญ์—์„œ ์ž‘์—… ์‹œ๊ฐ„์˜ ์ดํ•ฉ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๊ณณ์—์„œ ์–ด๋–ค ์ž‘์—…์ด CPU๋ฅผ ๊ฐ€์žฅ ๋งŽ์ด ์ ์œ ํ–ˆ๋Š”์ง€ ํ•œ๋ˆˆ์— ํŒŒ์•… ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๐Ÿšฉ ๋กฑ ํƒœ์Šคํฌ(Long Task) ์ฃผ์˜๋ณด

๋งŒ์•ฝ 50ms๋ฅผ ์ดˆ๊ณผํ•˜๋Š” ์ž‘์—…(Long Task)์ด ๋ฐœ๊ฒฌ๋œ๋‹ค๋ฉด ์‚ฌ์šฉ์ž๋Š” ํ™”๋ฉด์ด ๋ฉˆ์ถ˜ ๋“ฏํ•œ ๋А๋‚Œ์„ ๋ฐ›๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ๋‚ด๋ถ€์—์„œ ๋ฌด๊ฑฐ์šด ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ฆฌ๊ฑฐ๋‚˜, ๋™๊ธฐ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ์žˆ์ง€ ์•Š์€์ง€ ์ฝ”๋“œ๋ฅผ ์ ๊ฒ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


๐ŸŽ“ ์ตœ์ ํ™”๋Š” ์ธก์ •์—์„œ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค

์ง€๊ธˆ๊นŒ์ง€ Chrome DevTools์˜ Performance ํƒญ์„ ํ™œ์šฉํ•ด ์ด๋ฒคํŠธ ๋ถ€ํ•˜๋ฅผ ์ธก์ •ํ•˜๋Š” ๊ธฐ๋ณธ์ ์ธ ํ๋ฆ„์„ ์‚ดํŽด๋ณด์•˜์Šต๋‹ˆ๋‹ค.
"์ธก์ •ํ•  ์ˆ˜ ์—†์œผ๋ฉด ๊ฐœ์„ ํ•  ์ˆ˜ ์—†๋‹ค"๋ผ๋Š” ๋ง์ฒ˜๋Ÿผ, ๋ง‰์—ฐํžˆ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๊ธฐ๋ณด๋‹ค ์ •ํ™•ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ทผ๊ฑฐ๋กœ ์›€์ง์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿš€ ์˜ค๋Š˜์˜ ํ•ต์‹ฌ ์š”์•ฝ
  • ์‹œํฌ๋ฆฟ ๋ชจ๋“œ์—์„œ ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ ์˜ํ–ฅ ์—†์ด ์ธก์ •ํ•˜์„ธ์š”.
  • CPU Throttling์„ ์‚ฌ์šฉํ•˜์—ฌ ์ €์‚ฌ์–‘ ํ™˜๊ฒฝ์„ ๋Œ€๋น„ํ•˜์„ธ์š”.
  • Main Thread์˜ ๋ถ‰์€์ƒ‰ ๊ฒฝ๊ณ  ํ‘œ์‹œ๋ฅผ ๋†“์น˜์ง€ ๋งˆ์„ธ์š”.
  • Summary ํƒญ์„ ํ†ตํ•ด Scripting, Rendering ์ค‘ ์–ด๋””๊ฐ€ ๋ฌธ์ œ์ธ์ง€ ํŒŒ์•…ํ•˜์„ธ์š”.

๋Œ“๊ธ€ ์“ฐ๊ธฐ