# [[Zero-runtime CSS]] ## πŸ“Œ Brief Summary Zero-runtime CSSλŠ” λŸ°νƒ€μž„ λ‹¨κ³„μ—μ„œ μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό μ‹€ν–‰ν•˜μ—¬ μŠ€νƒ€μΌμ„ λ™μ μœΌλ‘œ μƒμ„±ν•˜κ³  μ£Όμž…ν•˜λŠ” λŒ€μ‹ , λΉŒλ“œ νƒ€μž„μ— 정적인 CSSλ₯Ό μƒμ„±ν•˜λŠ” μŠ€νƒ€μΌλ§ νŒ¨λŸ¬λ‹€μž„μž…λ‹ˆλ‹€ [1, 2]. 이λ₯Ό 톡해 κ°œλ°œμžλŠ” νƒ€μž…μŠ€ν¬λ¦½νŠΈ 기반의 νƒ€μž… μ•ˆμ „μ„±κ³Ό CSS-in-JS의 개발 νŽΈμ˜μ„±μ„ μœ μ§€ν•˜λ©΄μ„œλ„ λΈŒλΌμš°μ €μ˜ λŸ°νƒ€μž„ μ„±λŠ₯ μ˜€λ²„ν—€λ“œλ₯Ό μ™„λ²½νžˆ μ œκ±°ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [1, 3]. λŒ€ν‘œμ μΈ λ„κ΅¬λ‘œλŠ” `vanilla-extract`κ°€ 있으며, 졜근 λΆ€μƒν•˜λŠ” React Server Components(RSC) ν™˜κ²½κ³Ό 높은 ν˜Έν™˜μ„±μ„ μ œκ³΅ν•©λ‹ˆλ‹€ [1, 4]. ## πŸ“– Core Content * **μΆœν˜„ λ°°κ²½ 및 RSC ν˜Έν™˜μ„± 문제 ν•΄κ²°:** 기쑴의 λŸ°νƒ€μž„ CSS-in-JS 라이브러리(예: Styled Components, Emotion)λŠ” λΈŒλΌμš°μ €κ°€ μŠ€νƒ€μΌ νƒœκ·Έλ₯Ό μƒμ„±ν•˜κ³  μ£Όμž…ν•˜κΈ° μœ„ν•΄ μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό μ‹€ν–‰ν•΄μ•Ό ν•˜λ―€λ‘œ "λŸ°νƒ€μž„ μ„ΈκΈˆ(runtime tax)"이라고 λΆˆλ¦¬λŠ” μ„±λŠ₯ 병λͺ©μ„ μœ λ°œν•©λ‹ˆλ‹€ [5, 6]. λ”μš±μ΄ React Server Components(RSC)λŠ” μ„œλ²„μ—μ„œλ§Œ μ‹€ν–‰λ˜κ³  λΈŒλΌμš°μ €μ—λŠ” 정적 HTML만 μŠ€νŠΈλ¦¬λ°ν•˜λ―€λ‘œ, React Context에 μ˜μ‘΄ν•˜λŠ” λŸ°νƒ€μž„ 기반 CSS-in-JSλŠ” RSC ν™˜κ²½μ—μ„œ 근본적인 ν˜Έν™˜μ„± 문제λ₯Ό κ²ͺ게 λ˜μ—ˆμŠ΅λ‹ˆλ‹€ [2, 4, 7]. μ΄λŸ¬ν•œ λ§ˆμ°°μ„ κ·Ήλ³΅ν•˜κ³ μž μžλ°”μŠ€ν¬λ¦½νŠΈ μ£Όμž… μ˜€λ²„ν—€λ“œ 없이 λΈŒλΌμš°μ €κ°€ 기본적으둜 μŠ€νƒ€μΌμ„ νŒŒμ‹±ν•  수 있게 λ•λŠ” 제둜 λŸ°νƒ€μž„ νŒ¨λŸ¬λ‹€μž„μœΌλ‘œμ˜ μ „ν™˜μ΄ μ΄‰λ°œλ˜μ—ˆμŠ΅λ‹ˆλ‹€ [2]. * **기술적 νŠΉμ§•κ³Ό λŒ€ν‘œ 도ꡬ (vanilla-extract):** 제둜 λŸ°νƒ€μž„ CSS-in-JS의 선두 주자인 `vanilla-extract`λŠ” λΉŒλ“œ νƒ€μž„μ— 정적 CSSλ₯Ό μƒμ„±ν•œλ‹€λŠ” μ μ—μ„œλŠ” CSS Modules와 μœ μ‚¬ν•˜μ§€λ§Œ, νƒ€μž…μŠ€ν¬λ¦½νŠΈλ₯Ό ν™œμš©ν•œ νƒ€μž… μ•ˆμ „(type-safe) μŠ€νƒ€μΌλ§μ„ μ§€μ›ν•œλ‹€λŠ” 차별점이 μžˆμŠ΅λ‹ˆλ‹€ [1]. μ‹€ν–‰ μ‹œμ μ˜ μ„±λŠ₯ μ˜€λ²„ν—€λ“œκ°€ μ „ν˜€ μ—†μœΌλ©°, μ„œλ²„ μ»΄ν¬λ„ŒνŠΈ(RSC)와 μ™„λ²½ν•˜κ²Œ ν˜Έν™˜λ˜μ–΄ ν˜„λŒ€μ μΈ React μ• ν”Œλ¦¬μΌ€μ΄μ…˜ ꡬ쑰에 μ ν•©ν•©λ‹ˆλ‹€ [1, 3, 4]. * **μ„±λŠ₯ 및 적용 ꢌμž₯ 사둀:** 제둜 λŸ°νƒ€μž„ 방식은 μ„œλ²„μ˜ λ Œλ”λ§ μ§€μ—° μ‹œκ°„μ„ 쀄이고 μ½”μ–΄ μ›Ή λ°”μ΄νƒˆ(Core Web Vitals) λ©”νŠΈλ¦­μ„ 크게 ν–₯μƒμ‹œν‚΅λ‹ˆλ‹€ [8, 9]. λ”°λΌμ„œ μ „ν™˜μœ¨ 확보가 ν•„μˆ˜μ μΈ κ³ μ„±λŠ₯ μ‚¬μš©μž λŒ€λ©΄(Public-Facing) μ• ν”Œλ¦¬μΌ€μ΄μ…˜ κ°œλ°œμ— 특히 μœ λ¦¬ν•©λ‹ˆλ‹€ [10]. λ‹€μˆ˜μ˜ ν…Œλ§ˆλ₯Ό 관리해야 ν•˜λŠ” λŒ€κ·œλͺ¨ λ””μžμΈ μ‹œμŠ€ν…œμ„ Next.js App Router 기반으둜 ꡬ좕할 λ•Œ, λŸ°νƒ€μž„ λΆ€ν•˜κ°€ μ—†κ³  νƒ€μž… μ•ˆμ „μ„±μ΄ 보μž₯λ˜λŠ” 제둜 λŸ°νƒ€μž„ μ†”λ£¨μ…˜(`vanilla-extract` λ“±)μ΄λ‚˜ μœ ν‹Έλ¦¬ν‹° 퍼슀트 ν”„λ ˆμž„μ›Œν¬(Tailwind CSS)의 채택이 κ°•λ ₯히 ꢌμž₯λ©λ‹ˆλ‹€ [10, 11]. ## πŸ”— Knowledge Connections - **Related Topics:** [[React Server Components (RSC)]], [[CSS-in-JS]], [[Tailwind CSS]], [[vanilla-extract]], [[CSS Modules]] - **Projects/Contexts:** [[Next.js App Router Migration]], [[Scalable Design Systems]] - **Contradictions/Notes:** μ†ŒμŠ€μ— λ”°λ₯΄λ©΄, Next.js의 κΈ°μ‘΄ Pages Routerλ₯Ό μ‚¬μš© μ€‘μ΄κ±°λ‚˜ λŸ°νƒ€μž„ ν…Œλ§ˆ κΈ°λŠ₯이 κ°•λ ₯ν•˜κ²Œ ν•„μš”ν•œ 닀쀑 ν…Œλ§ˆ μ œν’ˆμ—μ„œλŠ” κΈ°μ‘΄ λŸ°νƒ€μž„ CSS-in-JS도 ν›Œλ₯­ν•˜κ²Œ μž‘λ™ν•˜μ§€λ§Œ [10, 11], Next.js App Routerλ₯Ό μ‚¬μš©ν•˜λŠ” μ‹ κ·œ ν”„λ‘œμ νŠΈμ˜ 경우 λŸ°νƒ€μž„ CSS-in-JS μ‚¬μš©μ„ μ§€μ–‘ν•˜κ³  제둜 λŸ°νƒ€μž„ λ°©μ‹μ΄λ‚˜ Tailwind CSSλ₯Ό 선택할 것을 λͺ…ν™•νžˆ κΆŒκ³ ν•©λ‹ˆλ‹€ [10, 11]. --- *Last updated: 2026-04-26*