# [[CSS Performance Optimization|CSS Performance Optimization]] ## ๐Ÿ“Œ Brief Summary CSS ์„ฑ๋Šฅ ์ตœ์ ํ™”๋Š” ๋ธŒ๋ผ์šฐ์ €์˜ ๋ Œ๋”๋ง ๊ฒฝ๋กœ์—์„œ ๋ณ‘๋ชฉ ํ˜„์ƒ์„ ์œ ๋ฐœํ•˜๋Š” ๋ Œ๋”๋ง ์ฐจ๋‹จ ์š”์†Œ๋ฅผ ์ค„์ด๊ณ , ์—ฐ์‚ฐ ๋น„์šฉ์ด ๋†’์€ ๋ฆฌํ”Œ๋กœ์šฐ(Reflow)์™€ ๋ฆฌํŽ˜์ธํŠธ(Repaint)๋ฅผ ์ตœ์†Œํ™”ํ•˜์—ฌ ์›นํŽ˜์ด์ง€์˜ ๋ฐ˜์‘์„ฑ๊ณผ ๋กœ๋”ฉ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค [1-4]. "์˜ˆ์˜๊ฒŒ" ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ๋„˜์–ด "์œ ์ง€๋ณด์ˆ˜ ๊ฐ€๋Šฅํ•˜๊ฒŒ" CSS๋ฅผ ์„ค๊ณ„ํ•˜๋ ค๋ฉด ๋ถˆํ•„์š”ํ•œ ์Šคํƒ€์ผ ์ œ๊ฑฐ, ์• ๋‹ˆ๋ฉ”์ด์…˜์˜ GPU ๊ฐ€์† ํ™œ์šฉ์€ ๋ฌผ๋ก , [[CSS Modules|CSS Modules]]๋‚˜ [[Tailwind CSS|Tailwind CSS]]์ฒ˜๋Ÿผ ๋Ÿฐํƒ€์ž„ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ ์€ ๋„๊ตฌ๋ฅผ ์„ ํƒํ•˜์—ฌ ๋ฒˆ๋“ค ํฌ๊ธฐ์™€ ์•„ํ‚คํ…์ฒ˜ ์„ฑ๋Šฅ์„ ๋™์‹œ์— ๊ด€๋ฆฌํ•˜๋Š” ์‹ค๋ฌด์  ์ ‘๊ทผ์ด ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค [5-8]. ## ๐Ÿ“– Core Content * **๋ Œ๋”๋ง ์ฐจ๋‹จ ๋ฐฉ์ง€ ๋ฐ ํŒŒ์ผ ์ตœ์ ํ™”** * ๋ธŒ๋ผ์šฐ์ €๊ฐ€ CSS๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  [[CSSOM(CSS Object Model)|CSSOM(CSS Object Model]]์„ ๊ตฌ์ถ•ํ•˜๊ธฐ ์ „๊นŒ์ง€ ํŽ˜์ด์ง€ ๋ Œ๋”๋ง์ด ์ฐจ๋‹จ๋ฉ๋‹ˆ๋‹ค [2]. ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ(media queries)๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ธ์‡„์šฉ์ด๋‚˜ ํŠน์ • ํ™”๋ฉด ํฌ๊ธฐ์—๋งŒ ํ•„์š”ํ•œ ์Šคํƒ€์ผ์„ ๋ณ„๋„์˜ ํŒŒ์ผ๋กœ ๋ถ„๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [9, 10]. * ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” CSS(Dead code)๋ฅผ ์ œ๊ฑฐํ•˜๊ณ , ์‚ฌ๋žŒ์ด ์ฝ๊ธฐ ์œ„ํ•ด ์ถ”๊ฐ€๋œ ๊ณต๋ฐฑ์„ ์ง€์šฐ๋Š” ์••์ถ•(Minify) ์ž‘์—…์„ ๊ฑฐ์ณ ํŒŒ์ผ ํฌ๊ธฐ๋ฅผ ์ค„์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค [2, 11]. * `rel="preload"`๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํฐํŠธ, CSS ํŒŒ์ผ, ์ด๋ฏธ์ง€ ๋“ฑ ํ•ต์‹ฌ ์ž์‚ฐ์„ ์กฐ๊ธฐ์— ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ํ™”๋ฉด์„ ๋น ๋ฅด๊ฒŒ ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ๋ Œ๋”๋ง์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [12-14]. * **๋ฆฌํ”Œ๋กœ์šฐ(Reflow)์™€ ๋ฆฌํŽ˜์ธํŠธ(Repaint) ์ตœ์†Œํ™”** * ๊ฐ€์‹œ์„ฑ์ด๋‚˜ ๋ฐฐ๊ฒฝ์ƒ‰ ๋ณ€๊ฒฝ๊ณผ ๊ฐ™์€ ์‹œ๊ฐ์  ๋ณ€ํ™”๋Š” **๋ฆฌํŽ˜์ธํŠธ**๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋ฉฐ, ๋„ˆ๋น„, ๋†’์ด, ๋งˆ์ง„ ๋“ฑ ์š”์†Œ์˜ ๊ธฐํ•˜ํ•™์  ํ˜•ํƒœ๋‚˜ ๋ ˆ์ด์•„์›ƒ์ด ๋ณ€๊ฒฝ๋˜๋ฉด ์ „์ฒด ๋˜๋Š” ์ผ๋ถ€ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ์„ ๋‹ค์‹œ ๊ณ„์‚ฐํ•ด์•ผ ํ•˜๋Š” **๋ฆฌํ”Œ๋กœ์šฐ**๊ฐ€ ๋ฐœ์ƒํ•ด ์‹ฌ๊ฐํ•œ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์ดˆ๋ž˜ํ•ฉ๋‹ˆ๋‹ค [4, 15]. * ๋ฆฌํ”Œ๋กœ์šฐ ์˜ํ–ฅ์„ ์ค„์ด๋ ค๋ฉด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์—ฌ๋Ÿฌ ์ธ๋ผ์ธ ์Šคํƒ€์ผ์„ ๋ฐ˜๋ณต์ ์œผ๋กœ ์กฐ์ž‘ํ•˜์ง€ ๋ง๊ณ , ๋ฏธ๋ฆฌ ์ •์˜๋œ ์™ธ๋ถ€ ํด๋ž˜์Šค ํ•˜๋‚˜๋ฅผ ์กฐ์ž‘ํ•˜์—ฌ ํ•œ ๋ฒˆ์˜ ๋ฆฌํ”Œ๋กœ์šฐ๋งŒ ๋ฐœ์ƒํ•˜๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [16, 17]. DOM ํŠธ๋ฆฌ์˜ ๊ฐ€์žฅ ํ•˜๋‹จ(์ž์‹) ๋…ธ๋“œ์—์„œ ํด๋ž˜์Šค๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ด ๋ฆฌํ”Œ๋กœ์šฐ ๋ฒ”์œ„๋ฅผ ์ตœ์†Œํ™”ํ•˜๋Š” ๋ฐ ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค [18]. * **์• ๋‹ˆ๋ฉ”์ด์…˜ ์„ฑ๋Šฅ ์ตœ์ ํ™” ์ „๋žต** * ์• ๋‹ˆ๋ฉ”์ด์…˜์— `width`, `height`, `margin` ๋“ฑ์˜ ๋ ˆ์ด์•„์›ƒ ์†์„ฑ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ง€์†์ ์ธ ๋ฆฌํ”Œ๋กœ์šฐ์™€ ๋ฆฌํŽ˜์ธํŠธ๋ฅผ ์œ ๋ฐœํ•˜์—ฌ ํ™”๋ฉด์ด ๋Š๊ธฐ๋Š”(Janky) ํ˜„์ƒ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค [19]. ๋Œ€์‹  ๋ ˆ์ด์•„์›ƒ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š” `transform`๊ณผ `opacity` ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ €์˜ GPU ๊ฐ€์†(Compositing)์„ ํ™œ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [6, 20, 21]. * `box-shadow`, `filter`, `border-radius`์™€ ๊ฐ™์ด ๋ธŒ๋ผ์šฐ์ € ์—ฐ์‚ฐ ๋น„์šฉ์ด ๋†’์€ ์†์„ฑ์„ ์‚ฌ์šฉํ•œ ์• ๋‹ˆ๋ฉ”์ด์…˜๊ณผ, ๋ฌด๊ฑฐ์šด ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง€ ๋ฐ ๋ถˆํ•„์š”ํ•œ ๋ฌดํ•œ ๋ฐ˜๋ณต ๋ฃจํ”„ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ํ”ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [21-24]. * ์ž์ฃผ ๋ณ€๊ฒฝ๋˜๋Š” ์š”์†Œ์—๋Š” `will-change` ์†์„ฑ์„ ๋ถ€์—ฌํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์‚ฌ์ „์— ๋ Œ๋”๋ง ์ตœ์ ํ™”๋ฅผ ์ค€๋น„ํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋„ˆ๋ฌด ๋งŽ์€ ์š”์†Œ์— ๋‚จ์šฉํ•˜๋ฉด ์—ญํšจ๊ณผ๊ฐ€ ๋‚˜๋ฏ€๋กœ ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค [25, 26]. * **์‹ค๋ฌด์  ๊ด€์ : ์ตœ์‹  CSS ์•„ํ‚คํ…์ฒ˜์™€ ์„ฑ๋Šฅ ๋น„๊ต** * CSS ๊ด€๋ฆฌ ๋ฐฉ์‹์„ ์„ ํƒํ•  ๋•Œ ๋Ÿฐํƒ€์ž„ ์„ฑ๋Šฅ๊ณผ ๋ฒˆ๋“ค ํฌ๊ธฐ๋ฅผ ๋ฐ˜๋“œ์‹œ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [7]. ๋Ÿฐํƒ€์ž„ [[CSS-in-JS|CSS-in-JS]](์˜ˆ: [[styled-components|styled-components]], Emotion) ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ์ค‘ CSS๋ฅผ ํŒŒ์‹ฑํ•˜๊ณ  ์ฃผ์ž…ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๋Ÿฐํƒ€์ž„ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ํŒŒ์ผ ํฌ๊ธฐ๊ฐ€ ์ปค์ ธ ์„ฑ๋Šฅ์ด ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [27-30]. * ๋ฐ˜๋ฉด **Tailwind CSS**๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹ค์ œ๋กœ ์“ฐ์ธ ์Šคํƒ€์ผ๋งŒ ๋นŒ๋“œ์— ํฌํ•จ์‹œํ‚ค๋ฏ€๋กœ ๋ฒˆ๋“ค ํฌ๊ธฐ๋ฅผ ๊ทน์ ์œผ๋กœ ์ค„์ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ(5~20kb), ๋Ÿฐํƒ€์ž„ ๋น„์šฉ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค [8, 31]. * **CSS Modules** ์—ญ์‹œ ๋นŒ๋“œ ์‹œ์— ๊ณ ์œ  ํด๋ž˜์Šค๋ช…์„ ์ •์ ์œผ๋กœ ์ƒ์„ฑํ•˜๋ฏ€๋กœ ์บก์Аํ™”(์Šค์ฝ”ํ•‘)๋ฅผ ๋ณด์žฅํ•˜๋ฉด์„œ๋„ ๋Ÿฐํƒ€์ž„ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์—†์–ด ์„ฑ๋Šฅ ์นœํ™”์ ์ธ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [5, 8, 32]. ## ๐Ÿ”— Knowledge Connections - **Related Topics:** [[CSS แ„€แ…ฎแ„Œแ…ฉ แ„‰แ…ฅแ†ฏแ„€แ…จ แ„‡แ…กแ†ผแ„‰แ…ตแ†จ|CSS ๊ตฌ์กฐ ์„ค๊ณ„ ๋ฐฉ์‹]], BEM, CSS Modules, [[Tailwind vs แ„‹แ…ตแ†ฏแ„‡แ…กแ†ซ CSS แ„‡แ…ตแ„€แ…ญ|Tailwind vs ์ผ๋ฐ˜ CSS ๋น„๊ต]], ์• ๋‹ˆ๋ฉ”์ด์…˜ (transition / keyframes) - **Projects/Contexts:** [[แ„‰แ…ตแ†ฏแ„†แ…ฎแ„‹แ…ฆแ„‰แ…ฅ CSS แ„€แ…ชแ†ซแ„…แ…ตแ„’แ…กแ„‚แ…ณแ†ซ แ„‡แ…กแ†ผแ„‡แ…ฅแ†ธ|์‹ค๋ฌด์—์„œ CSS ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•]], [[แ„ƒแ…ขแ„€แ…ฒแ„†แ…ฉ แ„‘แ…ณแ„…แ…ฉแ†ซแ„แ…ณแ„‹แ…ฆแ†ซแ„ƒแ…ณ แ„‘แ…ณแ„…แ…ฉแ„Œแ…ฆแ†จแ„แ…ณ แ„‹แ…กแ„แ…ตแ„แ…ฆแ†จแ„Žแ…ฅ|๋Œ€๊ทœ๋ชจ ํ”„๋ก ํŠธ์—”๋“œ ํ”„๋กœ์ ํŠธ ์•„ํ‚คํ…์ฒ˜]] - **Contradictions/Notes:** - CSS-in-JS๋Š” ๋™์ ์ธ ์Šคํƒ€์ผ๋ง๊ณผ ๊ฐœ๋ฐœ์ž ํŽธ์˜์„ฑ์„ ์ œ๊ณตํ•˜์ง€๋งŒ ์„ฑ๋Šฅ(๋ฒˆ๋“ค ํฌ๊ธฐ ๋ฐ ๋Ÿฐํƒ€์ž„ ๋น„์šฉ)์—์„œ๋Š” CSS Modules๋‚˜ Tailwind CSS์— ๋น„ํ•ด ๋‹จ์ ์ด ํฝ๋‹ˆ๋‹ค [8, 27-29]. - ๋ชจ๋ฐ”์ผ์ด๋‚˜ ์ €์‚ฌ์–‘ ๊ธฐ๊ธฐ์—์„œ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๊ตฌํ˜„ํ•  ๋•Œ๋Š” ์‹œ๊ฐ์ ์ธ '๋ถ€๋“œ๋Ÿฌ์›€(Smoothness)'์„ ๊ณ ์ง‘ํ•˜๊ธฐ๋ณด๋‹ค๋Š” CPU ์ž์›์„ ์•„๋ผ๊ธฐ ์œ„ํ•ด ์˜๋„์ ์œผ๋กœ ํ”ฝ์…€ ์ด๋™ ๋‹จ์œ„๋ฅผ ์กฐ์ •ํ•˜์—ฌ '์†๋„(Speed)'๋ฅผ ์ฑ™๊ธฐ๋Š” ํ˜•ํƒœ์˜ ํƒ€ํ˜‘๋„ ์„ฑ๋Šฅ ์ตœ์ ํ™” ๋ฐฉ๋ฒ•์œผ๋กœ ์ œ์•ˆ๋ฉ๋‹ˆ๋‹ค [33]. --- *Last updated: 2026-04-26*