๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ—‚ WIL/๐Ÿ“ React

requestAnimationFrame ์œผ๋กœ ํ”„๋ ˆ์ž„ ํƒ€์ด๋ฐ ๋งž์ถ”๊ธฐ

by nalong 2025. 3. 30.

๐ŸŽจ ๊ธ€์— ๋“ค์–ด๊ฐ€๊ธฐ ์•ž์„œ ๋ธŒ๋ผ์šฐ์ €๋Š” ํ™”๋ฉด์„ ๊ทธ๋ฆด ๋•Œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค. 

  1. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰
  2. DOM ๋ณ€๊ฒฝ ๊ฐ์ง€
  3. ์Šคํƒ€์ผ ๊ณ„์‚ฐ
  4. Layout (Reflow) – ์š”์†Œ์˜ ์œ„์น˜์™€ ํฌ๊ธฐ๋ฅผ ๊ณ„์‚ฐ
  5. Paint – ๊ณ„์‚ฐ๋œ ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ํ”ฝ์…€์„ ๊ทธ๋ฆฌ๊ธฐ
  6. Composite – ๋ ˆ์ด์–ด๋ฅผ ์กฐํ•ฉํ•ด ์ตœ์ข…์ ์œผ๋กœ ํ™”๋ฉด์— ์ถœ๋ ฅ

์œ„ ์‚ฌ์ดํด์€ ๋ณดํ†ต 1์ดˆ์— 60๋ฒˆ, ์•ฝ 16.6ms๋งˆ๋‹ค ๋ฐ˜๋ณต๋˜๋ฉฐ, ๋ธŒ๋ผ์šฐ์ €๋Š” ์ด ์ฃผ๊ธฐ์— ๋งž์ถฐ ์ตœ๋Œ€ํ•œ ๋ถ€๋“œ๋Ÿฝ๊ฒŒ ํ™”๋ฉด์„ ๋ Œ๋”๋ง์„ ํ•˜๋Š”๋ฐ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ DOM์„ ์กฐ์ž‘ํ•˜๊ฑฐ๋‚˜ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ฒ˜๋ฆฌํ•  ๋•Œ ์ด ํƒ€์ด๋ฐ์„ ๊ณ ๋ คํ•˜์ง€ ์•Š์œผ๋ฉด, ํ”„๋ ˆ์ž„ ๋“œ๋กญ, ๋Š๊น€, ๋А๋ ค์ง„ ์ธํ„ฐ๋ž™์…˜ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์‰ฝ๊ฒŒ ๋ฐœ์ƒํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

โœจ requestAnimationFrame ์ด๋ž€?

window.requestAnimationFrame() ๋ฉ”์„œ๋“œ๋Š” ๋ธŒ๋ผ์šฐ์ €์—๊ฒŒ ์ˆ˜ํ–‰ํ•˜๊ธฐ๋ฅผ ์›ํ•˜๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์•Œ๋ฆฌ๊ณ  ๋‹ค์Œ ๋ฆฌํŽ˜์ธํŠธ ๋ฐ”๋กœ ์ „์— ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์—…๋ฐ์ดํŠธํ•  ์ง€์ •๋œ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋„๋ก ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฉ”์„œ๋“œ๋Š” ๋ฆฌํŽ˜์ธํŠธ ์ด์ „์— ํ˜ธ์ถœํ•  ์ธ์ˆ˜๋กœ ์ฝœ๋ฐฑ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค.

 
requestAnimationFrame() ์€ ์œ„์—์„œ ๋งํ•œ ๊ทธ ํƒ€์ด๋ฐ์„ ๊ณ ๋ คํ•˜๋Š” ๋ฉ”์„œ๋“œ๋‹ค. 
๋ธŒ๋ผ์šฐ์ €์˜ ๋ Œ๋”๋ง ์ฃผ๊ธฐ ์•ˆ์—์„œ ๊ฐ€์žฅ ์ ์ ˆํ•œ ํƒ€์ด๋ฐ์— ์ฝœ๋ฐฑ์„ ์‹คํ–‰ํ•ด ์ฃผ๋ฉฐ, DOM ๋ณ€๊ฒฝ์ด๋‚˜ ์Šคํƒ€์ผ ์—…๋ฐ์ดํŠธ ๊ฐ™์€ ์ž‘์—…์„ ์ด ์‹œ์ ์— ๋งž์ถฐ ์‹คํ–‰ํ•˜๋ฉด ๋ถˆํ•„์š”ํ•œ Reflow๋‚˜ Paint๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๊ณ , ๊ฒฐ๊ณผ์ ์œผ๋กœ ํผํฌ๋จผ์Šค๊ฐ€ ํ–ฅ์ƒ๋œ๋‹ค๊ณ  ํ•œ๋‹ค.
 
