# [[CSS Performance Optimization]] ## πŸ“Œ Brief Summary CSS μ„±λŠ₯ μ΅œμ ν™”λŠ” λΈŒλΌμš°μ €μ˜ λ Œλ”λ§ κ²½λ‘œμ—μ„œ 병λͺ© ν˜„μƒμ„ μœ λ°œν•˜λŠ” λ Œλ”λ§ 차단 μš”μ†Œλ₯Ό 쀄이고, μ—°μ‚° λΉ„μš©μ΄ 높은 λ¦¬ν”Œλ‘œμš°(Reflow)와 리페인트(Repaint)λ₯Ό μ΅œμ†Œν™”ν•˜μ—¬ μ›ΉνŽ˜μ΄μ§€μ˜ λ°˜μ‘μ„±κ³Ό λ‘œλ”© 속도λ₯Ό ν–₯μƒμ‹œν‚€λŠ” κ³Όμ •μž…λ‹ˆλ‹€ [1-4]. "예쁘게" λ§Œλ“œλŠ” 것을 λ„˜μ–΄ "μœ μ§€λ³΄μˆ˜ κ°€λŠ₯ν•˜κ²Œ" CSSλ₯Ό μ„€κ³„ν•˜λ €λ©΄ λΆˆν•„μš”ν•œ μŠ€νƒ€μΌ 제거, μ• λ‹ˆλ©”μ΄μ…˜μ˜ GPU 가속 ν™œμš©μ€ λ¬Όλ‘ , CSS Modulesλ‚˜ Tailwind CSS처럼 λŸ°νƒ€μž„ μ˜€λ²„ν—€λ“œκ°€ 적은 도ꡬλ₯Ό μ„ νƒν•˜μ—¬ λ²ˆλ“€ 크기와 μ•„ν‚€ν…μ²˜ μ„±λŠ₯을 λ™μ‹œμ— κ΄€λ¦¬ν•˜λŠ” 싀무적 접근이 ν•„μˆ˜μ μž…λ‹ˆλ‹€ [5-8]. ## πŸ“– Core Content * **λ Œλ”λ§ 차단 λ°©μ§€ 및 파일 μ΅œμ ν™”** * λΈŒλΌμš°μ €κ°€ CSSλ₯Ό λ‹€μš΄λ‘œλ“œν•˜κ³  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(예: styled-components, Emotion) λΌμ΄λΈŒλŸ¬λ¦¬λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ μ‹€ν–‰ 쀑 CSSλ₯Ό νŒŒμ‹±ν•˜κ³  μ£Όμž…ν•΄μ•Ό ν•˜λ―€λ‘œ λŸ°νƒ€μž„ μ˜€λ²„ν—€λ“œκ°€ λ°œμƒν•˜κ³  파일 크기가 컀져 μ„±λŠ₯이 λ–¨μ–΄μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€ [27-30]. * 반면 **Tailwind CSS**λŠ” μœ ν‹Έλ¦¬ν‹° 클래슀λ₯Ό μ‚¬μš©ν•˜μ—¬ μ‹€μ œλ‘œ 쓰인 μŠ€νƒ€μΌλ§Œ λΉŒλ“œμ— ν¬ν•¨μ‹œν‚€λ―€λ‘œ λ²ˆλ“€ 크기λ₯Ό 극적으둜 쀄일 수 있으며(5~20kb), λŸ°νƒ€μž„ λΉ„μš©μ΄ λ°œμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ [8, 31]. * **CSS Modules** μ—­μ‹œ λΉŒλ“œ μ‹œμ— 고유 클래슀λͺ…을 μ •μ μœΌλ‘œ μƒμ„±ν•˜λ―€λ‘œ μΊ‘μŠν™”(μŠ€μ½”ν•‘)λ₯Ό 보μž₯ν•˜λ©΄μ„œλ„ λŸ°νƒ€μž„ μ˜€λ²„ν—€λ“œκ°€ μ—†μ–΄ μ„±λŠ₯ μΉœν™”μ μΈ μ•„ν‚€ν…μ²˜λ₯Ό κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [5, 8, 32]. ## πŸ”— Knowledge Connections - **Related Topics:** [[CSS ꡬ쑰 섀계 방식]], [[BEM]], [[CSS Modules]], [[Tailwind vs 일반 CSS 비ꡐ]], μ• λ‹ˆλ©”μ΄μ…˜ (transition / keyframes) - **Projects/Contexts:** [[μ‹€λ¬΄μ—μ„œ CSS κ΄€λ¦¬ν•˜λŠ” 방법]], [[λŒ€κ·œλͺ¨ ν”„λ‘ νŠΈμ—”λ“œ ν”„λ‘œμ νŠΈ μ•„ν‚€ν…μ²˜]] - **Contradictions/Notes:** - CSS-in-JSλŠ” 동적인 μŠ€νƒ€μΌλ§κ³Ό 개발자 νŽΈμ˜μ„±μ„ μ œκ³΅ν•˜μ§€λ§Œ μ„±λŠ₯(λ²ˆλ“€ 크기 및 λŸ°νƒ€μž„ λΉ„μš©)μ—μ„œλŠ” CSS Modulesλ‚˜ Tailwind CSS에 λΉ„ν•΄ 단점이 ν½λ‹ˆλ‹€ [8, 27-29]. - λͺ¨λ°”μΌμ΄λ‚˜ 저사양 κΈ°κΈ°μ—μ„œ μ• λ‹ˆλ©”μ΄μ…˜μ„ κ΅¬ν˜„ν•  λ•ŒλŠ” μ‹œκ°μ μΈ 'λΆ€λ“œλŸ¬μ›€(Smoothness)'을 κ³ μ§‘ν•˜κΈ°λ³΄λ‹€λŠ” CPU μžμ›μ„ 아끼기 μœ„ν•΄ μ˜λ„μ μœΌλ‘œ ν”½μ…€ 이동 λ‹¨μœ„λ₯Ό μ‘°μ •ν•˜μ—¬ '속도(Speed)'λ₯Ό μ±™κΈ°λŠ” ν˜•νƒœμ˜ νƒ€ν˜‘λ„ μ„±λŠ₯ μ΅œμ ν™” λ°©λ²•μœΌλ‘œ μ œμ•ˆλ©λ‹ˆλ‹€ [33]. --- *Last updated: 2026-04-26*