# [[Zero-runtime CSS-in-JS]] ## ๐Ÿ“Œ Brief Summary Zero-runtime CSS-in-JS๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ์Šคํƒ€์ผ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ JavaScript ๋Ÿฐํƒ€์ž„ ์˜ค๋ฒ„ํ—ค๋“œ ์—†์ด, ๋นŒ๋“œ ํƒ€์ž„์— ์ •์  CSS๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์Šคํƒ€์ผ๋ง ํŒจ๋Ÿฌ๋‹ค์ž„์ด๋‹ค [1, 2]. ๋Œ€ํ‘œ์ ์ธ ๋„๊ตฌ์ธ `vanilla-extract`๋Š” ํƒ€์ž… ์•ˆ์ „(type-safe)ํ•œ ์Šคํƒ€์ผ๋ง์„ ์ œ๊ณตํ•˜๋ฉด์„œ๋„ ๋Ÿฐํƒ€์ž„ ๋น„์šฉ์„ ์ „ํ˜€ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค [1]. ์ด๋Š” React Server Components(RSC) ํ™˜๊ฒฝ๊ณผ ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ๊ธฐ์กด ๋Ÿฐํƒ€์ž„ CSS-in-JS์˜ ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ณ  ๋„ค์ดํ‹ฐ๋ธŒ CSS ์ˆ˜์ค€์˜ ์„ฑ๋Šฅ์„ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ํ•ต์‹ฌ ๋Œ€์•ˆ์œผ๋กœ ํ‰๊ฐ€๋ฐ›๋Š”๋‹ค [1-3]. ## ๐Ÿ“– Core Content * **๋“ฑ์žฅ ๋ฐฐ๊ฒฝ ๋ฐ RSC ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ:** ๊ธฐ์กด์˜ Styled Components๋‚˜ Emotion๊ณผ ๊ฐ™์€ CSS-in-JS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์€ ๋ธŒ๋ผ์šฐ์ €์—์„œ JavaScript๋ฅผ ์‹คํ–‰ํ•˜์—ฌ CSS ๋ฌธ์ž์—ด์„ ์ƒ์„ฑํ•˜๊ณ  ์ฃผ์ž…ํ•˜๋Š” ๋Ÿฐํƒ€์ž„ ๋น„์šฉ์„ ๋ฐœ์ƒ์‹œ์ผฐ๋‹ค [4, 5]. ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์€ ํŠนํžˆ React Context์— ์˜์กดํ•˜๊ธฐ ๋•Œ๋ฌธ์—, Context๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” React Server Components(RSC) ํ™˜๊ฒฝ์—์„œ๋Š” ๊ทผ๋ณธ์ ์œผ๋กœ ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ํฐ ๋งˆ์ฐฐ์„ ๋นš๊ฒŒ ๋˜์—ˆ๋‹ค [2, 3, 6]. ์ด๋Ÿฌํ•œ ์„ฑ๋Šฅ ๋ฐ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด, ๋Ÿฐํƒ€์ž„ ์ฃผ์ž… ์˜ค๋ฒ„ํ—ค๋“œ ์—†์ด ๋นŒ๋“œ ํƒ€์ž„์— ์ •์  CSS๋ฅผ ์ƒ์„ฑํ•˜๋Š” zero-runtime ํŒจ๋Ÿฌ๋‹ค์ž„์œผ๋กœ์˜ ์ „ํ™˜์ด ์š”๊ตฌ๋˜์—ˆ๋‹ค [2]. * **์ฃผ์š” ํŠน์ง• ๋ฐ `vanilla-extract`:** Zero-runtime CSS-in-JS๋Š” JavaScript ์ตœ์šฐ์„  ์Šคํƒ€์ผ๋ง์˜ ๊ฐœ๋ฐœ์ž ์ธ์ฒด๊ณตํ•™์ (ergonomics) ์ด์ ์„ ๋ˆ„๋ฆฌ๋ฉด์„œ๋„ ๋„ค์ดํ‹ฐ๋ธŒ CSS์˜ ์„ฑ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•œ๋‹ค [7]. ์ด ๋ฐฉ์‹์˜ ๋Œ€ํ‘œ์ ์ธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ `vanilla-extract`๋Š” ๋นŒ๋“œ ํƒ€์ž„์— CSS Modules์ฒ˜๋Ÿผ ์ •์ ์ธ CSS๋ฅผ ์ƒ์„ฑํ•˜๋ฉฐ, TypeScript๋ฅผ ํ™œ์šฉํ•ด ์™„์ „ํžˆ ํƒ€์ž… ์•ˆ์ „ํ•œ(type-safe) ์Šคํƒ€์ผ๋ง์„ ์ œ๋กœ ๋Ÿฐํƒ€์ž„ ์˜ค๋ฒ„ํ—ค๋“œ๋กœ ์ง€์›ํ•œ๋‹ค [1]. ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋ธŒ๋ผ์šฐ์ €๋Š” ๋ฌด๊ฑฐ์šด JavaScript ์‹คํ–‰ ์—†์ด ์Šคํƒ€์ผ์„ ๊ธฐ๋ณธ์ ์œผ๋กœ ํŒŒ์‹ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค [2]. * **์ ์šฉ ์‹œ๊ธฐ ๋ฐ ๋ชจ๋ฒ” ์‚ฌ๋ก€:** ๋‹ค์ˆ˜์˜ ํ…Œ๋งˆ๋ฅผ ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๋Š” ๋Œ€๊ทœ๋ชจ ๋””์ž์ธ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•  ๋•Œ ์ œ๋กœ ๋Ÿฐํƒ€์ž„์ด๋ฉด์„œ ํƒ€์ž… ์•ˆ์ „์„ฑ์„ ๋ณด์žฅํ•˜๋Š” `vanilla-extract`์˜ ์‚ฌ์šฉ์ด ๊ฐ•๋ ฅํžˆ ๊ถŒ์žฅ๋œ๋‹ค [8]. ๋ฐ˜๋ฉด Next.js App Router๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‹ ๊ทœ ํ”„๋กœ์ ํŠธ์˜ ๊ฒฝ์šฐ, ๋Ÿฐํƒ€์ž„ ๋ฐฉ์‹์˜ CSS-in-JS ์‚ฌ์šฉ์€ ์ง€์–‘ํ•ด์•ผ ํ•˜๋ฉฐ zero-runtime CSS-in-JS, Tailwind CSS ๋˜๋Š” CSS Modules ์ค‘ ํ•˜๋‚˜๋ฅผ ์ฑ„ํƒํ•˜๋Š” ๊ฒƒ์ด ์•„ํ‚คํ…์ฒ˜ ๊ด€์ ์—์„œ์˜ ๋ชจ๋ฒ” ์‚ฌ๋ก€์ด๋‹ค [8]. ## ๐Ÿ”— Knowledge Connections - **Related Topics:** [[React Server Components (RSC)]], [[CSS-in-JS]], [[Tailwind CSS]], [[Design Tokens]], [[Next.js App Router]] - **Projects/Contexts:** [[vanilla-extract]], ๋Œ€๊ทœ๋ชจ ๋””์ž์ธ ์‹œ์Šคํ…œ(Large Design Systems) - **Contradictions/Notes:** ๊ธฐ์กด ๋Ÿฐํƒ€์ž„ CSS-in-JS(์˜ˆ: styled-components)๋Š” ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„์˜ ๊ฐ•๋ ฅํ•œ ๋™์  ์Šคํƒ€์ผ๋ง ๊ธฐ๋Šฅ๊ณผ ํŽธ๋ฆฌํ•œ ๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜์„ ์ œ๊ณตํ•˜์ง€๋งŒ [4], Next.js App Router์™€ ๊ฐ™์€ ์ตœ์‹  RSC ํ™˜๊ฒฝ์—์„œ๋Š” ์‹ฌ๊ฐํ•œ ์„ฑ๋Šฅ ์ €ํ•˜์™€ ๋Ÿฐํƒ€์ž„ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๋ฅผ ์•ผ๊ธฐํ•˜๋ฏ€๋กœ Zero-runtime CSS-in-JS๋‚˜ Tailwind CSS๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋Š” ๊ฒƒ์ด ๋Œ€์•ˆ์œผ๋กœ ์ œ์‹œ๋œ๋‹ค [3, 8]. --- *Last updated: 2026-04-26*