CSS μ¦μ λ‘λ©μ 볡μ‘μ±μ νμν©λλ€: μ₯μ , λ¨μ , ꡬν κΈ°μ λ° μΉμ¬μ΄νΈ μ±λ₯μ λ―ΈμΉλ μν₯. μ΄ μ’ ν© κ°μ΄λλ‘ μΉμ¬μ΄νΈ λ‘λ© κ²½νμ μ΅μ ννμΈμ.
CSS μ¦μ λ‘λ© κ·μΉ(Eager Rule): μ¦μ λ‘λ©(Eager Loading) μ¬μΈ΅ λΆμ
μΉ κ°λ° λΆμΌμμ μΉμ¬μ΄νΈ μ±λ₯ μ΅μ νλ κ°μ₯ μ€μν©λλ€. μ¬μ©μλ€μ λΉ λ₯Έ λ‘λ© μκ°κ³Ό μνν κ²½νμ κΈ°λν©λλ€. μ΄κΈ° νμ΄μ§ λ‘λ©μ κ°μ νκΈ° μν΄ μ§μ° λ‘λ©(lazy loading)μ΄ μΈκΈ°λ₯Ό μ»μμ§λ§, κ°λ μ μΌλ‘ "CSS μ¦μ λ‘λ© κ·μΉ"μ΄λΌκ³ λ λΆλ¦¬λ μ¦μ λ‘λ©(eager loading)μ ν΅μ¬ 리μμ€λ₯Ό μ°μ μ μΌλ‘ μ²λ¦¬νλ λ° μ΄μ μ λ§μΆ 보μμ μΈ μ κ·Ό λ°©μμ μ 곡ν©λλ€. μ΄ κΈμμλ CSS λ§₯λ½μμ μ¦μ λ‘λ©μ μμΉ, μ₯μ , λ¨μ λ° μ€μ ꡬν μ λ΅μ μ΄ν΄λ³΄λ©° ν¬κ΄μ μΌλ‘ νꡬν©λλ€. CSS μ¬μμ 곡μμ μΌλ‘ μ μλ "CSS μ¦μ λ‘λ© κ·μΉ"μ μλ€λ μ μ λͺ νν ν΄μΌ ν©λλ€. μ΄ κ°λ μ ν΅μ¬ CSSλ₯Ό μ‘°κΈ°μ λ‘λνμ¬ μΉμ¬μ΄νΈμ μΈμ§ λ° μ€μ μ±λ₯μ ν₯μμν€λ μ λ΅μ μ€μ¬μΌλ‘ μ κ°λ©λλ€.
μ¦μ λ‘λ©μ΄λ 무μμΈκ°μ (CSS λ§₯λ½μμ)?
μ¦μ λ‘λ©μ λ³Έμ§μ μΌλ‘ λΈλΌμ°μ κ° νΉμ 리μμ€μ λ‘λ©μ μ§μ°μν€λ λμ μ¦μ λ‘λνλλ‘ κ°μ νλ κΈ°μ μ λλ€. CSS λ§₯λ½μμλ μΌλ°μ μΌλ‘ νμ΄μ§μ μ΄κΈ° λ λλ§("above-the-fold" μ½ν μΈ )μ λ΄λΉνλ CSSλ₯Ό κ°λ₯ν ν 빨리 λ‘λνλ κ²μ μλ―Έν©λλ€. μ΄λ μ€νμΌμ΄ μ μ©λμ§ μμ μ½ν μΈ μ κΉλ°μ(FOUC)μ΄λ 보μ΄μ§ μλ ν μ€νΈμ κΉλ°μ(FOIT)μ λ°©μ§νμ¬ λ λμ μ¬μ©μ κ²½νμΌλ‘ μ΄μ΄μ§λλ€.
CSS μμ± μ체λ μλμ§λ§, μ¦μ λ‘λ©μ μμΉμ λ€μκ³Ό κ°μ λ€μν κΈ°μ μ ν΅ν΄ λ¬μ±λ©λλ€:
- ν΅μ¬ CSS μΈλΌμΈ μ²λ¦¬: νμ΄μ§ μλ¨ μ½ν
μΈ λ₯Ό λ λλ§νλ λ° νμν CSSλ₯Ό HTML λ¬Έμμ
<head>
μμ μ§μ ν¬ν¨ν©λλ€. - ν΅μ¬ CSS μ¬μ λ‘λ:
<link rel="preload">
νκ·Έλ₯Ό μ¬μ©νμ¬ λΈλΌμ°μ κ° λμ μ°μ μμλ‘ ν΅μ¬ CSS 리μμ€λ₯Ό κ°μ Έμ€λλ‘ μ§μν©λλ€. media
μμ± μ λ΅μ μ¬μ©: μ¦κ°μ μΈ λ‘λ©μ 보μ₯νκΈ° μν΄ ν΅μ¬ CSSμ λν΄ λͺ¨λ νλ©΄μ λμμΌλ‘ νλmedia
쿼리(μ:media="all"
)λ₯Ό μ§μ ν©λλ€.
CSSμμ μ¦μ λ‘λ©μ΄ μ€μν μ΄μ λ 무μμΈκ°μ?
μΉμ¬μ΄νΈμ μ²΄κ° λ‘λ© μλλ μ¬μ©μ μ°Έμ¬ λ° μ νμ¨μ μλΉν μν₯μ λ―ΈμΉ©λλ€. ν΅μ¬ CSSμ μ¦μ λ‘λ©μ λ€μκ³Ό κ°μ λͺ κ°μ§ μ£Όμ μ±λ₯ λ¬Έμ λ₯Ό ν΄κ²°ν©λλ€:
- μ²΄κ° μ±λ₯ ν₯μ: νμ΄μ§ μλ¨ μ½ν μΈ λ₯Ό μ μνκ² λ λλ§ν¨μΌλ‘μ¨ μ¬μ©μλ μ¦μ 무μΈκ°λ₯Ό λ³Ό μ μκ² λμ΄, νμ΄μ§μ λ€λ₯Έ λΆλΆμ΄ μμ§ λ‘λ© μ€μ΄λλΌλ λ°μμ±μ΄ μλ€λ λλμ λ°κ² λ©λλ€.
- FOUC/FOIT κ°μ: μ€νμΌμ΄ μ μ©λμ§ μμ μ½ν μΈ λ 보μ΄μ§ μλ ν μ€νΈμ κΉλ°μμ μ΅μννκ±°λ μ κ±°νμ¬ νμ΄μ§μ μκ°μ μμ μ±μ λμ΄κ³ λ λΆλλ¬μ΄ μ¬μ©μ κ²½νμ μ 곡ν©λλ€.
- μ½μ΄ μΉ λ°μ΄ν(Core Web Vitals) ν₯μ: CSSμ μ¦μ λ‘λ©μ μ΅λ μ½ν μΈ ν νμΈνΈ(LCP) λ° μ΅μ΄ μ½ν μΈ ν νμΈνΈ(FCP)μ κ°μ μ£Όμ μ½μ΄ μΉ λ°μ΄ν μ§νμ κΈμ μ μΈ μν₯μ λ―ΈμΉ μ μμ΅λλ€. LCPλ λ·°ν¬νΈμ 보μ΄λ κ°μ₯ ν° μ½ν μΈ μμκ° λ λλ§λλ λ° κ±Έλ¦¬λ μκ°μ μΈ‘μ νκ³ , FCPλ 첫 λ²μ§Έ μ½ν μΈ μμκ° λ λλ§λλ λ° κ±Έλ¦¬λ μκ°μ μΈ‘μ ν©λλ€. μ΄λ¬ν μμμ μ€νμΌμ μ§μ νλ CSS λ‘λ©μ μ°μ μν¨μΌλ‘μ¨ μ΄ μ μλ€μ ν₯μμν¬ μ μμ΅λλ€.
λ―Έκ΅ μλ²μμ νΈμ€ν λλ μΉμ¬μ΄νΈμ μΌλ³Έ μ¬μ©μκ° μ μνλ κ²½μ°λ₯Ό μκ°ν΄ 보μΈμ. μ¦μ λ‘λ©μ΄ μμΌλ©΄ μ¬μ©μλ μ€νμΌμ΄ μ μ©λ μ½ν μΈ λ₯Ό 보기κΉμ§ μλΉν μ§μ°μ κ²½νν μ μμΌλ©°, μ΄λ λΆλ§κ³Ό μ μ¬μ μΈ μ¬μ΄νΈ μ΄νλ‘ μ΄μ΄μ§ μ μμ΅λλ€. μ¦μ λ‘λ©μ λ€νΈμν¬ μ§μ° μκ°κ³Ό κ΄κ³μμ΄ μ΄κΈ° μκ°μ μμκ° μ μνκ² λ λλ§λλλ‘ λ³΄μ₯νμ¬ μ΄λ₯Ό μννλ λ° λμμ΄ λ©λλ€.
CSSλ₯Ό μν μ¦μ λ‘λ© κΈ°μ
CSSμ μ¦μ λ‘λ©μ λ¬μ±νκΈ° μν΄ μ¬λ¬ κΈ°μ μ μ¬μ©ν μ μμ΅λλ€. κ°μ₯ μΌλ°μ μΈ λ°©λ²μ λν΄ μμΈν μ΄ν΄λ³΄κ² μ΅λλ€:
1. ν΅μ¬ CSS μΈλΌμΈ μ²λ¦¬
ν΅μ¬ CSS μΈλΌμΈ μ²λ¦¬λ νμ΄μ§ μλ¨ μ½ν
μΈ λ₯Ό λ λλ§νλ λ° νμν CSSλ₯Ό HTML λ¬Έμμ <head>
μμ μλ <style>
νκ·Έ λ΄μ μ§μ ν¬ν¨νλ κ²μ μλ―Έν©λλ€.
μμ:
<head>
<style>
body { font-family: Arial, sans-serif; margin: 0; }
header { background-color: #f0f0f0; padding: 20px; }
h1 { font-size: 2em; margin-bottom: 10px; }
</style>
<link rel="stylesheet" href="style.css" onload="if(media!='all') media='all'"> <noscript><link rel="stylesheet" href="style.css"></noscript>
</head>
μ₯μ :
- λ λλ§ μ°¨λ¨ μμ² μ κ±°: λΈλΌμ°μ κ° ν΅μ¬ CSSλ₯Ό κ°μ Έμ€κΈ° μν΄ μΆκ°μ μΈ HTTP μμ²μ ν νμκ° μμΌλ―λ‘ μ²« λ λλ§κΉμ§μ μκ°μ μ€μ λλ€.
- κ°μ₯ λΉ λ₯Έ μ²΄κ° μ±λ₯: CSSκ° μ΄λ―Έ HTMLμ μ‘΄μ¬νλ―λ‘ λΈλΌμ°μ κ° μ¦μ μ€νμΌμ μ μ©ν μ μμ΅λλ€.
λ¨μ :
- HTML ν¬κΈ° μ¦κ°: CSSλ₯Ό μΈλΌμΈμΌλ‘ μ²λ¦¬νλ©΄ HTML λ¬Έμμ ν¬κΈ°κ° μ»€μ Έ μ΄κΈ° λ€μ΄λ‘λ μκ°μ μ½κ°μ μν₯μ λ―ΈμΉ μ μμ΅λλ€.
- μ μ§λ³΄μ λΆλ΄: μΈλΌμΈ CSSλ₯Ό μ μ§ κ΄λ¦¬νλ κ²μ νΉν λκ·λͺ¨ μΉμ¬μ΄νΈμ κ²½μ° μ΄λ €μΈ μ μμ΅λλ€. λ³κ²½ μ¬νμ HTMLμ μ§μ μ λ°μ΄νΈν΄μΌ ν©λλ€.
- μ½λ μ€λ³΅: λμΌν CSSκ° μ¬λ¬ νμ΄μ§μμ μ¬μ©λλ κ²½μ° κ° νμ΄μ§μ μΈλΌμΈμΌλ‘ ν¬ν¨ν΄μΌ νλ―λ‘ μ½λ μ€λ³΅μ΄ λ°μν©λλ€.
λͺ¨λ² μ¬λ‘:
- νλ‘μΈμ€ μλν: Critical CSSλ Penthouseμ κ°μ λꡬλ₯Ό μ¬μ©νμ¬ ν΅μ¬ CSSλ₯Ό μλμΌλ‘ μΆμΆνκ³ μΈλΌμΈ μ²λ¦¬νμΈμ. μ΄λ¬ν λꡬλ νμ΄μ§λ₯Ό λΆμνμ¬ νμ΄μ§ μλ¨ μ½ν μΈ λ₯Ό λ λλ§νλ λ° νμν CSSλ₯Ό μλ³ν©λλ€.
- μΊμ λ²μ€ν
: μ 체 CSS νμΌμ λν μΊμ λ²μ€ν
μ λ΅μ ꡬννμ¬ λ³κ²½ μ¬νμ΄ κ²°κ΅ μ νλλλ‘ ν©λλ€. μμ
onload
νΈλ¦μ΄ μ΄λ₯Ό μ©μ΄νκ² ν μ μμ΅λλ€. - κ°κ²°νκ² μ μ§: μ΄κΈ° λ·°ν¬νΈλ₯Ό λ λλ§νλ λ° μ λμ μΌλ‘ νμν CSSλ§ μΈλΌμΈμΌλ‘ μ²λ¦¬νμΈμ. μ€μνμ§ μμ CSSμ λ‘λ©μ μ§μ°μν€μΈμ.
2. ν΅μ¬ CSS μ¬μ λ‘λ
<link rel="preload">
νκ·Έλ₯Ό μ¬μ©νλ©΄ λΈλΌμ°μ μ νΉμ 리μμ€λ₯Ό λ λμ μ°μ μμλ‘ κ°μ Έμ€λλ‘ μ릴 μ μμ΅λλ€. ν΅μ¬ CSSλ₯Ό μ¬μ λ‘λν¨μΌλ‘μ¨ λΈλΌμ°μ κ° HTMLμμ CSS νμΌμ λ°κ²¬νκΈ° μ μλ λ λλ§ νλ‘μΈμ€ μ΄κΈ°μ λ€μ΄λ‘λνλλ‘ μ§μν μ μμ΅λλ€.
μμ:
<head>
<link rel="preload" href="critical.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
<noscript><link rel="stylesheet" href="critical.css"></noscript>
</head>
μ€λͺ :
rel="preload"
: 리μμ€λ₯Ό μ¬μ λ‘λν΄μΌ ν¨μ μ§μ ν©λλ€.href="critical.css"
: μ¬μ λ‘λν CSS νμΌμ URLμ λλ€.as="style"
: 리μμ€κ° μ€νμΌμνΈμμ λνλ λλ€.onload
νΈλ€λ¬μnoscript
νκ·Έλ μλ°μ€ν¬λ¦½νΈκ° λΉνμ±νλκ±°λ μ¬μ λ‘λκ° μ€ν¨νλλΌλ CSSκ° μ μ©λλλ‘ λ³΄μ₯ν©λλ€.
μ₯μ :
- λΉμ°¨λ¨(Non-Blocking): μ¬μ λ‘λλ νμ΄μ§ λ λλ§μ μ°¨λ¨νμ§ μμ΅λλ€. λΈλΌμ°μ λ CSSκ° λ€μ΄λ‘λλλ λμ HTML νμ±μ κ³μν μ μμ΅λλ€.
- μΊμ μ΅μ ν: λΈλΌμ°μ λ μ¬μ λ‘λλ CSSλ₯Ό μΊμν μ μμ΄ νμ μμ²μ΄ λ λΉ¨λΌμ§λλ€.
- μΈλΌμΈ μ²λ¦¬λ³΄λ€ μ μ§ κ΄λ¦¬κ° μ©μ΄ν¨: CSSκ° λ³λμ νμΌλ‘ μ μ§λλ―λ‘ μ μ§ κ΄λ¦¬κ° λ μ½μ΅λλ€.
λ¨μ :
- λΈλΌμ°μ μ§μ νμ: μ¬μ λ‘λλ μ΅μ λΈλΌμ°μ μμ μ§μλμ§λ§, ꡬν λΈλΌμ°μ λ
<link rel="preload">
νκ·Έλ₯Ό μΈμνμ§ λͺ»ν μ μμ΅λλ€. κ·Έλ¬λonload
ν΄λ°±μ΄ μ΄ κ²½μ°λ₯Ό μ²λ¦¬ν©λλ€. - μλͺ» μννλ©΄ λ‘λ μκ°μ΄ μ¦κ°ν μ μμ: μλͺ»λ 리μμ€λ λ무 λ§μ 리μμ€λ₯Ό μ¬μ λ‘λνλ©΄ μ€μ λ‘ νμ΄μ§ μλκ° λλ €μ§ μ μμ΅λλ€.
λͺ¨λ² μ¬λ‘:
- ν΅μ¬ CSS μ°μ μμ μ§μ : νμ΄μ§ μλ¨ μ½ν μΈ λ λλ§μ νμμ μΈ CSSλ§ μ¬μ λ‘λνμΈμ.
- μ² μ ν ν μ€νΈ: μ¬μ λ‘λλ₯Ό ꡬνν ν μΉμ¬μ΄νΈ μ±λ₯μ λͺ¨λν°λ§νμ¬ μ€μ λ‘ λ‘λ© μκ°μ΄ κ°μ λκ³ μλμ§ νμΈνμΈμ.
as
μμ± μ¬μ©: μ¬μ λ‘λλλ 리μμ€μ μ νμ λνλ΄κΈ° μν΄ νμas
μμ±μ μ§μ νμΈμ. μ΄λ λΈλΌμ°μ κ° λ¦¬μμ€μ μ°μ μμλ₯Ό μ νκ³ μ¬λ°λ₯Έ μΊμ± λ° λ‘λ© μ λ΅μ μ μ©νλ λ° λμμ΄ λ©λλ€.
3. media
μμ±μ μ λ΅μ μ¬μ©
<link>
νκ·Έμ media
μμ±μ μ¬μ©νλ©΄ μ€νμΌμνΈλ₯Ό μ μ©ν λ―Έλμ΄λ₯Ό μ§μ ν μ μμ΅λλ€. media
μμ±μ μ λ΅μ μΌλ‘ μ¬μ©ν¨μΌλ‘μ¨ λΈλΌμ°μ κ° λ€λ₯Έ CSS νμΌμ λ‘λνκ³ μ μ©νλ μμ μ μ μ΄ν μ μμ΅λλ€.
μμ:
<head>
<link rel="stylesheet" href="critical.css" media="all">
<link rel="stylesheet" href="print.css" media="print">
<link rel="stylesheet" href="mobile.css" media="(max-width: 768px)">
</head>
μ€λͺ :
media="all"
:critical.css
νμΌμ λͺ¨λ λ―Έλμ΄ μ νμ μ μ©λμ΄ μ¦μ λ‘λλ©λλ€.media="print"
:print.css
νμΌμ νμ΄μ§λ₯Ό μΈμν λλ§ μ μ©λ©λλ€.media="(max-width: 768px)"
:mobile.css
νμΌμ μ΅λ λλΉκ° 768ν½μ μΈ νλ©΄μλ§ μ μ©λ©λλ€.
μ₯μ :
- μ‘°κ±΄λΆ λ‘λ©: λ―Έλμ΄ μ νμ΄λ μ₯μΉ νΉμ±μ λ°λΌ λ€λ₯Έ CSS νμΌμ λ‘λν μ μμ΅λλ€.
- μ±λ₯ ν₯μ: νμν CSS νμΌλ§ λ‘λν¨μΌλ‘μ¨ λ€μ΄λ‘λνκ³ νμ±ν΄μΌ νλ λ°μ΄ν°μ μμ μ€μΌ μ μμ΅λλ€.
λ¨μ :
- μ μ€ν κ³ν νμ: CSS μν€ν μ²λ₯Ό μ μ€νκ² κ³ννκ³ λ€λ₯Έ λ―Έλμ΄ μ νμ μ΄λ€ CSS νμΌμ΄ μ€μνμ§ κ²°μ ν΄μΌ ν©λλ€.
- 볡μ‘μ±μΌλ‘ μ΄μ΄μ§ μ μμ: λ€λ₯Έ λ―Έλμ΄ μμ±μ κ°μ§ μ¬λ¬ CSS νμΌμ κ΄λ¦¬νλ κ²μ νΉν λκ·λͺ¨ μΉμ¬μ΄νΈμ κ²½μ° λ³΅μ‘ν΄μ§ μ μμ΅λλ€.
λͺ¨λ² μ¬λ‘:
- λͺ¨λ°μΌ μ°μ μΌλ‘ μμ: λͺ¨λ°μΌ μ₯μΉλ₯Ό μν΄ μΉμ¬μ΄νΈλ₯Ό λ¨Όμ λμμΈν λ€μ, λ―Έλμ΄ μΏΌλ¦¬λ₯Ό μ¬μ©νμ¬ λ ν° νλ©΄μ λν λμμΈμ μ μ§μ μΌλ‘ ν₯μμν€μΈμ.
- ꡬ체μ μΈ λ―Έλμ΄ μΏΌλ¦¬ μ¬μ©: λ€λ₯Έ μ₯μΉ λ° νλ©΄ ν¬κΈ°λ₯Ό λμμΌλ‘ νλ ꡬ체μ μΈ λ―Έλμ΄ μΏΌλ¦¬λ₯Ό μ¬μ©νμΈμ.
- λ€λ₯Έ κΈ°μ κ³Ό κ²°ν©:
media
μμ± μ¬μ©μ ν΅μ¬ CSS μΈλΌμΈ μ²λ¦¬λ μ¬μ λ‘λμ κ°μ λ€λ₯Έ μ¦μ λ‘λ© κΈ°μ κ³Ό κ²°ν©νμΈμ.
κΈ°λ³Έμ λμ΄μ: κ³ κΈ μ¦μ λ‘λ© μ λ΅
μμμ λ Όμν κΈ°λ³Έ κΈ°μ μΈμλ, CSS λ‘λ©μ λμ± μ΅μ ννκ³ μΉμ¬μ΄νΈ μ±λ₯μ ν₯μμν¬ μ μλ λͺ κ°μ§ κ³ κΈ μ λ΅μ΄ μμ΅λλ€.
1. HTTP/2 μλ² νΈμ
HTTP/2 μλ² νΈμλ₯Ό μ¬μ©νλ©΄ μλ²κ° ν΄λΌμ΄μΈνΈκ° μμ²νκΈ°λ μ μ ν΄λΌμ΄μΈνΈμ 리μμ€λ₯Ό μ¬μ μ λ³΄λΌ μ μμ΅λλ€. ν΅μ¬ CSS νμΌμ νΈμν¨μΌλ‘μ¨ λΈλΌμ°μ κ° μ΄λ₯Ό λ°κ²¬νκ³ λ€μ΄λ‘λνλ λ° κ±Έλ¦¬λ μκ°μ ν¬κ² μ€μΌ μ μμ΅λλ€.
μλ λ°©μ:
- μλ²λ HTML λ¬Έμλ₯Ό λΆμνκ³ ν΅μ¬ CSS νμΌμ μλ³ν©λλ€.
- μλ²λ ν΄λΌμ΄μΈνΈμ PUSH_PROMISE νλ μμ λ³΄λ΄ ν΅μ¬ CSS νμΌμ λ³΄λΌ κ²μμ μ립λλ€.
- μλ²λ ν΄λΌμ΄μΈνΈμ ν΅μ¬ CSS νμΌμ 보λ λλ€.
μ₯μ :
- μ볡 μκ°(Round-Trip Time) μ κ±°: λΈλΌμ°μ λ ν΅μ¬ CSS νμΌμ λ°κ²¬νκΈ° μν΄ HTMLμ΄ νμ±λ λκΉμ§ κΈ°λ€λ¦΄ νμκ° μμ΅λλ€.
- μ±λ₯ ν₯μ: μλ² νΈμλ νΉν λ€νΈμν¬ μ§μ° μκ°μ΄ κΈ΄ μΉμ¬μ΄νΈμ κ²½μ° μ²« λ λλ§κΉμ§μ μκ°μ ν¬κ² μ€μΌ μ μμ΅λλ€.
λ¨μ :
- HTTP/2 μ§μ νμ: μλ² νΈμλ μλ²μ ν΄λΌμ΄μΈνΈ λͺ¨λ HTTP/2λ₯Ό μ§μν΄μΌ ν©λλ€.
- λμν λλΉ κ°λ₯μ±: ν΄λΌμ΄μΈνΈκ° μ΄λ―Έ ν΅μ¬ CSS νμΌμ μΊμν κ²½μ°, μλ² νΈμλ λμνμ λλΉν μ μμ΅λλ€.
λͺ¨λ² μ¬λ‘:
- μ£Όμν΄μ μ¬μ©: μ΄κΈ° λ·°ν¬νΈλ₯Ό λ λλ§νλ λ° μ λ§λ‘ μ€μν 리μμ€λ§ νΈμνμΈμ.
- μΊμ± κ³ λ €: ν΄λΌμ΄μΈνΈκ° μ΄λ―Έ μΊμν 리μμ€λ₯Ό νΈμνμ§ μλλ‘ μΊμ± μ λ΅μ ꡬννμΈμ.
- μ±λ₯ λͺ¨λν°λ§: μλ² νΈμλ₯Ό ꡬνν ν μΉμ¬μ΄νΈ μ±λ₯μ λͺ¨λν°λ§νμ¬ μ€μ λ‘ λ‘λ© μκ°μ΄ κ°μ λκ³ μλμ§ νμΈνμΈμ.
2. 리μμ€ ννΈλ‘ CSS μ λ¬ μ°μ μμ μ§μ
preconnect
λ° dns-prefetch
μ κ°μ 리μμ€ ννΈλ λΈλΌμ°μ μ μ΄λ€ 리μμ€κ° μ€μνκ³ ν¨μ¨μ μΌλ‘ κ°μ Έμ€λ λ°©λ²μ λν ννΈλ₯Ό μ 곡ν μ μμ΅λλ€. μλ°ν λ§ν΄ μ¦μ λ‘λ© κΈ°μ μ μλμ§λ§, μ 체 λ‘λ© νλ‘μΈμ€λ₯Ό μ΅μ ννλ λ° κΈ°μ¬νκ³ ν΅μ¬ CSSμ μ λ¬μ κ°μ ν μ μμ΅λλ€.
μμ:
<head>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="dns-prefetch" href="https://fonts.googleapis.com">
</head>
μ€λͺ :
rel="preconnect"
: λΈλΌμ°μ μ λ‘λ© νλ‘μΈμ€ μ΄κΈ°μ μ§μ λ λλ©μΈμ λν μ°κ²°μ μ€μ νλλ‘ μ§μν©λλ€. μ΄λ CSS νμΌμ΄λ κΈκΌ΄κ³Ό κ°μ μ€μ 리μμ€λ₯Ό νΈμ€ν νλ λλ©μΈμ μ μ©ν©λλ€.rel="dns-prefetch"
: λΈλΌμ°μ μ λ‘λ© νλ‘μΈμ€ μ΄κΈ°μ μ§μ λ λλ©μΈμ λν DNS μ‘°νλ₯Ό μννλλ‘ μ§μν©λλ€. μ΄λ λμ€μ λλ©μΈμ μ°κ²°νλ λ° κ±Έλ¦¬λ μκ°μ μ€μΌ μ μμ΅λλ€.
μ₯μ :
- μ°κ²° μκ° κ°μ : 리μμ€ ννΈλ μ€μν λλ©μΈμ μ°κ²°μ μ€μ νλ λ° κ±Έλ¦¬λ μκ°μ μ€μΌ μ μμ΅λλ€.
- μ±λ₯ ν₯μ: μ°κ²° νλ‘μΈμ€λ₯Ό μ΅μ νν¨μΌλ‘μ¨ λ¦¬μμ€ ννΈλ μΉμ¬μ΄νΈμ μ λ°μ μΈ λ‘λ© μ±λ₯μ ν₯μμν¬ μ μμ΅λλ€.
λ¨μ :
- μ νλ μν₯: 리μμ€ ννΈλ λ€λ₯Έ μ¦μ λ‘λ© κΈ°μ μ λΉν΄ μ±λ₯μ λ―ΈμΉλ μν₯μ΄ μ νμ μ λλ€.
- μ μ€ν κ³ν νμ: μ΄λ€ λλ©μΈμ 미리 μ°κ²°νκ±°λ 미리 κ°μ Έμ¬μ§ μ μ€νκ² κ³νν΄μΌ ν©λλ€.
3. ν΅μ¬ CSS μμ±κΈ° μ¬μ©
μΉμ¬μ΄νΈλ₯Ό μν ν΅μ¬ CSSλ₯Ό μλμΌλ‘ μμ±ν μ μλ μ¬λ¬ λꡬμ μλΉμ€κ° μμ΅λλ€. μ΄λ¬ν λꡬλ νμ΄μ§λ₯Ό λΆμνκ³ νμ΄μ§ μλ¨ μ½ν μΈ λ₯Ό λ λλ§νλ λ° νμν CSSλ₯Ό μλ³ν©λλ€. κ·Έλ° λ€μ μΈλΌμΈ μ²λ¦¬νκ±°λ μ¬μ λ‘λν μ μλ ν΅μ¬ CSS νμΌμ μμ±ν©λλ€.
ν΅μ¬ CSS μμ±κΈ° μμ:
- Critical CSS: HTMLμμ ν΅μ¬ CSSλ₯Ό μΆμΆνλ Node.js λͺ¨λμ λλ€.
- Penthouse: ν΅μ¬ CSSλ₯Ό μμ±νλ Node.js λͺ¨λμ λλ€.
- μ¨λΌμΈ ν΅μ¬ CSS μμ±κΈ°: μΉμ¬μ΄νΈ URLμ μ 곡νμ¬ ν΅μ¬ CSSλ₯Ό μμ±ν μ μλ μ¬λ¬ μ¨λΌμΈ μλΉμ€κ° μμ΅λλ€.
μ₯μ :
- μλν: ν΅μ¬ CSS μμ±κΈ°λ ν΅μ¬ CSSλ₯Ό μλ³νκ³ μΆμΆνλ νλ‘μΈμ€λ₯Ό μλνν©λλ€.
- λ Έλ ₯ κ°μ: νμ΄μ§λ₯Ό μλμΌλ‘ λΆμνκ³ μ΄λ€ CSSκ° μ€μνμ§ κ²°μ ν νμκ° μμ΅λλ€.
- μ νλ ν₯μ: ν΅μ¬ CSS μμ±κΈ°λ μ’ μ’ μλ λΆμλ³΄λ€ λ μ ννκ² ν΅μ¬ CSSλ₯Ό μλ³ν μ μμ΅λλ€.
λ¨μ :
- κ΅¬μ± νμ: μΉμ¬μ΄νΈμμ μ¬λ°λ₯΄κ² μλνλλ‘ ν΅μ¬ CSS μμ±κΈ°λ₯Ό ꡬμ±ν΄μΌ ν μ μμ΅λλ€.
- μ€λ₯ κ°λ₯μ±: ν΅μ¬ CSS μμ±κΈ°λ μλ²½νμ§ μμΌλ©° λλλ‘ λΆμ ννκ±°λ λΆμμ ν ν΅μ¬ CSSλ₯Ό μμ±ν μ μμ΅λλ€.
νΈλ μ΄λμ€ν: μ¦μ λ‘λ©μ΄ μ΅μ μ μ νμ΄ μλ μ μλ κ²½μ°
μ¦μ λ‘λ©μ΄ μΉμ¬μ΄νΈ μ±λ₯μ ν¬κ² ν₯μμν¬ μ μμ§λ§, νμ μ΅μ μ μ νμ μλλλ€. μ¦μ λ‘λ©μ΄ μ€μ λ‘ μ±λ₯μ μ ν΄νκ±°λ λ€λ₯Έ λ¬Έμ λ₯Ό μΌμΌν¬ μ μλ μν©μ΄ μμ΅λλ€.
- κ³Όλν μ¦μ λ‘λ©: λ무 λ§μ CSSλ₯Ό μ¦μ λ‘λνλ©΄ μ΄κΈ° λ€μ΄λ‘λ ν¬κΈ°κ° μ¦κ°νμ¬ νμ΄μ§ μλκ° λλ €μ§ μ μμ΅λλ€. νμ΄μ§ μλ¨ μ½ν μΈ λ₯Ό λ λλ§νλ λ° μ λμ μΌλ‘ νμν CSSλ§ λ‘λνλ κ²μ΄ μ€μν©λλ€.
- 볡μ‘ν μΉμ¬μ΄νΈ: CSSκ° λ§μ λ§€μ° λ³΅μ‘ν μΉμ¬μ΄νΈμ κ²½μ°, ν΅μ¬ CSSλ₯Ό μΈλΌμΈ μ²λ¦¬νλ κ²μ΄ κ΄λ¦¬νκ³ μ μ§νκΈ° μ΄λ €μμ§ μ μμ΅λλ€. μ΄λ¬ν κ²½μ° μ¬μ λ‘λλ HTTP/2 μλ² νΈμκ° λ λμ μ΅μ μΌ μ μμ΅λλ€.
- μ¦μ CSS λ³κ²½: CSSκ° μμ£Ό λ³κ²½λλ κ²½μ°, ν΅μ¬ CSSλ₯Ό μΈλΌμΈ μ²λ¦¬νλ©΄ μΊμ± λ¬Έμ κ° λ°μν μ μμ΅λλ€. CSSκ° λ³κ²½λ λλ§λ€ HTML λ¬Έμλ₯Ό μ λ°μ΄νΈν΄μΌ νλ―λ‘ μκ°μ΄ λ§μ΄ 걸릴 μ μμ΅λλ€.
νΈλ μ΄λμ€νλ₯Ό μ μ€νκ² κ³ λ €νκ³ νΉμ μΉμ¬μ΄νΈμ μν©μ κ°μ₯ μ ν©ν μ¦μ λ‘λ© κΈ°μ μ μ ννλ κ²μ΄ μ€μν©λλ€.
μ¦μ λ‘λ© μ±λ₯ μΈ‘μ λ° λͺ¨λν°λ§
μ¦μ λ‘λ© κΈ°μ μ ꡬνν νμλ μΉμ¬μ΄νΈ μ±λ₯μ μΈ‘μ νκ³ λͺ¨λν°λ§νμ¬ λ³κ²½ μ¬νμ΄ μ€μ λ‘ λ‘λ© μκ°μ κ°μ νκ³ μλμ§ νμΈνλ κ²μ΄ νμμ μ λλ€. μ¦μ λ‘λ© μ±λ₯μ μΈ‘μ νλ λ° μ¬μ©ν μ μλ μ¬λ¬ λꡬμ κΈ°μ μ΄ μμ΅λλ€.
- WebPageTest: λ€λ₯Έ μμΉμ λΈλΌμ°μ μμ μΉμ¬μ΄νΈ μ±λ₯μ ν μ€νΈν μ μλ λ¬΄λ£ μ¨λΌμΈ λꡬμ λλ€. WebPageTestλ λ‘λ© μκ°, 리μμ€ ν¬κΈ° λ° κΈ°ν μ±λ₯ μ§νμ λν μμΈν μ 보λ₯Ό μ 곡ν©λλ€.
- Google PageSpeed Insights: μΉμ¬μ΄νΈ μ±λ₯μ λΆμνκ³ κ°μ μ μν κΆμ₯ μ¬νμ μ 곡νλ λ¬΄λ£ μ¨λΌμΈ λꡬμ λλ€. PageSpeed Insightsλ μ½μ΄ μΉ λ°μ΄ν μ§νμ λν μ 보λ μ 곡ν©λλ€.
- Chrome DevTools: Chrome DevToolsλ λ€νΈμν¬ ν¨λ, μ±λ₯ ν¨λ λ° λΌμ΄νΈνμ°μ€ ν¨λμ ν¬ν¨νμ¬ μΉμ¬μ΄νΈ μ±λ₯ λΆμμ μν λ€μν λꡬλ₯Ό μ 곡ν©λλ€.
μΉμ¬μ΄νΈ μ±λ₯μ μ κΈ°μ μΌλ‘ λͺ¨λν°λ§ν¨μΌλ‘μ¨ μ μ¬μ μΈ λ¬Έμ λ₯Ό μλ³νκ³ νμμ λ°λΌ μ¦μ λ‘λ© μ λ΅μ μ‘°μ ν μ μμ΅λλ€.
κ²°λ‘ : λ λΉ λ₯Έ μΉμ μν μ¦μ λ‘λ© μμ©
CSSμ μ¦μ λ‘λ©μ μΉμ¬μ΄νΈ μ±λ₯μ κ°μ νκ³ μ¬μ©μ κ²½νμ ν₯μμν€λ κ°λ ₯ν κΈ°μ μ λλ€. ν΅μ¬ CSS 리μμ€μ λ‘λ©μ μ°μ μν¨μΌλ‘μ¨ FOUC/FOITλ₯Ό μ€μ΄κ³ , μ²΄κ° μ±λ₯μ κ°μ νλ©°, μ½μ΄ μΉ λ°μ΄ν μ§νλ₯Ό ν₯μμν¬ μ μμ΅λλ€.
μ ν΅μ μΈ μλ―Έμ λ¨μΌ "CSS μ¦μ λ‘λ© κ·μΉ"μ μμ§λ§, μ¦μ λ‘λ©μ μμΉμ ν΅μ¬ CSS μΈλΌμΈ μ²λ¦¬, μ¬μ λ‘λ, λ―Έλμ΄ μμ±μ μ λ΅μ μ¬μ© λ± λ€μν κΈ°μ μ ν΅ν΄ ꡬνλ©λλ€. νΈλ μ΄λμ€νλ₯Ό μ μ€νκ² κ³ λ €νκ³ νΉμ μΉμ¬μ΄νΈμ λ§λ μ¬λ°λ₯Έ κΈ°μ μ μ νν¨μΌλ‘μ¨ μ μΈκ³ μ¬μ©μλ₯Ό μν΄ λ λΉ λ₯΄κ³ , λ λ°μμ΄ μ’μΌλ©°, λ λ§€λ ₯μ μΈ μΉ κ²½νμ λ§λ€ μ μμ΅λλ€.
μ΅μ μ κ²°κ³Όλ₯Ό 보μ₯νκΈ° μν΄ μΉμ¬μ΄νΈ μ±λ₯μ μ§μμ μΌλ‘ λͺ¨λν°λ§νκ³ νμμ λ°λΌ μ¦μ λ‘λ© μ λ΅μ μ‘°μ νλ κ²μ μμ§ λ§μμμ€. μΉ κΈ°μ μ΄ λ°μ ν¨μ λ°λΌ, λμ§νΈ νκ²½μμ κ²½μ μ°μλ₯Ό μ μ§νκΈ° μν΄μλ μλ‘μ΄ κΈ°μ μ λν μ 보λ₯Ό μ»κ³ μ€ννλ κ²μ΄ μ€μν κ²μ λλ€. μΉμ¬μ΄νΈλ₯Ό μ΅μ νν λ κΈλ‘λ² μ μ¬ κ³ κ°κ³Ό κ·Έλ€μ΄ κ²½νν μ μλ λ€μν λ€νΈμν¬ μ‘°κ±΄μ κ³ λ €νμμμ€. μμΉμ κ΄κ³μμ΄ μ μνκ² λ‘λλκ³ μνν μ¬μ©μ κ²½νμ μ 곡νλ μΉμ¬μ΄νΈλ μ€λλ μνΈ μ°κ²°λ μΈμμμ μ±κ³΅μ νμμ μ λλ€.