# Reflow / Repaint ## ๐Ÿ“Œ Brief Summary **Reflow(๋ ˆ์ด์•„์›ƒ)**๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํ™”๋ฉด์— ํ‘œ์‹œ๋  DOM ์š”์†Œ๋“ค์˜ ์ •ํ™•ํ•œ ์œ„์น˜์™€ ๊ธฐํ•˜ํ•™์  ํฌ๊ธฐ๋ฅผ ์žฌ๊ณ„์‚ฐํ•˜๋Š” ๊ณผ์ •์ด๋ฉฐ, **Repaint(ํŽ˜์ธํŠธ)**๋Š” ๋ ˆ์ด์•„์›ƒ์˜ ๋ณ€ํ™” ์—†์ด ์š”์†Œ์˜ ์ƒ‰์ƒ์ด๋‚˜ ๊ทธ๋ฆผ์ž ๊ฐ™์€ ์‹œ๊ฐ์  ์†์„ฑ๋งŒ์„ ํ™”๋ฉด์— ๋‹ค์‹œ ๊ทธ๋ฆฌ๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค [1-6]. ์ด ๋‘ ๊ณผ์ •์€ ์›น ํŽ˜์ด์ง€ ๋ Œ๋”๋ง์— ํ•„์ˆ˜์ ์ด์ง€๋งŒ ์—ฐ์‚ฐ ๋น„์šฉ์ด ๋†’์•„ ๊ณผ๋„ํ•˜๊ฒŒ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ ์ €ํ•˜์™€ ๋ฒ„๋ฒ…๊ฑฐ๋ฆผ(Jank)์„ ์œ ๋ฐœํ•˜๋ฏ€๋กœ ํ”„๋ก ํŠธ์—”๋“œ ์ตœ์ ํ™”์˜ ํ•ต์‹ฌ ๋Œ€์ƒ์ด ๋ฉ๋‹ˆ๋‹ค [7-9]. ## ๐Ÿ“– Core Content * **Reflow (Layout) ๊ฐœ๋… ๋ฐ ๋ฐœ์ƒ ์›์ธ** * Reflow๋Š” ๋ฌธ์„œ ํ๋ฆ„ ๋‚ด์—์„œ ์š”์†Œ์˜ ์œ„์น˜, ํฌ๊ธฐ(width, height, margin, padding, border ๋“ฑ)๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค [1, 4, 6]. * DOM ์š”์†Œ์˜ ์ถ”๊ฐ€ ๋ฐ ์ œ๊ฑฐ, ๋ธŒ๋ผ์šฐ์ € ์ฐฝ ํฌ๊ธฐ ์กฐ์ ˆ, ํฐํŠธ ํฌ๊ธฐ ๋ณ€๊ฒฝ, ๋˜๋Š” ๋ ˆ์ด์•„์›ƒ์— ์˜ํ–ฅ์„ ์ฃผ๋Š” CSS ์†์„ฑ ๋ณ€๊ฒฝ ์‹œ ํŠธ๋ฆฌ๊ฑฐ๋ฉ๋‹ˆ๋‹ค [4-6, 10]. * ์›น ๋ฌธ์„œ๋Š” ์—ฐ์†์ ์ธ ํ๋ฆ„์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์–ด, ๋‹จ์ผ ์š”์†Œ์˜ ๊ตฌ์กฐ์  ๋ณ€ํ™”๊ฐ€ ๋ถ€๋ชจ๋‚˜ ์ž์‹ ์š”์†Œ ๋“ฑ DOM ํŠธ๋ฆฌ ์ „์ฒด์— ๊ฑธ์นœ ์žฌ๊ณ„์‚ฐ์„ ์—ฐ์‡„์ ์œผ๋กœ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์—ฐ์‚ฐ ๋น„์šฉ์ด ๋งค์šฐ ๋†’์€ ์‚ฌ์šฉ์ž ์ฐจ๋‹จ(User-[[Blocking|Blocking]]) ์ž‘์—…์ž…๋‹ˆ๋‹ค [1, 3, 5, 6]. * **Repaint (Paint) ๊ฐœ๋… ๋ฐ ๋ฐœ์ƒ ์›์ธ** * Repaint๋Š” ๋ ˆ์ด์•„์›ƒ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ณ , ์š”์†Œ์˜ ๊ฐ€์‹œ์„ฑ, ๋ฐฐ๊ฒฝ์ƒ‰, ํ…์ŠคํŠธ ์ƒ‰์ƒ, ๊ทธ๋ฆผ์ž ๋“ฑ์˜ ์‹œ๊ฐ์  ์Šคํƒ€์ผ๋งŒ ๋ณ€๊ฒฝ๋  ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค [2, 4, 6]. * ๊ธฐํ•˜ํ•™์  ์žฌ๊ณ„์‚ฐ์ด ํ•„์š”ํ•˜์ง€ ์•Š์•„ Reflow๋ณด๋‹ค๋Š” ์ƒ๋Œ€์ ์œผ๋กœ ๋น„์šฉ์ด ์ ์ง€๋งŒ, ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ฒ˜๋ฆฌ ์ค‘ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ์ž์ฃผ ๋ฐœ์ƒํ•˜๋ฉด ์—ฌ์ „ํžˆ ํ”„๋ ˆ์ž„ ๋“œ๋ž์ด๋‚˜ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [7, 9, 11]. * **Reflow / Repaint ์ตœ์†Œํ™” ๋ฐ ๋ Œ๋”๋ง ์ตœ์ ํ™” ๋ฐฉ๋ฒ•** * **DOM ์กฐ์ž‘ ์ผ๊ด„ ์ฒ˜๋ฆฌ([[Batching|Batching]]) ๋ฐ ๋ ˆ์ด์•„์›ƒ ์Šค๋ž˜์‹ฑ([[Layout Thrashing|Layout Thrashing]]) ๋ฐฉ์ง€**: DOM ์ฝ๊ธฐ ๋ฐ ์“ฐ๊ธฐ ์ž‘์—…์„ ํ˜ผํ•ฉํ•˜์ง€ ์•Š๊ณ  ํ•œ ๋ฒˆ์— ์ฒ˜๋ฆฌํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ ˆ์ด์•„์›ƒ์„ ์—ฌ๋Ÿฌ ๋ฒˆ ์žฌ๊ณ„์‚ฐํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [2, 8, 9, 12, 13]. * **GPU ๊ฐ€์† ํ™œ์šฉ (Compositing)**: `top`, `left`์™€ ๊ฐ™์€ ๋ ˆ์ด์•„์›ƒ ์†์„ฑ ๋Œ€์‹  `transform`์„, ์ƒ‰์ƒ ๋ณ€๊ฒฝ ๋Œ€์‹  `opacity`๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๊ตฌํ˜„ํ•˜๋ฉด Reflow๋‚˜ Repaint ์—†์ด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ณ„๋„ ๋ ˆ์ด์–ด์—์„œ ์š”์†Œ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [8, 9, 11]. * **๊ตฌ์กฐ ๋ฐ ์Šคํƒ€์ผ ์ตœ์ ํ™”**: DOM ํŠธ๋ฆฌ์˜ ๊นŠ์ด๋ฅผ ์ค„์ด๊ณ , ์—ฐ์‚ฐ์ด ๋งŽ์ด ํ•„์š”ํ•œ ๋ณต์žกํ•œ CSS ์„ ํƒ์ž(ํŠนํžˆ ์ž์† ์„ ํƒ์ž)์˜ ์‚ฌ์šฉ์„ ์ง€์–‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [14]. ๋ ˆ์ด์•„์›ƒ ๋ณ€ํ™” ์—†์ด ์š”์†Œ๋ฅผ ์ˆจ๊ธฐ๋ ค๋ฉด `display: none` (Reflow ์œ ๋ฐœ) ๋Œ€์‹  `visibility: hidden`์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค [15]. * **๋ฌธ์„œ ํ๋ฆ„(Flow)์—์„œ ๋ถ„๋ฆฌ**: ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋“ฑ ๋ณต์žกํ•œ ๋ Œ๋”๋ง ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚˜๋Š” ์š”์†Œ๋Š” `position: absolute` ๋˜๋Š” `position: fixed`๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฃผ๋ณ€ ์š”์†Œ์˜ Reflow์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋„๋ก ๊ฒฉ๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [14]. * **React์˜ ๋ Œ๋”๋ง ๋ฉ”์ปค๋‹ˆ์ฆ˜๊ณผ ์„ฑ๋Šฅ ์ตœ์ ํ™”** * ๊ธฐ์กด์˜ ์ง์ ‘์ ์ธ DOM ์กฐ์ž‘์€ ๋งค ๋ณ€๊ฒฝ๋งˆ๋‹ค ๋น„์šฉ์ด ๋†’์€ Reflow์™€ Repaint๋ฅผ ์œ ๋ฐœํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋А๋ฆด ์ˆ˜๋ฐ–์— ์—†์Šต๋‹ˆ๋‹ค [16]. * React๋Š” **[[Virtual DOM|Virtual DOM]]**์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ์ƒ์—์„œ ์ด์ „ ์ƒํƒœ์™€ ์ƒˆ๋กœ์šด ์ƒํƒœ๋ฅผ ๋น„๊ต(Diffing)ํ•œ ๋’ค, ๋ณ€๊ฒฝ๋œ ์ตœ์†Œํ•œ์˜ ๋ถ€๋ถ„๋งŒ ์‹ค์ œ DOM์— ์ผ๊ด„ ๋ฐ˜์˜ํ•จ์œผ๋กœ์จ ๋ Œ๋”๋ง ํŒŒ์ดํ”„๋ผ์ธ์˜ ๋‚ญ๋น„๋ฅผ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค [16, 17]. * ๋˜ํ•œ [[React 18|React 18]]๋ถ€ํ„ฐ ๋„์ž…๋œ **์ž๋™ ์ผ๊ด„ ์ฒ˜๋ฆฌ([[Automatic Batching|Automatic Batching]])** ๊ธฐ๋Šฅ์€ ๋น„๋™๊ธฐ ์ž‘์—…(Promise, setTimeout ๋“ฑ) ๋‚ด์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์—ฌ๋Ÿฌ ์ƒํƒœ ์—…๋ฐ์ดํŠธ๋ฅผ ๋‹จ ํ•œ ๋ฒˆ์˜ ๋ฆฌ๋ Œ๋”๋ง์œผ๋กœ ๋ฌถ์–ด์„œ ์ฒ˜๋ฆฌํ•˜์—ฌ DOM ์—ฐ์‚ฐ ํšŸ์ˆ˜๋ฅผ ํš๊ธฐ์ ์œผ๋กœ ์ค„์—ฌ์ค๋‹ˆ๋‹ค [18-20]. ## ๐Ÿ”— Knowledge Connections - **Related Topics:** [[แ„‡แ…ณแ„…แ…กแ„‹แ…ฎแ„Œแ…ฅ แ„…แ…ฆแ†ซแ„ƒแ…ฅแ„…แ…ตแ†ผ แ„€แ…ชแ„Œแ…ฅแ†ผ (HTML โ†’ CSSOM โ†’ Render Tree)|๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ๊ณผ์ • (HTML โ†’ CSSOM โ†’ Render Tree]], [[DOM vs Virtual DOM|DOM vs Virtual DOM]] - **Projects/Contexts:** [[React แ„€แ…ตแ„‡แ…กแ†ซ แ„‰แ…ตแ†ผแ„€แ…ณแ†ฏ แ„‘แ…ฆแ„‹แ…ตแ„Œแ…ต แ„‹แ…ขแ„‘แ…ณแ†ฏแ„…แ…ตแ„แ…ฆแ„‹แ…ตแ„‰แ…งแ†ซ(SPA)แ„‹แ…ด แ„…แ…ฆแ†ซแ„ƒแ…ฅแ„…แ…ตแ†ผ แ„Žแ…ฌแ„Œแ…ฅแ†จแ„’แ…ช|React ๊ธฐ๋ฐ˜ ์‹ฑ๊ธ€ ํŽ˜์ด์ง€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(SPA)์˜ ๋ Œ๋”๋ง ์ตœ์ ํ™”]], [[Automatic Batchingแ„‹แ…ณแ†ฏ แ„แ…ฉแ†ผแ„’แ…กแ†ซ React 18 แ„‰แ…ฅแ†ผแ„‚แ…ณแ†ผ แ„Žแ…ฌแ„Œแ…ฅแ†จแ„’แ…ช|Automatic Batching์„ ํ†ตํ•œ React 18 ์„ฑ๋Šฅ ์ตœ์ ํ™”]] - **Contradictions/Notes:** ์†Œ์Šค ๋ฌธ์„œ๋“ค์— ๋”ฐ๋ฅด๋ฉด `display: none`์€ ์š”์†Œ๋ฅผ ๋ Œ๋” ํŠธ๋ฆฌ์—์„œ ์™„์ „ํžˆ ์ œ๊ฑฐํ•˜๋ฏ€๋กœ ์ „์ฒด์ ์ธ ๋ ˆ์ด์•„์›ƒ ๊ณ„์‚ฐ(Reflow)์„ ์œ ๋ฐœํ•˜์ง€๋งŒ, ์‹œ๊ฐ์ ์œผ๋กœ๋งŒ ๋ณด์ด์ง€ ์•Š๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š” `visibility: hidden`์„ ์‚ฌ์šฉํ•˜๋ฉด Reflow๋ฅผ ํ”ผํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๊ถŒ์žฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค [15, 21]. --- *Last updated: 2026-04-25*