# [[Reflow and Repaint|Reflow and Repaint]] ## ๐Ÿ“Œ Brief Summary Reflow(๋ฆฌํ”Œ๋กœ์šฐ)๋Š” ์š”์†Œ์˜ ๋„ˆ๋น„, ๋†’์ด ๋“ฑ ๋ ˆ์ด์•„์›ƒ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•  ๋•Œ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํŽ˜์ด์ง€์˜ ๊ตฌ์กฐ๋ฅผ ๋‹ค์‹œ ๊ณ„์‚ฐํ•˜๋Š” ๊ณผ์ •์ด๋ฉฐ, Repaint(๋ฆฌํŽ˜์ธํŠธ)๋Š” ๋ฐฐ๊ฒฝ์ƒ‰ ๋“ฑ ์‹œ๊ฐ์  ์š”์†Œ๋งŒ ๋ณ€๊ฒฝ๋  ๋•Œ ๋ ˆ์ด์•„์›ƒ ๊ณ„์‚ฐ ์—†์ด ํ™”๋ฉด์„ ๋‹ค์‹œ ๊ทธ๋ฆฌ๋Š” ์ž‘์—…์ž…๋‹ˆ๋‹ค [1, 2]. ์ด ๋‘ ๊ณผ์ •์€ ๋น„์šฉ์ด ๋งŽ์ด ๋“œ๋Š” ์ž‘์—…์œผ๋กœ ๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ์„ฑ๋Šฅ์— ํฐ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋ฉฐ, ํŠนํžˆ ์• ๋‹ˆ๋ฉ”์ด์…˜์ด๋‚˜ ๋™์  UI๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ์„ฑ๋Šฅ ์ €ํ•˜์™€ ๋ฒ„๋ฒ…๊ฑฐ๋ฆผ(Jank)์˜ ์ฃผ๋œ ์›์ธ์ด ๋ฉ๋‹ˆ๋‹ค [1, 3, 4]. ๋”ฐ๋ผ์„œ ์œ ์ง€๋ณด์ˆ˜ ๊ฐ€๋Šฅํ•˜๊ณ  ํ™•์žฅ์„ฑ ์žˆ๋Š” CSS๋ฅผ ์„ค๊ณ„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฆฌํ”Œ๋กœ์šฐ์™€ ๋ฆฌํŽ˜์ธํŠธ๋ฅผ ์ตœ์†Œํ™”ํ•˜๋Š” ๋ Œ๋”๋ง ์ตœ์ ํ™” ์ „๋žต์ด ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค [5-7]. ## ๐Ÿ“– Core Content * **Reflow์™€ Repaint์˜ ๊ฐœ๋…** * **Repaint:** ์š”์†Œ์˜ ๊ฐ€์‹œ์„ฑ(visibility), ๋ฐฐ๊ฒฝ์ƒ‰(background color), ์œค๊ณฝ์„ (outline) ๋“ฑ ๋ ˆ์ด์•„์›ƒ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š” ์‹œ๊ฐ์  ์Šคํ‚จ์˜ ๋ณ€ํ™”๊ฐ€ ์ƒ๊ธธ ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค [1, 2]. ๋ธŒ๋ผ์šฐ์ €๋Š” DOM ํŠธ๋ฆฌ์— ์žˆ๋Š” ๋‹ค๋ฅธ ๋…ธ๋“œ๋“ค์˜ ๊ฐ€์‹œ์„ฑ๊นŒ์ง€ ํ™•์ธํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๋น„์šฉ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค [2]. * **Reflow:** ์š”์†Œ์˜ ํฌ๊ธฐ(width, height), ์—ฌ๋ฐฑ(margin, padding), ์œ„์น˜(left, top ๋“ฑ) ๋“ฑ ๋ ˆ์ด์•„์›ƒ ๊ธฐํ•˜ํ•™์ด ๋ณ€๊ฒฝ๋  ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค [3, 8]. ํ•ด๋‹น ์š”์†Œ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ž์‹ ์š”์†Œ, ์กฐ์ƒ ์š”์†Œ, ๊ทธ๋ฆฌ๊ณ  DOM ํŠธ๋ฆฌ์—์„œ ๊ทธ ๋’ค์— ์˜ค๋Š” ์š”์†Œ๋“ค๊นŒ์ง€ ์—ฐ์‡„์ ์œผ๋กœ ๋ฆฌํ”Œ๋กœ์šฐ๋ฅผ ์œ ๋ฐœํ•˜๋ฏ€๋กœ ์ „์ฒด ํŽ˜์ด์ง€๋ฅผ ๋‹ค์‹œ ๋ฐฐ์น˜ํ•˜๋Š” ๊ฒƒ๊ณผ ๋งž๋จน๋Š” ๋†’์€ ๋น„์šฉ์ด ๋“ญ๋‹ˆ๋‹ค [2, 4]. * **์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์œ ๋ฐœํ•˜๋Š” ์ฃผ์š” ์›์ธ** * ์ฐฝ ํฌ๊ธฐ ์กฐ์ ˆ, ํฐํŠธ ๋ณ€๊ฒฝ, DOM ์Šคํฌ๋ฆฝํŠธ ์กฐ์ž‘, CSS ๊ฐ€์ƒ ํด๋ž˜์Šค(`:hover` ๋“ฑ) ํ™œ์„ฑํ™”, ํด๋ž˜์Šค ์†์„ฑ ๋ณ€๊ฒฝ, `offsetWidth` ๋ฐ `offsetHeight` ๊ณ„์‚ฐ ๋“ฑ ๋‹ค์–‘ํ•œ ์ž‘์—…์ด ๋ฆฌํ”Œ๋กœ์šฐ๋ฅผ ์œ ๋ฐœํ•ฉ๋‹ˆ๋‹ค [9, 10]. * DOM์„ ์ฝ๊ณ  ์“ฐ๋Š” ์ž‘์—…์„ ์งง์€ ๋ฃจํ”„ ์•ˆ์—์„œ ์—ฐ์†์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๊ฐ•์ œ๋กœ ๋™๊ธฐ์  ๋ฆฌํ”Œ๋กœ์šฐ๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ๋ ˆ์ด์•„์›ƒ ์Šค๋ž˜์‹ฑ([[Layout Thrashing|Layout Thrashing]])์ด ๋ฐœ์ƒํ•˜์—ฌ ํ”„๋ ˆ์ž„ ์†๋„๊ฐ€ ํฌ๊ฒŒ ์ €ํ•˜๋ฉ๋‹ˆ๋‹ค [11, 12]. * ํฌ๊ธฐ๋‚˜ ์—ฌ๋ฐฑ ๊ฐ™์€ ๋ ˆ์ด์•„์›ƒ ์†์„ฑ์„ ์• ๋‹ˆ๋ฉ”์ด์…˜์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ Œ๋”๋ง ์—”์ง„์„ ๋งค ํ”„๋ ˆ์ž„๋งˆ๋‹ค ํ˜ธ์ถœํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์„ฑ๋Šฅ์— ์น˜๋ช…์ ์ž…๋‹ˆ๋‹ค [1, 3]. * **Reflow ๋ฐ Repaint ์ตœ์ ํ™”(๊ฐ์†Œ) ๊ธฐ๋ฒ•** * **GPU ๊ฐ€์† ํ™œ์šฉ:** ๋ ˆ์ด์•„์›ƒ์„ ๋ณ€๊ฒฝํ•˜๋Š” ์†์„ฑ ๋Œ€์‹  `transform`๊ณผ `opacity`๋ฅผ ์• ๋‹ˆ๋ฉ”์ด์…˜์— ์‚ฌ์šฉํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๊ฐ’๋น„์‹ผ Layout๊ณผ Paint ๋‹จ๊ณ„๋ฅผ ๊ฑด๋„ˆ๋›ฐ๊ณ  GPU์—์„œ ํ•ฉ์„ฑ(Compositing)๋งŒ ์ฒ˜๋ฆฌํ•˜๋ฏ€๋กœ ์„ฑ๋Šฅ์ด ํฌ๊ฒŒ ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค [8, 13, 14]. * **DOM ๋ณ€๊ฒฝ ๋ฐ ์Šคํƒ€์ผ ์ ์šฉ ์ตœ์†Œํ™”:** ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ธ๋ผ์ธ ์Šคํƒ€์ผ์„ ๊ฐ๊ฐ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์„ ํ”ผํ•˜๊ณ , ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ฌถ์–ด CSS ํด๋ž˜์Šค๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [15, 16]. ๋˜ํ•œ ๋ฆฌํ”Œ๋กœ์šฐ์˜ ํŒŒ๊ธ‰ ๋ฒ”์œ„๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด DOM ํŠธ๋ฆฌ์˜ ๊ฐ€๋Šฅํ•œ ๊ฐ€์žฅ ๋‚ฎ์€ ํ•˜์œ„ ๋…ธ๋“œ์—์„œ ํด๋ž˜์Šค๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [17]. * **๋ฌธ์„œ ํ๋ฆ„(Flow) ๋ถ„๋ฆฌ:** ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ์ ์šฉ๋˜๋Š” ์š”์†Œ์—๋Š” `position: fixed` ๋˜๋Š” `absolute`๋ฅผ ์ ์šฉํ•˜์—ฌ ์ฃผ๋ณ€ ์š”์†Œ์˜ ๋ ˆ์ด์•„์›ƒ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ณ  ๋ฆฌํŽ˜์ธํŠธ๋งŒ ๋ฐœ์ƒํ•˜๋„๋ก ์œ ๋„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [15]. * **ํ…Œ์ด๋ธ” ๋ ˆ์ด์•„์›ƒ ์ง€์–‘:** ํ…Œ์ด๋ธ”์€ ์•„์ฃผ ์ž‘์€ ๋ณ€ํ™”์—๋„ ๋‚ด๋ถ€์˜ ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ๋ฆฌํ”Œ๋กœ์šฐ๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๊ณ , ์ „์ฒด ์ฝ˜ํ…์ธ ๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ๋ฒˆ์˜ ๋ Œ๋”๋ง ํŒจ์Šค๊ฐ€ ํ•„์š”ํ•˜๋ฏ€๋กœ ๋ ˆ์ด์•„์›ƒ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค [18]. * **๋ Œ๋”๋ง ํžŒํŠธ ์ œ๊ณต:** ๋ณ€๊ฒฝ์ด ๋นˆ๋ฒˆํ•˜๊ฒŒ ์ผ์–ด๋‚  ์š”์†Œ์—๋Š” `will-change` ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ฏธ๋ฆฌ ๋ Œ๋”๋ง ์ตœ์ ํ™”๋ฅผ ์ค€๋น„ํ•˜๋„๋ก ์ง€์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [12, 19]. * **์• ๋‹ˆ๋ฉ”์ด์…˜ ์ฃผ๊ธฐ์˜ ๋™๊ธฐํ™”:** `requestAnimationFrame`์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋ธŒ๋ผ์šฐ์ €์˜ ๊ธฐ๋ณธ ๋ฆฌํŽ˜์ธํŠธ ์ฃผ๊ธฐ์™€ ๋™๊ธฐํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [11, 12]. ## ๐Ÿ”— Knowledge Connections - **Related Topics:** [[CSS Animations|CSS Animations]], Layout Thrashing, GPU Acceleration (Compositing), [[CSS Architecture|CSS Architecture]] - **Projects/Contexts:** ์• ๋‹ˆ๋ฉ”์ด์…˜ (transition / keyframes) ์„ฑ๋Šฅ ์ตœ์ ํ™”, [[แ„‰แ…ตแ†ฏแ„†แ…ฎแ„‹แ…ฆแ„‰แ…ฅ CSS แ„€แ…ชแ†ซแ„…แ…ตแ„’แ…กแ„‚แ…ณแ†ซ แ„‡แ…กแ†ผแ„‡แ…ฅแ†ธ|์‹ค๋ฌด์—์„œ CSS ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•]] - **Contradictions/Notes:** ๋ธŒ๋ผ์šฐ์ € ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ๋•๋Š” `will-change` ์†์„ฑ์€ ์œ ์šฉํ•˜์ง€๋งŒ, ์ตœํ›„์˜ ์ˆ˜๋‹จ์œผ๋กœ๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์„ฑ๋Šฅ ๋ฌธ์ œ ์˜ˆ์ธก์šฉ์œผ๋กœ ๋ฌด๋ถ„๋ณ„ํ•˜๊ฒŒ ๋„ˆ๋ฌด ๋งŽ์€ ์š”์†Œ์— ๋‚จ์šฉํ•  ๊ฒฝ์šฐ, ๊ณผ๋„ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ ๋“ฑ ๊ทธ ์ž์ฒด๋กœ ์‹ฌ๊ฐํ•œ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๊ฒฝ๊ณ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค [19, 20]. --- *Last updated: 2026-04-26*