CSS μ½λ λΆν λ‘ μΉ μ±λ₯μ κ·ΉλννμΈμ. μ€νμΌμ μ΅μ ννκ³ , λ‘λ μκ°μ μ€μ΄λ©°, μ μΈκ³μ μΌλ‘ λ°μ΄λ μ¬μ©μ κ²½νμ μ 곡νλ νμ κΈ°μ κ³Ό λꡬλ₯Ό μμ보μΈμ.
CSS λΆν κ·μΉ: κΈλ‘λ² λμ€μ μν μ§λ₯ν μ½λ λΆν λ‘ μΉ μ±λ₯ νμ
νλ μΉ κ°λ° μμμμ μ±λ₯μ 무μλ³΄λ€ μ€μν©λλ€. λλ¦¬κ² λ‘λλλ μΉμ¬μ΄νΈλ μ¬μ©μλ₯Ό λ©λ¦¬νκ² νκ³ , μ νμ¨μ μ ν΄νλ©°, λΈλλμ κΈλ‘λ² λλ¬ λ²μμ μλΉν μν₯μ λ―ΈμΉ μ μμ΅λλ€. JavaScriptκ° μ’ μ’ μ΅μ ν λ Όμμμ μ£Όλͺ©λ°μ§λ§, μ’ μ’ κ°κ³Όλλ κ±°λν Cascading Style Sheets (CSS) μμ λλ±νκ² μ€μν λ³λͺ© νμμ΄ λ μ μμ΅λλ€. λ°λ‘ μ¬κΈ°μ "CSS λΆν κ·μΉ"μ κ°λ , λλ λ λκ²λ CSS μ½λ λΆν μ΄ μ€μν μ λ΅μΌλ‘ λΆμν©λλ€. μ΄λ 곡μμ μΈ W3C μ¬μμ μλμ§λ§, λ‘λ© λ° λ λλ§ νλ‘μΈμ€λ₯Ό μ΅μ ννκΈ° μν΄ CSSλ₯Ό μκ³ κ΄λ¦¬ κ°λ₯ν μ²ν¬λ‘ μ§λ₯μ μΌλ‘ λΆν νλ κ²μ ν¬ν¨νλ λ리 μ±νλ λͺ¨λ² μ¬λ‘μ λλ€. λ€μν λ€νΈμν¬ μ‘°κ±΄κ³Ό μ₯μΉ κΈ°λ₯μ κ°μ§ κΈλ‘λ² λμ€μ μν΄ μ΄ "CSS λΆν κ·μΉ"μ μ±ννλ κ²μ λ¨μν μ΅μ νκ° μλλΌ μ μΈκ³μ μΌλ‘ μΌκ΄λκ² μ λμ μ΄κ³ λ§€λ ₯μ μΈ μ¬μ©μ κ²½νμ μ 곡νκΈ° μν νμ μμμ λλ€.
CSS μ½λ λΆν μ΄ν΄: λ¨μν "κ·μΉ" κ·Έ μ΄μ
ν΅μ¬μ μΌλ‘ CSS μ½λ λΆν μ ν¬κ³ λ¨μΌν CSS νμΌμ μ¬λ¬ κ°μ λ μκ³ νκ²ν λ νμΌλ‘ λΆλ¦¬νλ κ΄νμ λλ€. "κ·μΉ"μ΄λΌλ μ©μ΄λ μλ΄ μμΉμ μλ―Έν©λλ€: νμ¬ λ³΄κΈ° λλ κ΅¬μ± μμμ μ λμ μΌλ‘ νμν CSSλ§ λ‘λν©λλ€. μλ°± κ°μ νμ΄μ§μ 볡μ‘ν κ΅¬μ± μμκ° μλ λ°©λν μΉμ¬μ΄νΈλ₯Ό μμν΄ λ³΄μΈμ. λΆν μμ΄λ λͺ¨λ νμ΄μ§ λ‘λ μ ν΄λΉ μκ°μ μ¬μ©μμκ² νμλμ§λ μλ μ¬μ΄νΈ λΆλΆμ λν μ€νμΌμ ν¬ν¨νμ¬ μ 체 μ€νμΌμνΈλ₯Ό λ€μ΄λ‘λν΄μΌ ν μ μμ΅λλ€. μ΄ λΆνμν λ€μ΄λ‘λλ μ΄κΈ° νμ΄λ‘λλ₯Ό λΆνλ¦¬κ³ , μ€μ λ λλ§μ μ§μ°μν€λ©°, νΉν λλ¦° μΈν°λ· μΈνλΌλ₯Ό κ°μ§ μ§μμμ κ·μ€ν λμνμ μλͺ¨ν©λλ€. μ΄λ νΉν ν΄λ‘μ΅λλ€.
μ ν΅μ μΈ μΉ κ°λ°μμλ μ’
μ’
λͺ¨λ CSSλ₯Ό νλμ ν° νμΌμΈ style.css
μ λ²λ€λ‘ λ¬Άμμ΅λλ€. μμ νλ‘μ νΈμμλ κ΄λ¦¬νκΈ° μ½μ§λ§, μ ν리μΌμ΄μ
μ΄ μ±μ₯ν¨μ λ°λΌ μ΄ μ κ·Ό λ°©μμ λΉ λ₯΄κ² μ§μ λΆκ°λ₯ν΄μ§λλ€. "CSS λΆν κ·μΉ"μ μ΄ λ¨μΌμ²΄μ μ¬κ³ λ°©μμ λμ νλ©°, μ€νμΌμ λΆλ¦¬νκ³ νμμ λ°λΌ λ‘λνλ λͺ¨λμ μ κ·Ό λ°©μμ μΉνΈν©λλ€. μ΄κ²μ λ¨μν νμΌ ν¬κΈ°μ λ¬Έμ κ° μλλλ€. λΈλΌμ°μ μ μ΄κΈ° μμ²λΆν° νλ©΄μ ν½μ
μ΄ μ΅μ’
μ μΌλ‘ κ·Έλ €μ§λ κ²κΉμ§ μ 체 λ λλ§ νμ΄νλΌμΈμ κ΄ν κ²μ
λλ€. CSSλ₯Ό μ λ΅μ μΌλ‘ λΆν ν¨μΌλ‘μ¨ κ°λ°μλ "μ€μ λ λλ§ κ²½λ‘"λ₯Ό ν¬κ² μ€μΌ μ μμΌλ©°, μ΄λ μΈμλ μ±λ₯κ³Ό μ¬μ©μ λ§μ‘±λμ μ€μν μ§νμΈ λΉ λ₯Έ 첫 λ²μ§Έ μ½ν
μΈ νμΈνΈ(FCP) λ° κ°μ₯ ν° μ½ν
μΈ νμΈνΈ(LCP) λ©νΈλ¦μΌλ‘ μ΄μ΄μ§λλ€.
CSS μ½λ λΆν μ΄ κΈλ‘λ² μΉ μ±λ₯μ νμμ μΈ μ΄μ
CSS μ½λ λΆν ꡬνμ μ΄μ μ νμΌ ν¬κΈ° κ°μλ₯Ό ν¨μ¬ λ°μ΄λμ΅λλ€. νΉν λ€μν κΈλ‘λ² μ¬μ©μ κΈ°λ°μ κ³ λ €ν λ μ°μν μΉ κ²½νμ μ 체μ μΌλ‘ κΈ°μ¬ν©λλ€.
μ΄κΈ° λ‘λ μ±λ₯μ νκΈ°μ μΈ ν₯μ
- μ΄κΈ° νμ΄λ‘λ κ°μ: νλμ κ±°λν CSS νμΌμ λ€μ΄λ‘λνλ λμ , λΈλΌμ°μ λ μ΄κΈ° 보기μμ μ¦μ νμν μ€νμΌλ§ κ°μ Έμ΅λλ€. μ΄λ 첫 λ²μ§Έ μμ²μμ μ μ‘λλ λ°μ΄ν° μμ κ·Ήμ μΌλ‘ μ€μ¬ λͺ¨λ μ¬μ©μμ μμ μλλ₯Ό λμ λλ€. λ°μ΄ν° μκΈμ κ° μ νμ μ΄κ±°λ λμ μ§μ° μκ°μ κ°μ§ μ¬μ©μμκ²λ μλΉν λΉμ© μ κ°κ³Ό ν¨μ¬ λ μ’μ μ€λ¬μ΄ κ²½νμΌλ‘ μ΄μ΄μ§ μ μμ΅λλ€.
- λΉ λ₯Έ 첫 λ²μ§Έ μ½ν μΈ νμΈνΈ (FCP): FCPλ μ½ν μΈ μ 첫 λ²μ§Έ ν½μ μ΄ νλ©΄μ κ·Έλ €μ§λ μμ μ μΈ‘μ ν©λλ€. μ΄κΈ° λ λλ§μ νμν μ€μ CSSλ§ μ 곡ν¨μΌλ‘μ¨ λΈλΌμ°μ λ ν¨μ¬ λ 빨리 μλ―Έ μλ μ½ν μΈ λ₯Ό νμν μ μμ΅λλ€. μ΄λ λͺ¨λ μ€νμΌμ΄ λ‘λλκΈ° μ μλ μΉμ¬μ΄νΈκ° μ¬μ©μμκ² λ λΉ λ₯΄κ² λκ»΄μ§λλ‘ ν©λλ€. λ€νΈμν¬ μ‘°κ±΄μ΄ λ§€μ° λ€μνκ² λ³νλ κΈλ‘λ² λ§₯λ½μμ λΉ λ₯Έ FCPλ μ¬μ©μκ° μ¬μ΄νΈμ λ¨Έλ¬Όκ±°λ μ¬μ΄νΈλ₯Ό λ λλ κ²μ μ°¨μ΄λ₯Ό λ§λ€ μ μμ΅λλ€.
- μ΅μ νλ κ°μ₯ ν° μ½ν μΈ νμΈνΈ (LCP): LCPλ κ°μ₯ ν° μ½ν μΈ μμ(μ΄λ―Έμ§ λλ ν μ€νΈ λΈλ‘κ³Ό κ°μ)κ° λ³΄μ΄λ μμ μ μΈ‘μ ν©λλ€. μ΄ μμμ μ€νμΌμ λ΄λΉνλ CSSκ° ν¬κ³ μ΅μ νλμ§ μμ νμΌμ 묻ν μλ€λ©΄ LCPκ° μ§μ°λ κ²μ λλ€. μ½λ λΆν μ μ€μ μ½ν μΈ μ λν μ€νμΌμ μ°μ μνμ¬ μ£Όμ μ½ν μΈ κ° λ 빨리 λνλκ³ νμ΄μ§ λ‘λ μλμ λν μ¬μ©μ μΈμμ κ°μ νλλ‘ ν©λλ€.
ν₯μλ νμ₯μ±κ³Ό μ μ§ κ΄λ¦¬μ±
μ ν리μΌμ΄μ μ΄ μ±μ₯ν¨μ λ°λΌ μ€νμΌμνΈλ μ±μ₯ν©λλ€. λ¨μΌνκ³ ν° CSS νμΌμ κ΄λ¦¬νκΈ°κ° μ λͺ½μ΄ λ©λλ€. ν μμμ λ³κ²½ μ¬νμ΄ μλμΉ μκ² λ€λ₯Έ μμμ μν₯μ λ―Έμ³ νκ· λ° κ°λ° μκ° μ¦κ°λ₯Ό μ λ°ν μ μμ΅λλ€. μ½λ λΆν μ μ€νμΌμ΄ μν₯μ λ―ΈμΉλ κ΅¬μ± μμ λλ νμ΄μ§μ λ°μ νκ² μ°κ²°λ λͺ¨λμ μν€ν μ²λ₯Ό μ΄μ§ν©λλ€.
- κ΅¬μ± μμ κΈ°λ° κ°λ°: React, Vue, Angularμ κ°μ νλ νλ μμν¬μμ μ ν리μΌμ΄μ μ μ¬μ¬μ© κ°λ₯ν κ΅¬μ± μμλ‘ κ΅¬μΆλ©λλ€. μ½λ λΆν μ ν΅ν΄ κ° κ΅¬μ± μμλ μ체 μ€νμΌμ 보μ ν μ μμΌλ―λ‘ κ΅¬μ± μμκ° λ‘λλ λ κ΄λ ¨ CSSλ§ κ°μ Έμ΅λλ€. μ΄ μΊ‘μνλ μ€νμΌ μΆ©λμ λ°©μ§νκ³ κ΅¬μ± μμλ₯Ό μ§μ μΌλ‘ μ΄μ κ°λ₯νκ² λ§λλλ€.
- μ¬μ΄ λλ²κΉ λ° κ°λ°: μ€νμΌμ΄ 격리λλ©΄ λλ²κΉ μ΄ ν¨μ¬ κ°λ¨ν΄μ§λλ€. κ°λ°μλ μμ² μ€μ κΈλ‘λ² CSSλ₯Ό μ μ μ΄ λ€μ§λ λμ μκ³ μ μ© νμΌ λ΄μμ μ€νμΌλ§ λ¬Έμ μ μΆμ²λ₯Ό μ μνκ² νμ ν μ μμ΅λλ€. μ΄λ κ°λ° μ£ΌκΈ°λ₯Ό λ¨μΆνκ³ μ 체 μ¬μ΄νΈμ μν₯μ λ―ΈμΉλ μ€λ₯ κ°λ₯μ±μ μ€μ λλ€.
- "μ£½μ" CSS κ°μ: μκ°μ΄ μ§λ¨μ λ°λΌ κΈλ‘λ² μ€νμΌμνΈλ "μ£½μ" λλ μ¬μ©λμ§ μλ CSS κ·μΉμ μΆμ ν©λλ€. μ½λ λΆν μ PurgeCSSμ κ°μ λꡬμ κ²°ν©νμ¬ νΉμ 보기 λλ κ΅¬μ± μμμ μ€μ λ‘ νμν κ²λ§ ν¬ν¨ν¨μΌλ‘μ¨ μ΄λ¬ν μ¬μ©λμ§ μλ μ€νμΌμ μ κ±°νμ¬ νμΌ ν¬κΈ°λ₯Ό λμ± μ€μ΄λ λ° λμμ΄ λ©λλ€.
λ€μν λ€νΈμν¬ μ λ°μ κ±ΈμΉ ν₯μλ μ¬μ©μ κ²½ν
κΈλ‘λ² λμ€μ κ΄λ²μν λ€νΈμν¬ μλμ μ₯μΉ κΈ°λ₯μ μ 곡ν©λλ€. κ΄μ¬μ μΈν°λ·μ κ°μΆ λλμ μ¬μ©μλ λλ¦° λͺ¨λ°μΌ μ°κ²°μ μμ‘΄νλ μΈλ΄ λ§μμ μ¬μ©μμ λ§€μ° λ€λ₯Έ κ²½νμ νκ² λ κ²μ λλ€.
- λ€νΈμν¬ μ§μ°μ λν 볡μλ ₯: λ μκ³ λ³λ ¬μ μΈ CSS μμ²μ λμ λ€νΈμν¬ μ§μ° μκ°μ λ νλ ₯μ μ λλ€. ν λ²μ κΈ΄ λ€μ΄λ‘λ λμ , νΉν λμ μ€νΈλ¦Όμ λ€μ€νλ₯Ό μ μ²λ¦¬νλ HTTP/2λ₯Ό ν΅ν΄ μ¬λ¬ κ°μ μμ λ€μ΄λ‘λκ° μ’ μ’ λ λΉ λ₯΄κ² μλ£λ μ μμ΅λλ€.
- λ°μ΄ν° μ¬μ©λ κ°μ: μΈ‘μ λμ μ°κ²°μ μ¬μ©νλ μ¬μ©μμ κ²½μ° μ μ‘λλ λ°μ΄ν° μμ μ€μ΄λ κ²μ΄ μ§μ μ μΈ μ΄μ μ λλ€. μ΄λ μ μΈκ³ λ§μ μ§μμμ λͺ¨λ°μΌ λ°μ΄ν°κ° λΉμΈκ±°λ μ νμ μΈ κ²½μ° νΉν κ΄λ ¨μ΄ μμ΅λλ€.
- μΌκ΄λ κ²½ν: κ°μ₯ μ€μν μ€νμΌμ΄ λͺ¨λ κ³³μμ λΉ λ₯΄κ² λ‘λλλλ‘ λ³΄μ₯ν¨μΌλ‘μ¨ μ½λ λΆν μ μ§λ¦¬μ μμΉ λλ λ€νΈμν¬ νμ§μ κ΄κ³μμ΄ λ μΌκ΄λκ³ μμ μ μΈ μ¬μ©μ κ²½νμ μ 곡νλ λ° λμμ΄ λ©λλ€. μ΄λ μΉμ¬μ΄νΈμμ μ λ’°μ μ°Έμ¬λ₯Ό μ‘°μ±νκ³ λ κ°λ ₯ν κΈλ‘λ² λΈλλ μ μ§λ₯Ό ꡬμΆν©λλ€.
λ λμ μΊμ νμ©
ν¬κ³ λ¨μΌν CSS νμΌμ΄ λ³κ²½λλ©΄ μ½κ°λ§ λ³κ²½λλλΌλ λΈλΌμ°μ μμ μ 체 νμΌμ λ€μ λ€μ΄λ‘λν΄μΌ ν©λλ€. μ½λ λΆν μ μ¬μ©νλ©΄ μμ κ΅¬μ± μμμ CSSλ§ λ³κ²½λλ©΄ ν΄λΉ νΉμ μμ CSS νμΌλ§ λ€μ λ€μ΄λ‘λνλ©΄ λ©λλ€. λ³κ²½λμ§ μμ μ ν리μΌμ΄μ μ λλ¨Έμ§ CSSλ μΊμλ μνλ‘ μ μ§λμ΄ νμ νμ΄μ§ λ‘λ μκ°κ³Ό λ°μ΄ν° μ μ‘μ ν¬κ² μ€μ λλ€. μ΄ μ μ§μ μΈ μΊμ± μ λ΅μ κΈλ‘λ² κ·λͺ¨μμ λ°ν μ¬μ©μ κ²½νμ μ΅μ ννλ λ° νμμ μ λλ€.
CSS λΆν κ·μΉ ꡬνμ μν μΌλ°μ μΈ μλ리μ€
CSSλ₯Ό μΈμ μ΄λμ λΆν ν΄μΌ νλμ§ νμ νλ κ²μ΄ μ€μν©λλ€. "CSS λΆν κ·μΉ"μ ν¨κ³Όμ μΌλ‘ μ μ©ν μ μλ μΌλ°μ μΈ μλ리μ€λ λ€μκ³Ό κ°μ΅λλ€.
κ΅¬μ± μμ κΈ°λ° μ€νμΌ
νλ JavaScript νλ μμν¬(React, Vue, Angular, Svelte)μμλ μ ν리μΌμ΄μ μ΄ κ΅¬μ± μμλ₯Ό μ€μ¬μΌλ‘ ꡬ쑰νλ©λλ€. κ° κ΅¬μ± μμλ μ΄μμ μΌλ‘ μ체 μ€νμΌμ ν¬ν¨νμ¬ μ체μ μΌλ‘ ν¬ν¨λμ΄μΌ ν©λλ€.
- μ:
Button
κ΅¬μ± μμλButton
μ΄ νμ΄μ§μ λ λλ§λ λλ§ λ‘λλλ μ€νμΌ(button.css
)μ κ°μ ΈμΌ ν©λλ€. λ§μ°¬κ°μ§λ‘ 볡μ‘νProductCard
κ΅¬μ± μμλproduct-card.css
λ₯Ό λ‘λν μ μμ΅λλ€. - ꡬν: μ’ μ’ CSS λͺ¨λ, CSS-in-JS λΌμ΄λΈλ¬λ¦¬(μ: Styled Components, Emotion)λ₯Ό ν΅ν΄ λ¬μ±λκ±°λ λΉλ λꡬλ₯Ό ꡬμ±νμ¬ κ΅¬μ± μμλ³ CSSλ₯Ό μΆμΆν©λλ€.
νμ΄μ§λ³ λλ κ²½λ‘λ³ μ€νμΌ
μ ν리μΌμ΄μ λ΄μ λ€λ₯Έ νμ΄μ§ λλ κ²½λ‘λ μ’ μ’ μ 체 μ¬μ΄νΈμμ 곡μ λμ§ μλ κ³ μ ν λ μ΄μμ λ° μ€νμΌ μꡬ μ¬νμ κ°μ§λλ€.
- μ: μ μ μκ±°λ μ¬μ΄νΈμ "체ν¬μμ νμ΄μ§"λ "μ ν λͺ©λ‘ νμ΄μ§" λλ "μ¬μ©μ νλ‘ν νμ΄μ§"μ λ§€μ° λ€λ₯Έ μ€νμΌμ κ°μ§ μ μμ΅λλ€. λͺ¨λ 체ν¬μμ μ€νμΌμ μ ν λͺ©λ‘ νμ΄μ§μ λ‘λνλ κ²μ λλΉμ λλ€.
- ꡬν: μ΄λ μΌλ°μ μΌλ‘ λΉλ λꡬ ꡬμ±κ³Ό ν¨κ» λΌμ°ν λΌμ΄λΈλ¬λ¦¬μ λμμ λ°μ νμ¬ κ²½λ‘μ λ°λΌ CSS νμΌμ λμ μΌλ‘ κ°μ Έμ€λ κ²μ ν¬ν¨ν©λλ€.
μ€μ CSS μΆμΆ (Above-the-Fold μ€νμΌ)
μ΄κ²μ μ¦κ°μ μΈ λ·°ν¬νΈμ μ΄μ μ λ§μΆ λΆν μ νΉμ ννμ λλ€. "μ€μ CSS"λ μ€νμΌμ΄ μ§μ λμ§ μμ μ½ν μΈ μ κΉλ°μ(FOUC) μμ΄ νμ΄μ§μ μ΄κΈ° λ·°λ₯Ό λ λλ§νλ λ° νμν μ΅μνμ CSSλ₯Ό μλ―Έν©λλ€.
- μ: νμ΄μ§ λ‘λ μ μ¦μ 보μ΄λ νμ λͺ¨μ, νμ΄λ‘ μΉμ λ° κΈ°λ³Έ λ μ΄μμ.
- ꡬν: λꡬλ νμ΄μ§μ HTMLκ³Ό CSSλ₯Ό λΆμνμ¬ μ΄λ¬ν μ€μ μ€νμΌμ μλ³νκ³ μΆμΆν λ€μ HTMLμ
<head>
νκ·Έμ μ§μ μΈλΌμΈμΌλ‘ μ½μ ν©λλ€. μ΄λ₯Ό ν΅ν΄ μΈλΆ μ€νμΌμνΈκ° μμ ν λ‘λλκΈ° μ μ κ°λ₯ν κ°μ₯ λΉ λ₯Έ μ΄κΈ° λ λλ§μ΄ 보μ₯λ©λλ€.
ν λ§ λ° λΈλλ© μ€νμΌ
μ¬λ¬ ν λ§(μ: λ°μ/μ΄λμ΄ λͺ¨λ) λλ λ€λ₯Έ λΈλλ μμ΄λ΄ν°ν°λ₯Ό μ§μνλ μ ν리μΌμ΄μ μ λΆν μ ν΅ν΄ μ΄μ μ μ»μ μ μμ΅λλ€.
- μ: λ€λ₯Έ ν΄λΌμ΄μΈνΈμ λν νμ΄νΈ λΌλ²¨λ§μ νμ©νλ B2B SaaS νλ«νΌ. κ° ν΄λΌμ΄μΈνΈμ λΈλλ© μ€νμΌμ λμ μΌλ‘ λ‘λλ μ μμ΅λλ€.
- ꡬν: λ€λ₯Έ ν λ§ λλ λΈλλμ λν μ€νμΌμνΈλ λ³λλ‘ μ μ§νκ³ μ¬μ©μ κΈ°λ³Έ μ€μ λλ ꡬμ±μ λ°λΌ 쑰건λΆλ‘ λ‘λν μ μμ΅λλ€.
νμ¬ λΌμ΄λΈλ¬λ¦¬ μ€νμΌ
μΈλΆ λΌμ΄λΈλ¬λ¦¬(μ: Material-UI, Bootstrapκ³Ό κ°μ UI νλ μμν¬ λλ μ°¨νΈ λΌμ΄λΈλ¬λ¦¬)μλ μ’ μ’ μ체 κ΄λ²μν μ€νμΌμνΈκ° μμ΅λλ€.
- μ: μ°¨νΈ λΌμ΄λΈλ¬λ¦¬κ° λΆμ λμ보λμμλ§ μ¬μ©λλ κ²½μ° ν΄λΉ CSSλ λμ보λμ μ‘μΈμ€ν λλ§ λ‘λλμ΄μΌ ν©λλ€.
- ꡬν: λΉλ λꡬλ₯Ό ꡬμ±νμ¬ κ³΅κΈ μ μ²΄λ³ CSSλ₯Ό μ체 λ²λ€μ λ£μ λ€μ ν΄λΉ λΌμ΄λΈλ¬λ¦¬μ ν΄λΉ JavaScript λ²λ€μ΄ λ‘λλ λλ§ λ‘λν μ μμ΅λλ€.
λ°μν λμμΈ μ€λ¨μ λ° λ―Έλμ΄ μΏΌλ¦¬
μ’ μ’ λ¨μΌ μ€νμΌμνΈ λ΄μμ μ²λ¦¬λμ§λ§, κ³ κΈ μλ리μ€μμλ λ―Έλμ΄ μΏΌλ¦¬μ λ°λΌ CSSλ₯Ό λΆν νλ κ²μ ν¬ν¨ν μ μμ΅λλ€(μ: μΈμ λλ λ§€μ° ν° νλ©΄μ λν μ€νμΌλ§ ν΄λΉ μ‘°κ±΄μ΄ μΆ©μ‘±λ λ λ‘λ).
- μ: μΈμ μ μ© μ€νμΌ(
print.css
)μ<link rel="stylesheet" media="print" href="print.css">
λ₯Ό μ¬μ©νμ¬ λ‘λν μ μμ΅λλ€. - ꡬν:
<link>
νκ·Έμmedia
μμ±μ μ¬μ©νλ©΄ λΈλΌμ°μ κ° νμ¬ λ―Έλμ΄ μ‘°κ±΄κ³Ό μΌμΉνμ§ μλ CSS λ€μ΄λ‘λλ₯Ό μ§μ°μν¬ μ μμ΅λλ€.
CSS λΆν κ·μΉ ꡬνμ μν κΈ°μ λ° λꡬ
CSS μ½λ λΆν μ ν¨κ³Όμ μΌλ‘ ꡬννλ €λ©΄ μ’ μ’ μ κ΅ν λΉλ λꡬμ μ리ν μν€ν μ² κ²°μ μ μμ‘΄ν©λλ€.
λΉλ λꡬ ν΅ν©
νλ JavaScript λ²λ€λ¬λ μλνλ CSS μ½λ λΆν μ κΈ°λ°μ λλ€. μμ€ νμΌμ μ²λ¦¬νκ³ , μ’ μμ±μ μ΄ν΄νλ©°, μ΅μ νλ μΆλ ₯ λ²λ€μ μμ±ν©λλ€.
- Webpack:
mini-css-extract-plugin
: JavaScript λ²λ€μμ CSSλ₯Ό λ³λμ.css
νμΌλ‘ μΆμΆνλ λ° μ¬μ©λλ ν΅μ¬ νλ¬κ·ΈμΈμ λλ€. κΈ°λ³Έμ μΌλ‘ Webpackμ μ’ μ’ CSSλ₯Ό JavaScriptμ μ§μ λ²λ€λ‘ λ¬ΆκΈ° λλ¬Έμ νμμ μ λλ€.optimize-css-assets-webpack-plugin
(λλ Webpack 5+μcss-minimizer-webpack-plugin
): μΆμΆλ CSS νμΌμ ν¬κΈ°λ₯Ό λμ± μ€μ΄κΈ° μν΄ μΆμ λ° μ΅μ ννλ λ° μ¬μ©λ©λλ€.SplitChunksPlugin
: μ£Όλ‘ JavaScriptμ©μ΄μ§λ§,SplitChunksPlugin
μ νΉνmini-css-extract-plugin
κ³Ό κ²°ν©λ λ CSS μ²ν¬λ₯Ό λΆν νλλ‘ κ΅¬μ±ν μ μμ΅λλ€. κ³΅κΈ μ 체 CSS, μΌλ° CSS λλ λμ CSS μ²ν¬λ₯Ό λΆλ¦¬νκΈ° μν κ·μΉμ μ μν μ μμ΅λλ€.- λμ κ°μ Έμ€κΈ°: JavaScript μ²ν¬μ λν
import()
ꡬ문(μ:import('./my-component-styles.css')
)μ Webpackμ ν΄λΉ CSSμ λν λ³λμ λ²λ€μ μμ±νμ¬ νμμ λ°λΌ λ‘λνλλ‘ μ§μν©λλ€. - PurgeCSS: μ’ μ’ Webpack νλ¬κ·ΈμΈμΌλ‘ ν΅ν©λλ PurgeCSSλ HTML λ° JavaScript νμΌμ μ€μΊνμ¬ μ¬μ©λμ§ μλ CSS κ·μΉμ μλ³νκ³ λ²λ€μμ μ κ±°ν©λλ€. μ΄λ νΉν Bootstrap λλ Tailwind CSSμ κ°μ΄ λ§μ μ νΈλ¦¬ν° ν΄λμ€κ° μ‘΄μ¬νμ§λ§ λͺ¨λ μ¬μ©λμ§λ μλ νλ μμν¬μμ νμΌ ν¬κΈ°λ₯Ό ν¬κ² μ€μ λλ€.
- Rollup:
rollup-plugin-postcss
λλrollup-plugin-styles
: μ΄λ¬ν νλ¬κ·ΈμΈμ ν΅ν΄ Rollupμ CSS νμΌμ μ²λ¦¬νκ³ Webpackμmini-css-extract-plugin
κ³Ό μ μ¬νκ² λ³λμ λ²λ€λ‘ μΆμΆν μ μμ΅λλ€. Rollupμ κ°μ μ λΌμ΄λΈλ¬λ¦¬ λ° λ 립ν κ΅¬μ± μμμ λν΄ λ§€μ° μ΅μ νλκ³ λ μμ λ²λ€μ μμ±νλ λ° μμΌλ©°, μ΄λ λͺ¨λμ CSS λΆν μ λ§€μ° μ ν©ν©λλ€.
- Parcel:
- Parcelμ ꡬμ±μ΄ νμ μλ λ²λ€λ§μ μ 곡νλ―λ‘ μ’ μ’ μ¦μ CSS μΆμΆ λ° λΆν μ μλμΌλ‘ μ²λ¦¬ν©λλ€. JavaScript νμΌμμ CSS νμΌμ κ°μ Έμ€λ κ²½μ° Parcelμ μ΄λ₯Ό κ°μ§νκ³ μ²λ¦¬νμ¬ λ³λμ CSS λ²λ€μ μμ±ν©λλ€. κ°λ¨ν¨μ μ€μ μ λ κ²μ λΉ λ₯Έ κ°λ°μ΄ μ°μ μλλ νλ‘μ νΈμ λ§€λ ₯μ μΈ μ΅μ μ λλ€.
- Vite:
- Viteλ νλ‘λμ λΉλλ₯Ό μν΄ λ΄λΆμ μΌλ‘ Rollupμ μ¬μ©νλ©° λ§€μ° λΉ λ₯Έ κ°λ° μλ² κ²½νμ μ 곡ν©λλ€. κΈ°λ³Έμ μΌλ‘ CSS μ²λ¦¬λ₯Ό μ§μνλ©° Parcelκ³Ό λ§μ°¬κ°μ§λ‘ νμ€ CSS κ°μ Έμ€κΈ°λ₯Ό μ¬μ©ν λ CSSλ₯Ό λ³λμ νμΌλ‘ μΆμΆνλλ‘ μ€κ³λμμ΅λλ€. λν CSS λͺ¨λ λ° CSS μ μ²λ¦¬κΈ°μλ μλ²½νκ² μλν©λλ€.
νλ μμν¬λ³ λ° μν€ν μ² μ κ·Ό λ°©μ
μΌλ° λ²λ€λ¬ μΈμλ νλ μμν¬μ ν΅ν©λ νΉμ μ κ·Ό λ°©μμ CSSλ₯Ό κ΄λ¦¬νκ³ λΆν νλ κ³ μ ν λ°©λ²μ μ 곡ν©λλ€.
- CSS λͺ¨λ:
- CSS λͺ¨λμ λ²μλ₯Ό μ§μ λ CSSλ₯Ό μ 곡νμ¬ ν΄λμ€ μ΄λ¦μ΄ λ‘μ»¬λ‘ λ²μκ° μ§μ λμ΄ μΆ©λμ λ°©μ§ν©λλ€. JavaScript κ΅¬μ± μμμμ CSS λͺ¨λμ κ°μ Έμ¬ λ λΉλ νλ‘μΈμ€λ μΌλ°μ μΌλ‘ ν΄λΉ CSSλ₯Ό κ΅¬μ± μμμ λ²λ€μ ν΄λΉνλ λ³λμ νμΌλ‘ μΆμΆν©λλ€. μ΄λ κ΅¬μ± μμ μμ€μ μ€νμΌ κ²©λ¦¬ λ° νμμ λ°λ₯Έ λ‘λλ₯Ό μ§μνμ¬ λ³Έμ§μ μΌλ‘ "CSS λΆν κ·μΉ"μ μ§μν©λλ€.
- CSS-in-JS λΌμ΄λΈλ¬λ¦¬ (μ: Styled Components, Emotion):
- μ΄λ¬ν λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νλ©΄ νκ·Έ μ§μ λ ν νλ¦Ώ 리ν°λ΄ λλ κ°μ²΄λ₯Ό μ¬μ©νμ¬ JavaScript κ΅¬μ± μμ λ΄μμ μ§μ CSSλ₯Ό μμ±ν μ μμ΅λλ€. μ£Όμ μ΄μ μ μ€νμΌμ΄ κ΅¬μ± μμμ μλμΌλ‘ μ°κ²°λλ€λ κ²μ λλ€. λΉλ νλ‘μΈμ€ μ€μ λ§μ CSS-in-JS λΌμ΄λΈλ¬λ¦¬λ μλ² μΈ‘ λ λλ§μ μν μ€μ CSSλ₯Ό μΆμΆνκ³ κ³ μ ν ν΄λμ€ μ΄λ¦μ μμ±νμ¬ κ΅¬μ± μμ μμ€μμ μ€νμΌμ ν¨κ³Όμ μΌλ‘ λΆν ν μ μμ΅λλ€. μ΄ μ κ·Ό λ°©μμ ν΄λΉ κ΅¬μ± μμκ° μ‘΄μ¬ν λλ§ μ€νμΌμ λ‘λνλ€λ μμ΄λμ΄μ μμ°μ€λ½κ² μΌμΉν©λλ€.
- μ νΈλ¦¬ν° μ°μ CSS νλ μμν¬ (μ: JIT/Purgeκ° μλ Tailwind CSS):
- Tailwind CSSμ κ°μ νλ μμν¬λ λ¨μΌνκ³ κ±°λν μ νΈλ¦¬ν° μ€νμΌμνΈλ‘ "λΆν " μμ΄λμ΄μ λ°νλ κ²μ²λΌ λ³΄μΌ μ μμ§λ§, μ΅μ Just-In-Time (JIT) λͺ¨λ λ° μ κ±° κΈ°λ₯μ μ€μ λ‘ μ μ¬ν ν¨κ³Όλ₯Ό λ¬μ±ν©λλ€. JIT λͺ¨λλ HTMLμ μμ±ν¨μ λ°λΌ CSSλ₯Ό νμμ λ°λΌ μμ±νμ¬ μ€μ λ‘ μ¬μ©νλ μ νΈλ¦¬ν° ν΄λμ€λ§ ν¬ν¨ν©λλ€. νλ‘λμ λΉλμμ PurgeCSSμ ν¨κ» μ¬μ©νλ©΄ μ¬μ©λμ§ μλ μ νΈλ¦¬ν° ν΄λμ€κ° μ κ±°λμ΄ μ¬μ©λ νΉμ ν΄λμ€μ λ§κ² ν¨κ³Όμ μΌλ‘ "λΆν "λ λ§€μ° μκ³ κ³ λλ‘ μ΅μ νλ CSS νμΌμ΄ μμ±λ©λλ€. μ΄κ²μ μ¬λ¬ νμΌλ‘ λΆν νλ κ²μ΄ μλλΌ λ¨μΌ νμΌμμ μ¬μ©λμ§ μλ κ·μΉμ λΆν νλ κ²μ΄λ©°, μ¬μ©λ κ·μΉμ μ μΈν νμΌ ν¬κΈ°λ₯Ό μ€μ¬ μ μ¬ν μ±λ₯ μ΄μ μ λ¬μ±ν©λλ€.
μ€μ CSS μμ± λꡬ
μ΄λ¬ν λꡬλ FOUCλ₯Ό λ°©μ§νκΈ° μν΄ "above-the-fold" CSSλ₯Ό μΆμΆνκ³ μΈλΌμΈνλ λ° νΉν μ¬μ©λ©λλ€.
- Critters / Critical CSS:
critters
(Google Chrome Labs) λλcritical
(Node.js λͺ¨λ)κ³Ό κ°μ λꡬλ νμ΄μ§μ HTMLκ³Ό μ°κ²°λ μ€νμΌμνΈλ₯Ό λΆμνμ¬ λ·°ν¬νΈμ νμμ μΈ μ€νμΌμ κ²°μ ν λ€μ ν΄λΉ μ€νμΌμ HTMLμ<head>
μ μ§μ μΈλΌμΈν©λλ€. κ·Έλ¬λ©΄ λλ¨Έμ§ CSSλ₯Ό λΉλκΈ°μ μΌλ‘ λ‘λν μ μμ΄ λ λλ§ μ°¨λ¨ μκ°μ μ€μΌ μ μμ΅λλ€. μ΄λ μ΄κΈ° λ‘λ μ±λ₯μ κ°μ νλ κ°λ ₯ν κΈ°μ μ΄λ©°, νΉν λλ¦° μ°κ²°μ κ°μ§ κΈλ‘λ² μ¬μ©μμ κ²½μ° λμ± κ·Έλ μ΅λλ€. - PostCSS νλ¬κ·ΈμΈ: PostCSSλ JavaScript νλ¬κ·ΈμΈμ μ¬μ©νμ¬ CSSλ₯Ό λ³ννλ λꡬμ λλ€. μ΅μ ν, μλ μ λμ¬ μ§μ λ° μ€μ CSS μΆμΆ λλ κ·μΉμ λ°λΌ μ€νμΌμνΈ λΆν κ³Ό κ°μ μμ μ μν λ§μ νλ¬κ·ΈμΈμ΄ μμ΅λλ€.
CSS λΆν κ·μΉ ꡬν: μ€μ©μ μΈ μν¬νλ‘
CSS μ½λ λΆν μ μ±ννλ κ²μ μ΅μ ν κΈ°νλ₯Ό μλ³νλ κ²λΆν° λΉλ νμ΄νλΌμΈμ ꡬμ±νλ κ²κΉμ§ μ¬λ¬ λ¨κ³λ₯Ό ν¬ν¨ν©λλ€.
1. νμ¬ CSS λ‘λ λΆμ
- λΈλΌμ°μ κ°λ°μ λꡬ(μ: Chrome DevToolsμ "Coverage" ν)λ₯Ό μ¬μ©νμ¬ μ¬μ©λμ§ μλ CSSλ₯Ό μλ³ν©λλ€. μ΄λ κ² νλ©΄ μ§μ λ νμ΄μ§μμ νμ¬ μ€νμΌμνΈμ μ΄λ λΆλΆμ΄ μ€μ λ‘ μ¬μ©λκ³ μλμ§ νμλ©λλ€.
- Lighthouseμ κ°μ λꡬλ₯Ό μ¬μ©νμ¬ νμ΄μ§ λ‘λ μ±λ₯μ νλ‘νμΌλ§ν©λλ€. FCP, LCP λ° "λ λλ§ μ°¨λ¨ λ¦¬μμ€ μ κ±°"μ κ°μ λ©νΈλ¦μ μ£Όμλ₯Ό κΈ°μΈμ΄μμμ€. μ΄λ κ² νλ©΄ νμ¬ CSSμ μν₯μ κ°μ‘° νμν μ μμ΅λλ€.
- μ ν리μΌμ΄μ μν€ν μ²λ₯Ό μ΄ν΄νμμμ€. κ΅¬μ± μμλ₯Ό μ¬μ©νκ³ μμ΅λκΉ? λ³λμ νμ΄μ§ λλ κ²½λ‘κ° μμ΅λκΉ? μ΄λ₯Ό ν΅ν΄ μμ°μ€λ¬μ΄ λΆν μ§μ μ νμ νλ λ° λμμ΄ λ©λλ€.
2. λΆν μ§μ λ° μ λ΅ μλ³
- κ΅¬μ± μμ μμ€: κ΅¬μ± μμ κΈ°λ° μ ν리μΌμ΄μ μ κ²½μ° ν΄λΉ κ΅¬μ± μμμ ν¨κ» CSSλ₯Ό λ²λ€λ‘ λ¬Άλ κ²μ λͺ©νλ‘ ν©λλ€.
- κ²½λ‘/νμ΄μ§ μμ€: λ€μ€ νμ΄μ§ μ ν리μΌμ΄μ λλ κ³ μ ν κ²½λ‘κ° μλ λ¨μΌ νμ΄μ§ μ ν리μΌμ΄μ μ κ²½μ° κ° κ²½λ‘μ λν΄ νΉμ CSS λ²λ€μ λ‘λνλ κ²μ κ³ λ €ν©λλ€.
- μ€μ κ²½λ‘: μ΄κΈ° λ·°ν¬νΈμ λν μ€μ CSSλ₯Ό μΆμΆνκ³ μΈλΌμΈνλ κ²μ νμ λͺ©νλ‘ ν©λλ€.
- κ³΅κΈ μ 체/곡μ : νμ¬ λΌμ΄λΈλ¬λ¦¬ CSS λ° μ ν리μΌμ΄μ μ μ¬λ¬ λΆλΆμμ μ¬μ©λλ 곡μ μ€νμΌμ μΊμλ κ³΅κΈ μ 체 μ²ν¬λ‘ λΆλ¦¬ν©λλ€.
3. λΉλ λꡬ ꡬμ±
- Webpack:
- CSSλ₯Ό μΆμΆνκΈ° μν΄ Webpack ꡬμ±μ
mini-css-extract-plugin
μ μ€μΉνκ³ κ΅¬μ±ν©λλ€. SplitChunksPlugin
μ μ¬μ©νμ¬ κ³΅κΈ μ 체 CSS λ° λμ CSS κ°μ Έμ€κΈ°μ λν λ³λμ μ²ν¬λ₯Ό λ§λλλ€.- μ¬μ©λμ§ μλ μ€νμΌμ μ κ±°νκΈ° μν΄
PurgeCSS
λ₯Ό ν΅ν©ν©λλ€. - CSSλ₯Ό κ°μ Έμ€λ CSS νμΌ λλ JavaScript νμΌμ λν λμ
import()
μ€μ (μ:const Component = () => import('./Component.js');
Component.js
κ°Component.css
λ₯Ό κ°μ Έμ€λ κ²½μ°).
- CSSλ₯Ό μΆμΆνκΈ° μν΄ Webpack ꡬμ±μ
- κΈ°ν λ²λ€λ¬: Parcel, Rollup λλ Viteμ λν μ€λͺ μλ₯Ό μ°Έμ‘°νμ¬ CSS μ²λ¦¬ ꡬμ±μ νμΈνμμμ€. λ§μ λκ΅¬κ° μλ λΆν λλ κ°λ¨ν νλ¬κ·ΈμΈμ μ 곡ν©λλ€.
4. λ‘λ© μ λ΅ μ΅μ ν
- μ€μ CSS μΈλΌμΈ: λꡬλ₯Ό μ¬μ©νμ¬ μ€μ CSSλ₯Ό μμ±νκ³ HTML
<head>
μ μ§μ ν¬ν¨ν©λλ€. - λΉλκΈ° λ‘λ©: μ€μνμ§ μμ CSSμ κ²½μ° λ λλ§ μ°¨λ¨μ λ°©μ§νκΈ° μν΄ λΉλκΈ°μ μΌλ‘ λ‘λν©λλ€. μΌλ°μ μΈ κΈ°μ μ
<link rel="preload" as="style" onload="this.rel='stylesheet'">
λλ Polyfill.ioμ loadCSS ν¨ν΄μ μ¬μ©νλ κ²μ λλ€. - λ―Έλμ΄ μΏΌλ¦¬:
<link>
νκ·Έμmedia
μμ±μ μ¬μ©νμ¬ CSSλ₯Ό 쑰건λΆλ‘ λ‘λν©λλ€(μ:media="print"
). - HTTP/2 νΈμ (μ£Όμνμ¬ μ¬μ©): κΈ°μ μ μΌλ‘ κ°λ₯νμ§λ§, HTTP/2 νΈμλ μΊμ± λ¬Έμ λ° λΈλΌμ°μ ꡬν 볡μ‘μ±μΌλ‘ μΈν΄ μΈκΈ°λ₯Ό μμμ΅λλ€. λΈλΌμ°μ λ μΌλ°μ μΌλ‘ 리μμ€λ₯Ό μμΈ‘νκ³ μ¬μ λ‘λνλ λ° λ λ₯μν©λλ€. λ¨Όμ λΈλΌμ°μ λ€μ΄ν°λΈ μ΅μ νμ μ§μ€νμμμ€.
5. ν μ€νΈ, λͺ¨λν°λ§ λ° λ°λ³΅
- λΆν μ ꡬνν ν FOUC λλ μκ°μ νκ·μ λν΄ μ ν리μΌμ΄μ μ μ² μ ν ν μ€νΈν©λλ€.
- FCP, LCP λ° μ λ°μ μΈ λ‘λ μκ°μ λ―ΈμΉλ μν₯μ μΈ‘μ νκΈ° μν΄ Lighthouse, WebPageTest λ° κΈ°ν μ±λ₯ λͺ¨λν°λ§ λꡬλ₯Ό μ¬μ©ν©λλ€.
- νΉν λ€λ₯Έ μ§λ¦¬μ μμΉ λ° λ€νΈμν¬ μ‘°κ±΄μ μ¬μ©μμκ² μν₯μ μΈ‘μ ν©λλ€.
- μ ν리μΌμ΄μ μ΄ λ°μ ν¨μ λ°λΌ λΆν μ λ΅μ μ§μμ μΌλ‘ κ°μ νμμμ€. μ΄κ²μ μ§ν μ€μΈ νλ‘μΈμ€μ λλ€.
κΈλ‘λ² λμ€μ μν κ³ κΈ κ³ λ € μ¬ν λ° λͺ¨λ² μ¬λ‘
CSS λΆν μ ν΅μ¬ κ°λ μ κ°λ¨νμ§λ§, νΉν κΈλ‘λ² λλ¬ λ²μλ₯Ό μν μ€μ ꡬνμλ λ―Έλ¬ν κ³ λ € μ¬νμ΄ ν¬ν¨λ©λλ€.
μΈλΆμ± κ· ν: λΆν μ κΈ°μ
μ΅μ μ λΆν κ³Ό κ³Όλν λΆν μ¬μ΄μλ λ―Έλ¬ν μ°¨μ΄κ° μμ΅λλ€. λ무 λ§μ μμ CSS νμΌμ κ³Όλν HTTP μμ²μΌλ‘ μ΄μ΄μ§ μ μμΌλ©°, μ΄λ HTTP/2λ‘ μνλμ§λ§ μ¬μ ν μ€λ²ν€λκ° λ°μν©λλ€. λ°λλ‘ νμΌ μκ° λ무 μ μΌλ©΄ μ΅μ νκ° λ λ©λλ€. "CSS λΆν κ·μΉ"μ μμμ λΆν μ΄ μλλΌ μ§λ₯μ μΈ μ²ν¬ λΆν μ κ΄ν κ²μ λλ€.
- λͺ¨λ μ°ν© κ³ λ €: λ§μ΄ν¬λ‘ νλ‘ νΈμλ μν€ν μ²μ κ²½μ° λͺ¨λ μ°ν©(Webpack 5+)μ λ€λ₯Έ μ ν리μΌμ΄μ μμ CSS μ²ν¬λ₯Ό λμ μΌλ‘ λ‘λν μ μμ΄ μΌλ° μ€νμΌμ 곡μ νλ©΄μ μ§μ ν λ 립μ μΈ λ°°ν¬λ₯Ό νμ©ν©λλ€.
- HTTP/2 μ΄μ: HTTP/2μ λ€μ€νλ λ¨μΌ TCP μ°κ²°μ ν΅ν΄ μ¬λ¬ μμ²μ λ³΄λΌ μ μλλ‘ νμ¬ λ€μ€ μν νμΌ(HTTP/1.1 νμ μ΄μ λ¬Έμ )κ³Ό κ΄λ ¨λ μ€λ²ν€λλ₯Ό μ€μ λλ€. μ΄λ μΌλ°μ μΌλ‘ λ μ μ μ±λ₯ μ ν μμ΄ λ λ§μ μν CSS νμΌμ κ°λ κ²μ κ°λ₯νκ² ν©λλ€. HTTP/3λ UDP κΈ°λ° QUICλ₯Ό ν΅ν΄ μ΄λ₯Ό λμ± κ°μ νμ¬ ν¨ν· μμ€ λ° λ€νΈμν¬ λ³κ²½μ λμ± νλ ₯μ μ΄λ―λ‘ λΆμμ ν μ°κ²°μ κ°μ§ μ¬μ©μμκ² μ΄μ μ μ 곡ν©λλ€. κ·Έλ¬λ μ΄λ¬ν λ°μ μλ λΆκ΅¬νκ³ μ¬μ ν νκ³κ° μμ΅λλ€. λͺ©νλ λ¨μν μμμ λΆν μ΄ μλλΌ μ§λ₯μ μΈ λΆν μ μ μ§νλ κ²μ λλ€.
μ€νμΌμ΄ μ§μ λμ§ μμ μ½ν μΈ μ κΉλ°μ (FOUC) λ°©μ§
FOUCλ λΈλΌμ°μ κ° νμν CSSλ₯Ό λ‘λνκΈ° μ μ HTMLμ λ λλ§νμ¬ μ€νμΌμ΄ μ§μ λμ§ μμ μ½ν μΈ μ μκ°μ μΈ "κΉλ°μ"μ μ λ°ν λ λ°μν©λλ€. μ΄κ²μ νΉν λλ¦° λ€νΈμν¬λ₯Ό κ°μ§ μ¬μ©μμκ² μ€μν μ¬μ©μ κ²½ν λ¬Έμ μ λλ€.
- μ€μ CSS: μ€μ CSSλ₯Ό μΈλΌμΈνλ κ²μ΄ FOUCλ₯Ό λ°©μ§νλ κ°μ₯ ν¨κ³Όμ μΈ λ°©λ²μ λλ€.
- SSR (μλ² μΈ‘ λ λλ§): SSRμ μ¬μ©νλ κ²½μ° μλ²κ° νμ CSSλ₯Ό ν¬ν¨νκ±°λ λΉμ°¨λ¨ λ°©μμΌλ‘ μ°κ²°νμ¬ HTMLμ λ λλ§νλμ§ νμΈνμμμ€. Next.js λ° Nuxt.jsμ κ°μ νλ μμν¬λ μ΄λ₯Ό μ°μνκ² μ²λ¦¬ν©λλ€.
- λ‘λ/μ리 νμμ: FOUCμ λν μ§μ μ μΈ ν΄κ²°μ± μ μλμ§λ§, 골격 νλ©΄μ΄λ λ‘λ© νμκΈ°λ₯Ό μ¬μ©νλ©΄ CSS λ‘λ©μ μμ ν μ΅μ νν μ μλ κ²½μ° μ§μ°μ μ¨κΈΈ μ μμ΅λλ€.
μΊμ 무ν¨ν μ λ΅
ν¨κ³Όμ μΈ μΊμ±μ κΈλ‘λ² μ±λ₯μ λ§€μ° μ€μν©λλ€. CSS νμΌμ΄ λΆν λλ©΄ μΊμ 무ν¨νκ° λ μΈλΆνλ©λλ€.
- μ½ν
μΈ ν΄μ±: νμΌ μ½ν
μΈ μ ν΄μλ₯Ό νμΌ μ΄λ¦μ μΆκ°ν©λλ€(μ:
main.abcdef123.css
). λ΄μ©μ΄ λ³κ²½λλ©΄ ν΄μκ° λ³κ²½λμ΄ λΈλΌμ°μ κ° μ νμΌμ λ€μ΄λ‘λνλλ‘ κ°μ νλ λμμ μ΄μ λ²μ μ 무기ν μΊμν μ μλλ‘ ν©λλ€. μ΄κ²μ μ΅μ λ²λ€λ¬μ νμ€ κ΄νμ λλ€. - λ²μ κΈ°λ° λ¬΄ν¨ν: ν΄μ±λ³΄λ€ λ μΈλΆνλμ§λ§, μμ£Ό λ³κ²½λμ§ μλ 곡μ μΌλ° CSSμ μ¬μ©ν μ μμ΅λλ€.
μλ² μΈ‘ λ λλ§ (SSR) λ° CSS
SSRμ μ¬μ©νλ μ ν리μΌμ΄μ μ κ²½μ° CSS λΆν μ μ¬λ°λ₯΄κ² μ²λ¦¬νλ κ²μ΄ μ€μν©λλ€. μλ²λ FOUCλ₯Ό νΌνκΈ° μν΄ μ΄κΈ° HTML νμ΄λ‘λμ νμν CSSλ₯Ό ν¬ν¨ν΄μΌ ν©λλ€.
- μ€νμΌ μΆμΆ: CSS-in-JS λΌμ΄λΈλ¬λ¦¬λ μ’ μ’ μλ²μμ λ λλ§λ κ΅¬μ± μμμ μν΄ μ¬μ©λ μ€μ μ€νμΌμ μΆμΆνκ³ μ΄κΈ° HTMLμ μ½μ νμ¬ μλ² μΈ‘ λ λλ§ μ§μμ μ 곡ν©λλ€.
- SSR μΈμ λ²λ€λ§: λΉλ λꡬλ μλ² λ λλ§λ κ΅¬μ± μμμ νμν CSSλ₯Ό μ¬λ°λ₯΄κ² μλ³νκ³ ν¬ν¨νλλ‘ κ΅¬μ±ν΄μΌ ν©λλ€.
κΈλ‘λ² λ€νΈμν¬ μ§μ° λ° CDN μ λ΅
μλ²½νκ² λΆν λ CSSλ₯Ό μ¬μ©νλλΌλ κΈλ‘λ² λ€νΈμν¬ μ§μ°μ μ λ¬μ μν₯μ λ―ΈμΉ μ μμ΅λλ€.
- μ½ν μΈ μ μ‘ λ€νΈμν¬ (CDN): λΆν λ CSS νμΌμ μ§λ¦¬μ μΌλ‘ λΆμ°λ μλ²μ λ°°ν¬ν©λλ€. μ¬μ©μκ° μ¬μ΄νΈλ₯Ό μμ²νλ©΄ CSSλ κ°μ₯ κ°κΉμ΄ CDN μ£μ§ μμΉμμ μ 곡λμ΄ μ§μ° μκ°μ ν¬κ² μ€μ λλ€. μ§μ ν κΈλ‘λ² λμ€μκ²λ νμ λΆκ°κ²°ν©λλ€.
- μλΉμ€ μ컀: CSS νμΌμ μ κ·Ήμ μΌλ‘ μΊμνμ¬ λ°ν μ¬μ©μμκ² μ¦κ°μ μΈ λ‘λλ₯Ό μ 곡ν μ μμΌλ©°, μ€νλΌμΈμμλ μ¬μ©ν μ μμ΅λλ€.
μν₯ μΈ‘μ : κΈλ‘λ² μ±κ³΅μ μν Web Vitals
CSS λΆν λ Έλ ₯μ κΆκ·Ήμ μΈ μ²λλ Core Web Vitals λ° κΈ°ν μ±λ₯ λ©νΈλ¦μ λ―ΈμΉλ μν₯μ λλ€.
- κ°μ₯ ν° μ½ν μΈ νμΈνΈ (LCP): μ€μ CSS λ‘λμ μ§μ μ μΈ μν₯μ λ°μ΅λλ€. λ λΉ λ₯Έ LCPλ μ£Όμ μ½ν μΈ κ° λ 빨리 νμλ¨μ μλ―Έν©λλ€.
- 첫 λ²μ§Έ μ½ν μΈ νμΈνΈ (FCP): 첫 λ²μ§Έ μ½ν μΈ κ° λ λλ§λ λλ₯Ό νμν©λλ€. μΈμλ μλμ μ’μ΅λλ€.
- 첫 λ²μ§Έ μ λ ₯ μ§μ° (FID): μ£Όλ‘ JavaScript λ©νΈλ¦μ΄μ§λ§, λ¬΄κ±°μ΄ CSS λ‘λλ λ©μΈ μ€λ λλ₯Ό κ°μ μ μΌλ‘ μ°¨λ¨νμ¬ μνΈ μμ©μ μν₯μ λ―ΈμΉ μ μμ΅λλ€.
- λμ λ μ΄μμ λ³κ²½ (CLS): μλͺ» λ‘λλ CSS(λλ λ¦κ² λ‘λλλ κΈκΌ΄)λ λ μ΄μμ λ³κ²½μ μ λ°ν μ μμ΅λλ€. μ€μ CSSλ μ΄λ₯Ό λ°©μ§νλ λ° λμμ΄ λ©λλ€.
- λ€μν μ§μ λ° μ₯μΉμ μ€μ μ¬μ©μ κ²½νμ μ΄ν΄νκΈ° μν΄ μ€μ μ¬μ©μ λͺ¨λν°λ§(RUM) λꡬλ₯Ό μ¬μ©νμ¬ μ΄λ¬ν λ©νΈλ¦μ μ μΈκ³μ μΌλ‘ λͺ¨λν°λ§νμμμ€.
κ³Όμ λ° μ μ¬μ ν¨μ
"CSS λΆν κ·μΉ"μ ꡬννλ κ²μ λ§€μ° μ μ΅νμ§λ§ μ΄λ €μμ΄ λ°λ₯΄μ§ μλ κ²μ μλλλ€.
κ΅¬μ± λ³΅μ‘μ±
μ΅μ μ CSS λΆν μ μν κ³ κΈ Webpack λλ Rollup ꡬμ±μ μ€μ νλ κ²μ λ‘λ, νλ¬κ·ΈμΈ λ° μ²ν¬ λΆν μ λ΅μ λν κΉμ μ΄ν΄κ° νμνμ¬ λ³΅μ‘ν μ μμ΅λλ€. μλͺ»λ ꡬμ±μ μ€λ³΅ CSS, λλ½λ μ€νμΌ λλ μ±λ₯ νκ·λ₯Ό μ λ°ν μ μμ΅λλ€.
μ’ μμ± κ΄λ¦¬
κ° κ΅¬μ± μμ λλ νμ΄μ§μ CSS μ’ μμ±μ΄ μ¬λ°λ₯΄κ² μλ³λκ³ λ²λ€λ‘ λ¬Άμ΄λλ‘ νλ κ²μ΄ κΉλ€λ‘μΈ μ μμ΅λλ€. μ€μ²©λλ μ€νμΌ λλ 곡μ μ νΈλ¦¬ν°λ ν¨κ³Όμ μΈ λΆν μ λ¬μ±νλ©΄μ μ€λ³΅μ νΌνκΈ° μν΄ μ μ€νκ² κ΄λ¦¬ν΄μΌ ν©λλ€.
μ€νμΌ μ€λ³΅ κ°λ₯μ±
μ¬λ°λ₯΄κ² ꡬμ±λμ§ μμΌλ©΄ λμ CSS κ°μ Έμ€κΈ° λλ κ΅¬μ± μμλ³ λ²λ€μ΄ λμΌν CSS κ·μΉμ΄ μ¬λ¬ νμΌμ μ‘΄μ¬ν μ μλ μλ리μ€λ‘ μ΄μ΄μ§ μ μμ΅λλ€. κ°λ³ νμΌμ΄ λ μλλΌλ λμ λ€μ΄λ‘λ ν¬κΈ°κ° μ¦κ°ν μ μμ΅λλ€. Webpackμ SplitChunksPlugin
κ³Ό κ°μ λꡬλ κ³΅ν΅ λͺ¨λμ μΆμΆνμ¬ μ΄λ₯Ό μννλ λ° λμμ΄ λ©λλ€.
λΆμ° μ€νμΌ λλ²κΉ
μ€νμΌμ΄ μ¬λ¬ κ°μ μμ νμΌμ λΆμ°λλ©΄ μ€νμΌλ§ λ¬Έμ λλ²κΉ μ΄ λ μ΄λ €μμ§ μ μμ΅λλ€. λΈλΌμ°μ κ°λ°μ λꡬλ νΉμ κ·μΉμ΄ λ°μνλ CSS νμΌμ μλ³νλ λ° νμμ μ λλ€. μμ€ λ§΅μ΄ μ¬κΈ°μ λ§€μ° μ€μν©λλ€.
CSS μ½λ λΆν μ λ―Έλ
μΉμ΄ λ°μ ν¨μ λ°λΌ CSS μ΅μ ν κΈ°μ λ κ³μ λ°μ ν κ²μ λλ€.
- 컨ν μ΄λ 쿼리: 컨ν μ΄λ 쿼리μ κ°μ ν₯ν CSS κΈ°λ₯μ λ μ§μνλ μ€νμΌμ κ°λ₯νκ² νμ¬ λ·°ν¬νΈ ν¬κΈ°κ° μλ κ΅¬μ± μμ ν¬κΈ°μ λ°λΌ μ€νμΌμ λ²λ€λ‘ λ¬Άκ±°λ λ‘λνλ λ°©λ²μ μν₯μ λ―ΈμΉ μ μμ΅λλ€.
- λΈλΌμ°μ λ€μ΄ν°λΈ CSS λͺ¨λ?: μΆμΈ‘μ λΆκ³Όνμ§λ§, μΉ κ΅¬μ± μμ λ° λ΄μ₯ λͺ¨λ μμ€ν μ λν μ§μμ μΈ λ Όμλ κ²°κ΅ λ²μκ° μ§μ λκ±°λ κ΅¬μ± μμ μμ€μ CSSμ λν λ λ§μ λ€μ΄ν°λΈ λΈλΌμ°μ μ§μμΌλ‘ μ΄μ΄μ Έ μΌλΆ μΈ‘λ©΄μ λΆν μ 볡μ‘ν λΉλ λꡬμ λν μμ‘΄μ±μ μ€μΌ μ μμ΅λλ€.
- λΉλ λꡬμ μ§ν: λ²λ€λ¬λ λ μ κ΅ν κΈ°λ³Έ λΆν μ λ΅κ³Ό κ³ κΈ μλ리μ€μ λν λ μ¬μ΄ ꡬμ±μ μ 곡νμ¬ μ μΈκ³ κ°λ°μλ₯Ό μν κ³ μ±λ₯ μΉ κ°λ° μ‘μΈμ€λ₯Ό λμ± λ―Όμ£Όννλ©΄μ κ³μ λ°μ ν κ²μ λλ€.
κ²°λ‘ : κΈλ‘λ² λμ€μ μν νμ₯μ± λ° μ±λ₯ μμ©
"CSS λΆν κ·μΉ", μ¦ CSS μ½λ λΆν μ μ λ΅μ μ μ©μ κΈλ‘λ² λλ¬ λ²μμ μ΅μ μ μ±λ₯μ λͺ©νλ‘ νλ λͺ¨λ μ΅μ μΉ μ ν리μΌμ΄μ μ νμμ μΈ κ΄νμ λλ€. μ΄κ²μ λ¨μν κΈ°μ μ μ΅μ νλ₯Ό λμ΄μ κ²μ λλ€. μ€νμΌμ μ κ·Όνλ λ°©μμ λν κ·Όλ³Έμ μΈ λ³νμ΄λ©°, λͺ¨λ리μ μ€νμΌμνΈμμ λͺ¨λμ, νμμ λ°λ₯Έ μ λ¬ λͺ¨λΈλ‘ μ ννλ κ²μ λλ€. μ ν리μΌμ΄μ μ μ μ€νκ² λΆμνκ³ , κ°λ ₯ν λΉλ λꡬλ₯Ό νμ©νλ©°, λͺ¨λ² μ¬λ‘λ₯Ό μ€μν¨μΌλ‘μ¨ μ΄κΈ° νμ΄μ§ λ‘λ μκ°μ κ·Ήμ μΌλ‘ μ€μ΄κ³ , λ€μν λ€νΈμν¬ μ‘°κ±΄ μ λ°μ κ±Έμ³ μ¬μ©μ κ²½νμ ν₯μμν€λ©°, λ νμ₯ κ°λ₯νκ³ μ μ§ κ΄λ¦¬νκΈ° μ¬μ΄ μ½λλ² μ΄μ€λ₯Ό ꡬμΆν μ μμ΅λλ€. λͺ¨λ λ°λ¦¬μ΄κ° μ€μνλ©°, νΉν λ€μν μΈνλΌμμ μ½ν μΈ μ μ‘μΈμ€νλ μ¬μ©μμκ²λ CSS μ½λ λΆν μ λ§μ€ν°νλ κ²μ΄ λͺ¨λμκ², μ΄λμμλ λΉ λ₯΄κ³ μ μ°νλ©° ν¬μ©μ μΈ μΉ κ²½νμ μ 곡νλ μ΄μ μ λλ€.
CSS μ½λ λΆν μ λν μμ£Ό 묻λ μ§λ¬Έ
Q1: CSS μ½λ λΆν μ΄ νμ νμνκ°μ?
μκ³ μ μ μΈ μΉμ¬μ΄νΈ λλ CSSκ° λ§€μ° μ νμ μΈ μ ν리μΌμ΄μ μ κ²½μ° μ½λ λΆν μ€μ μ κ΄λ¦¬νλ μ€λ²ν€λκ° μ΄μ λ³΄λ€ λ ν΄ μ μμ΅λλ€. κ·Έλ¬λ μ€κ° κ·λͺ¨μμ λκ·λͺ¨ μ ν리μΌμ΄μ , νΉν μ΅μ κ΅¬μ± μμ κΈ°λ° νλ μμν¬λ‘ ꡬμΆλμκ±°λ κΈλ‘λ² λμ€μ λμμΌλ‘ νλ κ²½μ° μ΅μ μ μ±λ₯μ μν΄ λ§€μ° κΆμ₯λλ©° μ’ μ’ νμν©λλ€. μ ν리μΌμ΄μ μ CSSκ° ν΄μλ‘ λΆν μ΄ λ μ€μν΄μ§λλ€.
Q2: CSS μ½λ λΆν μ΄ SEOμ μν₯μ λ―ΈμΉλμ?
μ, κ°μ μ μΌλ‘ κΈμ μ μΌλ‘ μν₯μ λ―ΈμΉ©λλ€. Googleκ³Ό κ°μ κ²μ μμ§μ μ’μ μ¬μ©μ κ²½νμ μ 곡νλ λΉ λ₯΄κ² λ‘λλλ μΉμ¬μ΄νΈλ₯Ό μ°μ μν©λλ€. CSS μ½λ λΆν μ ν΅ν΄ Core Web Vitals λ©νΈλ¦(LCP λ° FCPμ κ°μ)μ κ°μ ν¨μΌλ‘μ¨ λ λμ κ²μ μμμ κΈ°μ¬ν©λλ€. λ λΉ λ₯Έ μ¬μ΄νΈλ κ²μ μμ§ ν¬λ‘€λ¬κ° λ λ§μ νμ΄μ§λ₯Ό λ ν¨μ¨μ μΌλ‘ μμΈνν μ μμΌλ©° μ¬μ©μκ° μ΄νν κ°λ₯μ±μ΄ μ μ΄ κ²μ μκ³ λ¦¬μ¦μ κΈμ μ μΈ μ°Έμ¬λ₯Ό μ νΈν©λλ€.
Q3: CSS νμΌμ μλμΌλ‘ λΆν ν μ μλμ?
λ³λμ CSS νμΌμ μμ±νκ³ HTMLμ μλμΌλ‘ μ°κ²°νλ κ²μ κΈ°μ μ μΌλ‘ κ°λ₯νμ§λ§, λμ μ ν리μΌμ΄μ μ κ²½μ° μ΄ μ κ·Ό λ°©μμ λΉ λ₯΄κ² κ΄λ¦¬νκΈ° μ΄λ €μμ§λλ€. μ’ μμ±μ μλμΌλ‘ μΆμ νκ³ , μ€μ CSSκ° μΈλΌμΈλμλμ§ νμΈνκ³ , μΊμ 무ν¨νλ₯Ό μ²λ¦¬ν΄μΌ ν©λλ€. μ΅μ λΉλ λꡬλ μ΄ λ³΅μ‘ν νλ‘μΈμ€λ₯Ό μλννμ¬ ν¨μ¨μ μ΄κ³ μμ μ μΈ CSS μ½λ λΆν μ νμμ μ λλ€. μλ λΆν μ μΌλ°μ μΌλ‘ λ§€μ° μκ³ μ μ μΈ μ¬μ΄νΈ λλ νΉμ λ―Έλμ΄ μΏΌλ¦¬μλ§ κ°λ₯ν©λλ€.
Q4: CSS μ½λ λΆν κ³Ό PurgeCSSμ μ°¨μ΄μ μ 무μμΈκ°μ?
μ΄λ€μ μνΈ λ³΄μμ μ΄μ§λ§ λ³κ°μ λλ€.
- CSS μ½λ λΆν : CSSλ₯Ό μ¬λ¬ κ°μ λ μμ νμΌ(μ²ν¬)λ‘ λΆν νμ¬ νμμ λ°λΌ λ‘λν μ μμ΅λλ€. λͺ©νλ νμ¬ λ·°μ νμν CSSλ§ λ³΄λ΄μ΄ μ΄κΈ° νμ΄λ‘λλ₯Ό μ€μ΄λ κ²μ λλ€.
- PurgeCSS (λλ μ μ¬ν CSS "νΈλ¦¬ μμ΄νΉ" λꡬ): νλ‘μ νΈλ₯Ό λΆμνμ¬ μ¬μ©λμ§ μλ CSS κ·μΉμ μλ³νκ³ μ€νμΌμνΈμμ μ κ±°ν©λλ€. λͺ©νλ "μ£½μ" μ½λλ₯Ό μ κ±°νμ¬ CSS νμΌμ μ 체 ν¬κΈ°λ₯Ό μ€μ΄λ κ²μ λλ€.
μΌλ°μ μΌλ‘ λ λ€ μ¬μ©ν©λλ€. λ¨Όμ PurgeCSSλ₯Ό μ¬μ©νμ¬ κ° CSS μ²ν¬λ₯Ό μ΅μ ννμ¬ μ¬μ©λμ§ μλ κ·μΉμ μ κ±°ν λ€μ μ½λ λΆν μ μ¬μ©νμ¬ μ΄λ¬ν μ΅μ νλ μ²ν¬κ° νμν λλ§ λ‘λλλλ‘ ν©λλ€.
Q5: HTTP/2(λ° HTTP/3)κ° CSS λΆν μ μ΄λ»κ² μν₯μ λ―ΈμΉ©λκΉ?
HTTP/2μ λ€μ€νλ λ¨μΌ TCP μ°κ²°μ ν΅ν΄ μ¬λ¬ μμ²μ λ³΄λΌ μ μλλ‘ νμ¬ μ¬λ¬ κ°μ μμ νμΌκ³Ό κ΄λ ¨λ μ€λ²ν€λλ₯Ό μ€μ λλ€(μ΄μ μλ HTTP/1.1 νμμ κ³Όλν λΆν μ λν μ°λ €μμ). μ΄λ₯Ό ν΅ν΄ μ±λ₯ μ νκ° ν¨μ¬ μ μ μνλ‘ λ λ§μ μν CSS νμΌμ κ°λ κ²μ΄ μΌλ°μ μΌλ‘ κ°λ₯ν©λλ€. HTTP/3λ UDP κΈ°λ° QUICλ₯Ό ν΅ν΄ μ΄λ₯Ό λμ± κ°μ νμ¬ ν¨ν· μμ€ λ° λ€νΈμν¬ λ³κ²½μ λμ± νλ ₯μ μ΄λ―λ‘ λΆμμ ν μ°κ²°μ κ°μ§ μ¬μ©μμκ² μ΄μ μ μ 곡ν©λλ€. κ·Έλ¬λ μ΄λ¬ν λ°μ μλ λΆκ΅¬νκ³ μ¬μ ν νκ³κ° μμ΅λλ€. λͺ©νλ λ¨μν μμμ λΆν μ΄ μλλΌ μ§λ₯μ μΈ λΆν μ μ μ§νλ κ²μ λλ€.
Q6: λͺ¨λ κ³³μμ μ¬μ©λλ μ§μ ν κΈλ‘λ² CSSκ° μμΌλ©΄ μ΄λ»κ² ν΄μΌ νλμ?
μ§μ ν κΈλ‘λ² μ€νμΌ(μ: 리μ CSS, κΈ°λ³Έ νμ΄ν¬κ·ΈλνΌ λλ λͺ¨λ νμ΄μ§μ λνλλ ν΅μ¬ λΈλλ© μμ)μ κ²½μ° λ¨μΌ 곡μ "κ³΅κΈ μ 체" λλ "μΌλ°" CSS μ²ν¬μ λ£λ κ²μ΄ κ°μ₯ μ’μ΅λλ€. μ΄ μ²ν¬λ λΈλΌμ°μ μ CDNμμ μ κ·Ήμ μΌλ‘ μΊμλ μ μμΌλ―λ‘ μ¬μ©μκ° ν λ²λ§ λ€μ΄λ‘λνλ©΄ λ©λλ€. μ΄ν νμμμλ νΉμ νμ΄μ§ λλ κ΅¬μ± μμμ λν λ μμ λμ CSS μ²ν¬λ§ λ‘λλ©λλ€. "CSS λΆν κ·μΉ"μ 곡μ CSSκ° μμμ μλ―Ένλ κ²μ΄ μλλΌ, μ΅μνμ 곡μ CSSλ₯Ό μ¬μ©νμ¬ λλ¨Έμ§λ 쑰건λΆλ‘ λ‘λν¨μ μλ―Έν©λλ€.
Q7: λ€ν¬ λͺ¨λ λλ ν λ§μ λν CSSλ₯Ό λΆν λ‘ μ΄λ»κ² μ²λ¦¬νλμ?
μ΄κ²μ CSS λΆν μ νλ₯ν μ¬μ© μ¬λ‘μ
λλ€. λ°μ ν
λ§(light-theme.css
) λ° μ΄λμ΄ ν
λ§(dark-theme.css
)μ λν λ³λμ CSS νμΌμ λ§λ€ μ μμ΅λλ€. κ·Έλ° λ€μ μ¬μ©μ κΈ°λ³Έ μ€μ λλ μμ€ν
μ€μ μ κΈ°λ°μΌλ‘ μ μ ν μ€νμΌμνΈλ₯Ό λμ μΌλ‘ λ‘λν©λλ€.
- JavaScript κΈ°λ°: JavaScriptλ₯Ό μ¬μ©νμ¬ μ¬μ©μ μ€μ μ λ°λΌ
<link>
νκ·Έλ₯Ό 쑰건λΆλ‘ μΆκ°νκ±°λ μ κ±°νκ±°λ<body>
μμμ μ¬λ°λ₯Έ ν λ§ μ€νμΌμ νμ±ννλ ν΄λμ€λ₯Ό μ μ©ν©λλ€. - CSS
prefers-color-scheme
: μ΄κΈ° λ‘λλ₯Ό μν΄<link rel="stylesheet" media="(prefers-color-scheme: dark)" href="dark-theme.css">
λ°media="(prefers-color-scheme: light)" href="light-theme.css">
λ₯Ό μ¬μ©νμ¬ λΈλΌμ°μ κ° μ¬λ°λ₯Έ ν λ§λ₯Ό λ‘λνλλ‘ ν μ μμ΅λλ€. κ·Έλ¬λ μ 체 νμ΄μ§ μλ‘ κ³ μΉ¨ μμ΄ λμ μ νμ μν΄μλ μΌλ°μ μΌλ‘ JavaScriptκ° νμν©λλ€.
μ΄ μ κ·Ό λ°©μμ μ¬μ©μκ° νμλ‘ νλ ν λ§λ§ λ€μ΄λ‘λνλλ‘ λ³΄μ₯νμ¬ μ¬μ©μκ° μ¬μ©νμ§ μμ μλ μλ ν λ§μ λν μ΄κΈ° νμ΄λ‘λλ₯Ό ν¬κ² μ€μ λλ€.
Q8: CSS μ μ²λ¦¬κΈ°(Sass, Less, Stylus)λ λΆν κ³Ό ν΅ν©λ μ μλμ?
λ¬Όλ‘ μ
λλ€. CSS μ μ²λ¦¬κΈ°λ νμ€ CSSλ‘ μ»΄νμΌλ©λλ€. λΉλ λꡬ(Webpack, Rollup, Parcel, Vite)λ λ¨Όμ μ μ²λ¦¬κΈ° μ½λ(μ: .scss
λ₯Ό .css
λ‘)λ₯Ό μ»΄νμΌν λ€μ λΆν λ° μ΅μ ν λ¨κ³λ₯Ό μ μ©νλ λ‘λ/νλ¬κ·ΈμΈμ μ¬μ©νλλ‘ κ΅¬μ±λ©λλ€. λ°λΌμ μ±λ₯μ μν΄ μ½λ λΆν μ νμ©νλ©΄μ μ μ²λ¦¬κΈ°μ κ΅¬μ± μ΄μ μ κ³μ μ¬μ©ν μ μμ΅λλ€.