๋‚˜์˜ ๊ฒฝ์šฐ, ์ „์— ๊ฐœ๋ฐœํ•˜๋˜ ์—ํ”ฝ์—์„œ ๋งˆ์šฐ์Šค๋กœ ๋น ๋ฅด๊ฒŒ ๋“œ๋ž˜๊ทธํ•  ๋•Œ ๋ฌ˜ํ•˜๊ฒŒ ํƒํƒ ๋Š๊ธฐ๋Š” ๋А๋‚Œ์ด ๋“ค์–ด์„œ ํ•ด๋‹น ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•ด ์ฐพ์•„๋ณด๊ฒŒ ๋˜์—ˆ๋‹ค. requestAnimationFrame์„ ์ ์šฉํ•˜๊ณ  ๋‚˜์„œ ํ•ด๋‹น ํ˜„์ƒ์ด ์‚ฌ๋ผ์กŒ๊ณ , ์ฒด๊ฐ์ƒ์œผ๋กœ๋„ ํ›จ์”ฌ ๋ถ€๋“œ๋Ÿฝ๊ฒŒ ์ž‘๋™ํ–ˆ๋‹ค. ๋‹ค๋งŒ ๋ธ”๋กœ๊ทธ์— ์ •๋ฆฌํ•  ๋•Œ,  ์ ์šฉ ์ „ ํ›„๊ฐ€ ์˜์ƒ์œผ๋กœ๋Š” ์ฐจ์ด๊ฐ€ ์ž˜ ๋“œ๋Ÿฌ๋‚˜์ง€ ์•Š์•„ ์–ด๋–ป๊ฒŒ ๋น„๊ตํ•ด ๋ณผ์ง€ ๊ณ ๋ฏผ์ด ๋งŽ์•˜๋Š”๋ฐ, ๐Ÿค– ์˜ ์ถ”์ฒœ์˜ Performance ํƒญ์„ ์ข€ ๋” ๊นŠ๊ฒŒ ๋“ค์—ฌ๋‹ค๋ณด๊ฒŒ ๋˜์—ˆ๋‹ค.

๐Ÿ“ˆ ์„ฑ๋Šฅ ๋น„๊ต

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

๐Ÿค” ๋А๋‚€์ 

์• ๋งคํ•˜๊ฒŒ ๋А๊ปด์ง€๋Š” ์ž‘์€ ๋Š๊น€์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์‹œ์ž‘ํ–ˆ๋˜ ๋ฌธ์ œ์˜€์ง€๋งŒ, ๊ธ€์„ ์ ๋‹ค ๋ณด๋‹ˆ ๊ฒฐ๊ตญ "์–ธ์ œ ์‹คํ–‰๋˜๋Š”๊ฐ€"๊ฐ€ ์„ฑ๋Šฅ์—์„œ ์–ผ๋งˆ๋‚˜ ์ค‘์š”ํ•œ์ง€๋ฅผ ์ฒด๊ฐํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. requestAnimationFrame์€ ๋‹จ์ˆœํžˆ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋ถ€๋“œ๋Ÿฝ๊ฒŒ ํ•ด์ฃผ๋Š” ์œ ํ‹ธ์„ฑ API๊ฐ€ ์•„๋‹ˆ๋ผ, ๋ธŒ๋ผ์šฐ์ €์˜ ๋ Œ๋”๋ง ํƒ€์ด๋ฐ๊ณผ ๋‚ด ์ฝ”๋“œ์˜ ์‹คํ–‰ ์‹œ์ ์„ ๋งž์ถฐ์ฃผ๋Š” ์ตœ์ ํ™” ๋„๊ตฌ๋‹ค. ๋งŒ์•ฝ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋„์ค‘ ๋Š๊น€์ด๋‚˜ ๋ฒ„๋ฒ…๊ฑฐ๋ฆผ์ด ๋А๊ปด์ง„๋‹ค๋ฉด, ๊ฐ€์žฅ ๋จผ์ €, ๊ทธ๋ฆฌ๊ณ  ๊ฐ„๋‹จํ•˜๊ฒŒ ์‹œ๋„ํ•ด ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์•„๋‹๊นŒ ์‹ถ๋‹ค.